找回密码
 立即注册
搜索
查看: 201|回复: 0

在 CentOS 7 下构建 Android 编译环境

[复制链接]

986

主题

92

回帖

5万

积分

管理员

积分
55255
发表于 2022-7-4 16:37:02 | 显示全部楼层 |阅读模式

! B  u* V; B% N' d
在 Android Studio 之外,还可以通过 Gradle Script 来编译 Android 项目并构建和测试应用。: i" t3 u7 W2 [4 B1 `& u
本文是一个备忘录,以记录我在 x86_64 GNU/Linux 系统 CentOS Linux release 7.8.2003 下折腾 Android 编译环境的一个过程。
+ o4 B$ ~6 {( c" y; R; l& W2 ]" J4 J/ x; k% E- t9 |. V
本文将会安装以下组件:  J3 z- k/ ]& Y; k$ L
  1. Git
    0 F0 `6 U' E; B6 Y+ v8 Z2 S5 _
  2. JDK 1.8
    0 s9 i' g$ w( q. D2 ?$ w! |4 q: I
  3. Go 1.14.7
    * j: E. i. Y# j+ s  @
  4. Android SDK
    6 y) C  ?% c4 t3 f! n( f
  5.   Android NDK4 S6 a0 u5 b% `. U' ]" x( E
  6. Rust 1.45.0
    - {8 J: q1 I# N+ N
  7.   Android Targets:
    3 E9 r* g# `$ t+ P
  8.     armv7-linux-androideabi- L% w$ i: b) ?5 n+ V7 v- m
  9.     aarch64-linux-android! y- A7 g( H  X  }3 Y  N( M
  10.     i686-linux-android1 p8 D, R  j9 V/ K
  11.     x86_64-linux-android
复制代码

1 f% f9 B7 v" u3 c+ l* Q$ D) z以下的所有过程均是在 root 用户下操作。
' H% D5 o7 L! Q1. 安装 Git 和 JDK 1.8这两个组件发行版自带,通过以下命令即可安装。与此同时,再安装一些其他必要的组件 wget 和 unzip。2 \3 H5 T6 }, K& b- L2 w4 g
  1. $ yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel wget unzip git
复制代码
完成后通过以下命令验证 JDK 版本号。
  1. $ java -version
复制代码
返回
  1. openjdk version "1.8.0_252"& n! l9 d$ c/ K! v
  2. OpenJDK Runtime Environment (build 1.8.0_252-b09)$ S9 ?7 X4 t5 `3 l. X
  3. OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
复制代码
  1. $ javac -version
复制代码
返回
  1. javac 1.8.0_252
复制代码

* T/ _, m2 `. R, F2. 安装 Go目前 Go 的最新版是 1.14.7。安装过程如下。
( H. ]2 J" i* \% m. I" m- b
  1. $ GO_VERSION=1.14.7
    ' J6 W8 n  z4 t# I! O  p
  2. $ wget -O /tmp/go${GO_VERSION}.tar.gz https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz
    , ?, p; z: v8 v* n
  3. $ tar -C /usr/local -xzf /tmp/go${GO_VERSION}.tar.gz. X# N  P  b8 R; {- {( C& x/ ?2 E1 [
  4. $ rm -fv /tmp/go${GO_VERSION}.tar.gz
    + M5 Q) `6 o6 v( S
  5. $ export PATH=/usr/local/go/bin:$PATH
复制代码
完成后通过以下命令验证 Go 版本号。
  1. $ go version
复制代码
返回
  1. go version go1.14.7 linux/amd64
复制代码
, K& e: c: P  H8 T
3. 安装 Android SDK 及 Android NDK假设 ANDROID_HOME 路径是 /opt/sdk。安装过程如下。+ `" {8 L" f6 Q
  1. $ mkdir -p /opt/sdk && cd /opt/sdk
    7 [, f' W) ]  j( @
  2. $ wget https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip
    + {9 g+ U. `! l" ?$ R
  3. $ unzip -q commandlinetools-linux-6609375_latest.zip
    , T6 `$ \8 r! _2 g
  4. $ rm -fv commandlinetools-linux-6609375_latest.zip. \2 u* r3 R! R9 C- Z3 X9 o' o4 {. m
  5. $ export PATH=/opt/sdk/tools/bin:$PATH( |2 Q# O' o$ m% |
  6. $ [ -z "${ANDROID_HOME}" ] && export ANDROID_HOME=/opt/sdk/ p* c* F' C0 ^, r  r1 P
  7. $ yes | sdkmanager --sdk_root=${ANDROID_HOME} --licenses
复制代码
通过 sdkmanager 来安装一些组件。一条命令一步到位。如下。
  1. $ sdkmanager --sdk_root=${ANDROID_HOME} "platform-tools" "platforms;android-30" "platforms;android-29" "ndk-bundle" "ndk;21.0.6113669" "build-tools;29.0.2"
复制代码
完成后,确认已安装的列表。
  1. $ sdkmanager --sdk_root=${ANDROID_HOME} --list
复制代码
返回
  1. Installed packages:% F& ~- }$ q4 z  U2 o
  2.   Path                 | Version      | Description                     | Location            
    . G  F. ]' `# v$ \
  3.   -------              | -------      | -------                         | -------              0 R8 m5 K0 k! k- o
  4.   build-tools;29.0.2   | 29.0.2       | Android SDK Build-Tools 29.0.2  | build-tools/29.0.2/  ( I4 l% J& F8 }* S
  5.   ndk-bundle           | 21.3.6528147 | NDK                             | ndk-bundle/          * e# ~  {% F) M' }" R
  6.   ndk;21.0.6113669     | 21.0.6113669 | NDK (Side by side) 21.0.6113669 | ndk/21.0.6113669/    . J8 d  G9 j4 t! P" S
  7.   patcher;v4           | 1            | SDK Patch Applier v4            | patcher/v4/          * Q/ Y7 X' e$ u  w- r: U
  8.   platform-tools       | 30.0.3       | Android SDK Platform-Tools      | platform-tools/      
    " Q. Q; P& F8 r4 S5 t" A7 L$ ?4 {1 f
  9.   platforms;android-29 | 4            | Android SDK Platform 29         | platforms/android-29/
    , j: F  g9 q3 I/ }6 ]
  10.   platforms;android-30 | 1            | Android SDK Platform 30         | platforms/android-30/
    * H( I( m& r) p/ B* x( l; t
  11.   tools                | 2.1.0        | Android SDK Tools 2.1           | tools/                 Q( \) `0 [4 y' Z+ {7 R
  12. Available Packages:
    ; f( D0 Z1 Z7 Z+ A
  13.   以下省略
复制代码
/ t  G: A( T* c1 Y+ y* z* N
4. 安装 Rust 及其它目前 Rust 的最新版是 1.45.0。安装过程如下。$ w5 e  X% _$ I" U3 j
  1. $ export RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo
    # n. `; T# |# u
  2. $ RUST_VERSION=1.45.0. [( x) R3 \) {" A3 V" ]  S
  3. $ RUSTARCH='x86_64-unknown-linux-gnu'/ c& ]8 w; W, i: u& r" N4 H/ \
  4. $ wget -O /tmp/rustup-init "https://static.rust-lang.org/rustup/archive/1.21.1/${RUSTARCH}/rustup-init"
    . d1 c1 X; {9 `5 a
  5. $ chmod 755 /tmp/rustup-init
    : g& ^# y% v2 q+ ?
  6. $ /tmp/rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION
    7 J' ^, D. n  i
  7. $ rm -fv /tmp/rustup-init
    7 M' }: d/ H3 M; v: e
  8. $ chmod -R a+w ${RUSTUP_HOME} ${CARGO_HOME}
    * W( i2 C$ I: l& i: K
  9. $ export PATH=/usr/local/cargo/bin:$PATH
复制代码
完成后通过以下命令验证 Rust 及组件的版本号。
  1. $ rustup --version
复制代码
返回
  1. rustup 1.21.1 (7832b2ebe 2019-12-20)
复制代码
  1. $ cargo --version
复制代码
返回
  1. cargo 1.45.0 (744bd1fbb 2020-06-15)
复制代码
  1. $ rustc --version
复制代码
返回
  1. rustc 1.45.0 (5c1f21c3b 2020-07-13)
复制代码
Rust 安装以下 Android Targets:
  1. armv7-linux-androideabi1 P8 v, n9 S4 o( G; o; h; y
  2. aarch64-linux-android
    " y# i) d: J2 c  u
  3. i686-linux-android
    ; m- p% y5 q+ D7 F; A
  4. x86_64-linux-android
复制代码
安装过程如下。
  1. $ rustup install stable
    " m- K  f9 {+ D% M- U# ^" z
  2. $ rustup default stable
    , |* x3 r  e; k9 ]
  3. $ rustup target add armv7-linux-androideabi1 p7 e4 P8 o/ s- m/ c
  4. $ rustup target add i686-linux-android) k* G& K/ n) m
  5. $ rustup target add aarch64-linux-android
    ) D- W- L2 S. Z! u+ Y- b& C( h, v
  6. $ rustup target add x86_64-linux-android
复制代码

; A3 C' g% i- w& ^4 Z5. 持久化环境变量上面的安装步骤是通过 export 来定义系统 PATH 的,在退出当前登录后就会丢失设置。5 m" M, g( b$ V0 O  _, w8 U
因此需要持久化一些环境变量。
; C1 \. D, z4 G0 v编辑 ~/.bash_profile 文件。添加 ANDROID_HOME,RUSTUP_HOME,CARGO_HOME 的定义以及增加 PATH 定义。* @" H/ n& P5 h0 F% R! p' D4 x
最后呈现内容如下。
: Q, I3 G' x! O8 u: l
  1. # .bash_profile) R2 B' x" s7 ?/ B" u
  2. ( S1 B3 }: A$ y0 f) D: H+ ]7 J
  3. # Get the aliases and functions2 i& g) v  o; n0 l9 Z1 s) t
  4. if [ -f ~/.bashrc ]; then' D- U7 {; _- z! ]/ ]! v! i4 R. P# Q
  5. . ~/.bashrc
    6 |! v4 i2 \7 V" C, C  p0 P
  6. fi
    1 F4 f6 [1 W8 L: e
  7. + w& `( v! h* q2 j0 N: K" @
  8. # User specific environment and startup programs
    0 ?5 Q& U- d2 K3 Y/ I5 |

  9. ' k/ u2 F/ \  V6 x
  10. export ANDROID_HOME=/opt/sdk RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo
    ' G, V8 n* t0 p. d: Y* E* L

  11. " l& I+ o! W0 \; ~
  12. PATH=$PATH:$HOME/bin:$ANDROID_HOME/tools/bin:/usr/local/go/bin:/usr/local/cargo/bin5 H4 J; ]8 f( u$ J0 _% B) w
  13. - o  ]5 o" s7 L" B
  14. export PATH
复制代码
$ Q! P: ?; O9 x/ @4 O& I
6. 编译 Android 项目这里选一个比较简单的项目来练手:v2ray-plugin-android
0 ^1 b* x6 X: \+ m" E编译过程如下。
  t/ U( ?% W2 J% N
  1. $ git clone https://github.com/shadowsocks/v2ray-plugin-android.git
      v0 @( M) W/ [  z; f) a( d
  2. $ cd v2ray-plugin-android8 v4 `$ P7 Z( a$ w- x1 T* s
  3. $ git submodule update --init --recursive
    # }9 O0 U! D) F4 T! w' b
  4. $ ./gradlew assembleRelease
复制代码
# W% D+ x, B8 v8 q& e+ u2 t4 m
完成后,编译好的 apk 文件位于 app/build/outputs/apk/release 路径下。. a) R- h* [- J3 a
Android 系统要求所有 apk 必须先使用证书进行数字签名,然后才能安装到设备上或进行更新。
3 ]4 l5 q3 V& q3 _3 e' Q; E因此这些 apk 文件还不能被直接拿来安装。- h8 E' W' _( R4 d
至于如何签名,请参考以下链接,过程省略。
% K. a! y, F( H1 j2 K; |https://developer.android.com/studio/publish/app-signing. O: K: E2 `& ?  I" e* N* N- `
7. 总结当你习惯于用命令行做事的时候,你会发现效率往往会有很大的提升。编译代码亦是如此。8 x& n" ^/ \/ J" j) y8 ^

6 h: f4 x9 j  C/ |+ K) Q, X1 w4 _9 s! E
; X# m( s; H8 F* f: e5 S
) ?- I- \# `( ]& \

2 q+ [# g; _& D& x
" |3 h  Y+ [  z' c/ f
$ `/ a9 ~& i' f+ z+ W% j( A

, N) ?: z3 c6 ^6 m  ^2 V+ g+ H
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-3-21 11:54 PM , Processed in 0.117073 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表