|
|
' n2 ]* [& l4 _9 l: U/ F在 Android Studio 之外,还可以通过 Gradle Script 来编译 Android 项目并构建和测试应用。
+ E; y/ Z: s* b7 D本文是一个备忘录,以记录我在 x86_64 GNU/Linux 系统 CentOS Linux release 7.8.2003 下折腾 Android 编译环境的一个过程。9 @, S. C9 i# p! F+ ?6 @' k: r' j7 i
) J/ s& ^9 l% b, I/ N本文将会安装以下组件:
8 n# _7 A z' `- Git& X/ D- n$ \ X# x8 B
- JDK 1.8& u) T. i M" y* P
- Go 1.14.7% c9 w9 \3 Q/ k K
- Android SDK
3 R0 ?* @- w, I6 Z$ i |4 x - Android NDK( m+ r8 W( ?9 x7 b0 ?4 r2 f
- Rust 1.45.04 y& Q4 `* H$ T v
- Android Targets:
+ X3 ^$ d: l: M4 T( G - armv7-linux-androideabi
" ?1 Q3 Z! D& r$ W: L - aarch64-linux-android1 p# F$ Q9 w1 e. N# G' r/ ~) S2 W1 O
- i686-linux-android
2 r/ _) o! `5 q - x86_64-linux-android
复制代码 8 c( \; ^1 X; Z4 B
以下的所有过程均是在 root 用户下操作。# B( U) n& N3 f2 k1 u4 Y Y4 O
1. 安装 Git 和 JDK 1.8这两个组件发行版自带,通过以下命令即可安装。与此同时,再安装一些其他必要的组件 wget 和 unzip。( ~) R! I$ B8 I. N+ p. A G- [
- $ yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel wget unzip git
复制代码 完成后通过以下命令验证 JDK 版本号。 - openjdk version "1.8.0_252"4 F5 T2 m) p8 V2 v
- OpenJDK Runtime Environment (build 1.8.0_252-b09)
) P6 Q' U" L y, ?+ ?, Z - OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
复制代码 返回 u- x' l8 Y1 F7 _1 N
2. 安装 Go目前 Go 的最新版是 1.14.7。安装过程如下。
| I/ A. \' C& _$ T/ t/ g- $ GO_VERSION=1.14.76 T, E" |, ~. ^6 h
- $ wget -O /tmp/go${GO_VERSION}.tar.gz https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz# y2 y2 R& @. ^- e; L. j1 Y: Q3 X
- $ tar -C /usr/local -xzf /tmp/go${GO_VERSION}.tar.gz( v8 m4 |4 [ [6 @* H% O( }* N
- $ rm -fv /tmp/go${GO_VERSION}.tar.gz
' g5 ~" m0 ]+ J6 _ - $ export PATH=/usr/local/go/bin:$PATH
复制代码 完成后通过以下命令验证 Go 版本号。 - go version go1.14.7 linux/amd64
复制代码
1 q( z7 p7 y- h1 j, e2 ?) W* `3. 安装 Android SDK 及 Android NDK假设 ANDROID_HOME 路径是 /opt/sdk。安装过程如下。4 f; r) ^, c% |- H" ?+ ~5 N3 ?
- $ mkdir -p /opt/sdk && cd /opt/sdk% c* F' T8 g( e2 [& B- T& z
- $ wget https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip$ D/ `# h/ R" W$ b" F6 G
- $ unzip -q commandlinetools-linux-6609375_latest.zip2 q) t# j k4 c5 S0 k4 C
- $ rm -fv commandlinetools-linux-6609375_latest.zip7 n' z- \# U# A8 M3 F$ [6 I
- $ export PATH=/opt/sdk/tools/bin:$PATH$ f: [4 Y" {4 m6 x- P# u( V
- $ [ -z "${ANDROID_HOME}" ] && export ANDROID_HOME=/opt/sdk
3 U* i1 v. ]1 w. C' ~* E2 \# I - $ yes | sdkmanager --sdk_root=${ANDROID_HOME} --licenses
复制代码 通过 sdkmanager 来安装一些组件。一条命令一步到位。如下。- $ sdkmanager --sdk_root=${ANDROID_HOME} "platform-tools" "platforms;android-30" "platforms;android-29" "ndk-bundle" "ndk;21.0.6113669" "build-tools;29.0.2"
复制代码 完成后,确认已安装的列表。- $ sdkmanager --sdk_root=${ANDROID_HOME} --list
复制代码 返回- Installed packages:
% @$ T* c0 z7 A3 W$ }. J# W - Path | Version | Description | Location 2 g' u4 A$ E3 y/ |' _
- ------- | ------- | ------- | -------
: R. R, | l: Q+ ]3 p- v* N - build-tools;29.0.2 | 29.0.2 | Android SDK Build-Tools 29.0.2 | build-tools/29.0.2/ : c- D4 h( Y9 V* d* n
- ndk-bundle | 21.3.6528147 | NDK | ndk-bundle/ 0 p9 h' l3 N) V, s& P0 ^+ T* H
- ndk;21.0.6113669 | 21.0.6113669 | NDK (Side by side) 21.0.6113669 | ndk/21.0.6113669/
1 e& g2 A- F$ I+ F7 E L - patcher;v4 | 1 | SDK Patch Applier v4 | patcher/v4/ ( V$ q/ C+ X" I
- platform-tools | 30.0.3 | Android SDK Platform-Tools | platform-tools/
) B4 j& \$ z1 {) t; _" x, ] - platforms;android-29 | 4 | Android SDK Platform 29 | platforms/android-29/
3 R$ O4 `8 y! w3 m4 E - platforms;android-30 | 1 | Android SDK Platform 30 | platforms/android-30/
) d5 P$ @* V( s! Y2 K - tools | 2.1.0 | Android SDK Tools 2.1 | tools/
" W0 X- X! X* u. x5 O - Available Packages:4 l' e/ l! a8 j+ i
- 以下省略
复制代码 0 k b$ ]" r2 Q7 E* a% ?5 J
4. 安装 Rust 及其它目前 Rust 的最新版是 1.45.0。安装过程如下。' V9 ~# M( c+ I! {& y
- $ export RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo
# l! W& d8 n: t% U- Z - $ RUST_VERSION=1.45.0$ A' e3 J+ E$ M9 w7 R6 f/ K
- $ RUSTARCH='x86_64-unknown-linux-gnu'$ q" U" P6 M( a/ c9 |* |7 [
- $ wget -O /tmp/rustup-init "https://static.rust-lang.org/rustup/archive/1.21.1/${RUSTARCH}/rustup-init". }& w d7 X7 w% C* W8 x
- $ chmod 755 /tmp/rustup-init
8 Z3 @! k; O1 o5 v x- l/ j - $ /tmp/rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION) G# i6 L! g8 M6 G
- $ rm -fv /tmp/rustup-init
- U. I* L+ w4 U0 t9 ? - $ chmod -R a+w ${RUSTUP_HOME} ${CARGO_HOME}" [# s) c* Z1 y
- $ export PATH=/usr/local/cargo/bin:$PATH
复制代码 完成后通过以下命令验证 Rust 及组件的版本号。- rustup 1.21.1 (7832b2ebe 2019-12-20)
复制代码 返回- cargo 1.45.0 (744bd1fbb 2020-06-15)
复制代码 返回- rustc 1.45.0 (5c1f21c3b 2020-07-13)
复制代码 Rust 安装以下 Android Targets:- armv7-linux-androideabi+ ~: h1 e) U6 X8 Q) j: h
- aarch64-linux-android
4 w& I- @, V9 r - i686-linux-android2 @5 W y, y Y: P0 _& O4 V
- x86_64-linux-android
复制代码 安装过程如下。- $ rustup install stable
( L# \+ p2 H5 `8 I - $ rustup default stable
0 M. Z9 H" S' }# B: e( {- k! { E; M - $ rustup target add armv7-linux-androideabi
4 g* c; s* T. y( { - $ rustup target add i686-linux-android
9 n% c6 e& R, F7 t. }1 U - $ rustup target add aarch64-linux-android' x I6 v7 `0 _+ W& Q; `
- $ rustup target add x86_64-linux-android
复制代码
3 {! ?6 t: v- G& R# x. L( `5. 持久化环境变量上面的安装步骤是通过 export 来定义系统 PATH 的,在退出当前登录后就会丢失设置。
1 g- f+ j# j4 s; I& B- {因此需要持久化一些环境变量。( b3 S/ N+ g" W* X. n3 p$ x
编辑 ~/.bash_profile 文件。添加 ANDROID_HOME,RUSTUP_HOME,CARGO_HOME 的定义以及增加 PATH 定义。
0 I Y2 B) `4 t最后呈现内容如下。, ^5 Z; \7 J. ^! X
- # .bash_profile$ `( z1 D8 _- }6 ~8 ?/ q8 f- ^
4 e% H$ k J# Z3 o- # Get the aliases and functions7 Y. Z/ [; Z) C7 E8 p! C7 P a
- if [ -f ~/.bashrc ]; then* E) M$ v2 f- S
- . ~/.bashrc
* h; k) I* i- }0 }! k0 c - fi
) s- k2 h, L4 ?- x
/ r' ?9 |4 T5 L& b7 c- # User specific environment and startup programs8 B. q' S9 k) c8 l8 d! f3 }! N
- 9 Y2 w" q$ |4 F7 i' i0 x
- export ANDROID_HOME=/opt/sdk RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo: J) [9 t+ u3 ^ s! o4 [% g
- 2 }% R% _7 g3 H8 d) E
- PATH=$PATH:$HOME/bin:$ANDROID_HOME/tools/bin:/usr/local/go/bin:/usr/local/cargo/bin/ N: V. m L' o# D# e
- ! M; q$ y; B4 a8 ^* \/ v
- export PATH
复制代码
3 I% B1 ^8 |6 O+ G8 W# _* E2 s- b( b: [6. 编译 Android 项目这里选一个比较简单的项目来练手:v2ray-plugin-android。
8 V2 y% `1 g) x( w1 \: M8 o5 ?" W+ u编译过程如下。
7 M/ H7 }* V7 `6 y) g0 E4 T# L- $ git clone https://github.com/shadowsocks/v2ray-plugin-android.git
4 F# Y2 H+ K9 L0 p. n - $ cd v2ray-plugin-android
2 f, V0 D2 H0 X2 v+ m, P7 |' _3 L; \ - $ git submodule update --init --recursive4 ]1 V+ q% Q- N- b; B: k
- $ ./gradlew assembleRelease
复制代码 ! ^/ b+ g U+ b u6 Q1 A" D: ?
完成后,编译好的 apk 文件位于 app/build/outputs/apk/release 路径下。4 y1 }" h3 C; j! `' F
Android 系统要求所有 apk 必须先使用证书进行数字签名,然后才能安装到设备上或进行更新。
7 D8 W" O7 g6 P* l. e因此这些 apk 文件还不能被直接拿来安装。
, K0 J: Q: M( Q' q. j- h' I至于如何签名,请参考以下链接,过程省略。
9 e" \0 L1 Q6 L. whttps://developer.android.com/studio/publish/app-signing
, P9 S d' U' i6 g. M9 I7. 总结当你习惯于用命令行做事的时候,你会发现效率往往会有很大的提升。编译代码亦是如此。
4 m: V6 O7 K# C. R2 E& t6 e( M/ @( i
- o/ e" D( u' E9 h, e3 D' t) B: P
3 M- l3 k; v/ J# \7 I/ x! t- \
) A" L% l/ H; d: ~% ^. _, Y7 M4 z8 b& @3 q' `# S Z
- g. l2 e+ K$ U
: q2 ?$ f4 ~- }, p: N5 Q8 V
- u, e4 K- W" v2 X. j, v
7 K+ N% X7 p7 I: r* v |
|