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

在 CentOS 7 下构建 Android 编译环境

[复制链接]

985

主题

92

回帖

5万

积分

管理员

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

9 h( g2 Z# ^$ S4 d. k; u
在 Android Studio 之外,还可以通过 Gradle Script 来编译 Android 项目并构建和测试应用。
) A, P1 e2 I# S3 l$ M; ~本文是一个备忘录,以记录我在 x86_64 GNU/Linux 系统 CentOS Linux release 7.8.2003 下折腾 Android 编译环境的一个过程。
2 m  s: _3 }8 q8 G) e& y8 f$ A1 g
本文将会安装以下组件:) Q" t' f- N! g, B# l: o& E8 l
  1. Git' O3 m. [9 ?3 {2 b6 }3 N5 m+ h: M
  2. JDK 1.8; }6 v: ~; p! u7 }3 Q: A
  3. Go 1.14.7% b1 v0 ]2 [4 S. S3 n8 P) f
  4. Android SDK
    & c1 e/ L# L* U* v
  5.   Android NDK) i' {; N' O4 }* @  O( `
  6. Rust 1.45.0
    / f* D0 o# m* t4 e: c
  7.   Android Targets:6 g" Y; P6 t) N. X+ J. B' x$ b
  8.     armv7-linux-androideabi5 ^' `" K# Z; j8 j. M4 R
  9.     aarch64-linux-android
    ! t2 G( X2 K5 M
  10.     i686-linux-android6 t3 @! ?! Z" O& O
  11.     x86_64-linux-android
复制代码
$ r3 [, J9 \! k$ P* `
以下的所有过程均是在 root 用户下操作。7 a  s) g( M5 U- i3 f; H
1. 安装 Git 和 JDK 1.8这两个组件发行版自带,通过以下命令即可安装。与此同时,再安装一些其他必要的组件 wget 和 unzip。
: V: v2 x& `0 Y# }8 Z5 @
  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"' v0 k3 ~) l2 m: o9 k& c
  2. OpenJDK Runtime Environment (build 1.8.0_252-b09)" }- X! e8 N% o7 K. ^. M/ x) W
  3. OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
复制代码
  1. $ javac -version
复制代码
返回
  1. javac 1.8.0_252
复制代码
/ p% C8 J* s; X, t1 f7 w
2. 安装 Go目前 Go 的最新版是 1.14.7。安装过程如下。
4 \0 |: N+ k/ q
  1. $ GO_VERSION=1.14.7( L. S+ r4 t2 j# a- _
  2. $ wget -O /tmp/go${GO_VERSION}.tar.gz https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz& Y. }. X/ ~9 _2 T
  3. $ tar -C /usr/local -xzf /tmp/go${GO_VERSION}.tar.gz( J; _5 A  I, a( L: W# K
  4. $ rm -fv /tmp/go${GO_VERSION}.tar.gz
    8 e$ ]2 q$ S& j4 G# L
  5. $ export PATH=/usr/local/go/bin:$PATH
复制代码
完成后通过以下命令验证 Go 版本号。
  1. $ go version
复制代码
返回
  1. go version go1.14.7 linux/amd64
复制代码
( H2 J" L+ C! L* `, K
3. 安装 Android SDK 及 Android NDK假设 ANDROID_HOME 路径是 /opt/sdk。安装过程如下。5 M) D! {# c: _8 H
  1. $ mkdir -p /opt/sdk && cd /opt/sdk
    2 n% z5 A) N3 K. c( n, y" c
  2. $ wget https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip
    . \% K2 o2 e% b# V6 ?8 R& p
  3. $ unzip -q commandlinetools-linux-6609375_latest.zip
    3 @! K) e6 Y) E, u
  4. $ rm -fv commandlinetools-linux-6609375_latest.zip9 F! f6 |0 H5 b# Y7 n3 m  E. }
  5. $ export PATH=/opt/sdk/tools/bin:$PATH6 z9 ]* k7 }2 P) W  f. T" J' w5 j. u
  6. $ [ -z "${ANDROID_HOME}" ] && export ANDROID_HOME=/opt/sdk
    3 }4 f4 A9 E9 U5 z% K0 N
  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:% D4 D$ Q( V1 M  g
  2.   Path                 | Version      | Description                     | Location             & I* d5 Z, r3 [: k6 q
  3.   -------              | -------      | -------                         | -------              0 v& k8 `) \' E9 x4 k2 \0 Z+ {
  4.   build-tools;29.0.2   | 29.0.2       | Android SDK Build-Tools 29.0.2  | build-tools/29.0.2/  2 ^7 v1 \5 |' k7 R+ s. |
  5.   ndk-bundle           | 21.3.6528147 | NDK                             | ndk-bundle/         
    4 F# W& F! b+ Q  y4 ?1 e
  6.   ndk;21.0.6113669     | 21.0.6113669 | NDK (Side by side) 21.0.6113669 | ndk/21.0.6113669/    " K( j; y, q/ c! }& o
  7.   patcher;v4           | 1            | SDK Patch Applier v4            | patcher/v4/         
    2 S/ V0 [% j1 R% V# \+ n9 \' q5 O
  8.   platform-tools       | 30.0.3       | Android SDK Platform-Tools      | platform-tools/      / b+ J1 v* j( U! j
  9.   platforms;android-29 | 4            | Android SDK Platform 29         | platforms/android-29/
    ; @8 s) V* C0 F4 B- E* q
  10.   platforms;android-30 | 1            | Android SDK Platform 30         | platforms/android-30/
    ' M( R. a: G9 |" q& X1 P
  11.   tools                | 2.1.0        | Android SDK Tools 2.1           | tools/               6 l# G0 f7 A5 \4 ]
  12. Available Packages:
    ) H7 U/ |1 R9 A$ ]4 T; X6 J
  13.   以下省略
复制代码

  _% a1 n' S9 F, [4. 安装 Rust 及其它目前 Rust 的最新版是 1.45.0。安装过程如下。
* w( S/ Z9 s2 R) R( O0 ^! q" R' }
  1. $ export RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo" `$ ~2 x/ |6 B+ Z% J
  2. $ RUST_VERSION=1.45.0
    " A+ z" w% ?# h7 H+ _) ?
  3. $ RUSTARCH='x86_64-unknown-linux-gnu', G" {3 h3 m+ A1 d- @
  4. $ wget -O /tmp/rustup-init "https://static.rust-lang.org/rustup/archive/1.21.1/${RUSTARCH}/rustup-init", i# R. I/ J: S' h* ?
  5. $ chmod 755 /tmp/rustup-init  ~$ V" q- n. F0 x
  6. $ /tmp/rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION
    5 y2 J7 u* S& G6 y  X
  7. $ rm -fv /tmp/rustup-init$ ~' f& X1 Y& a/ d" Z7 J- D+ N
  8. $ chmod -R a+w ${RUSTUP_HOME} ${CARGO_HOME}
    ( q) S# W) z; P* M" Y7 B; y
  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-androideabi& A. T3 @! q  d
  2. aarch64-linux-android9 _* L* c8 Z- M2 @" G
  3. i686-linux-android
    5 p, c4 w/ i, p- J
  4. x86_64-linux-android
复制代码
安装过程如下。
  1. $ rustup install stable
    0 @) E5 K! t; S# a$ Y
  2. $ rustup default stable: G" ^, j7 u, K7 r! z$ i1 [: Q* y
  3. $ rustup target add armv7-linux-androideabi9 `* k+ s9 h+ `8 q
  4. $ rustup target add i686-linux-android4 a; b2 j$ \; l) e
  5. $ rustup target add aarch64-linux-android8 v5 o1 k! V* B4 a% t" z
  6. $ rustup target add x86_64-linux-android
复制代码

- U' g# d6 k  x5. 持久化环境变量上面的安装步骤是通过 export 来定义系统 PATH 的,在退出当前登录后就会丢失设置。
7 s% C, z& t# ]: p  a1 ], p因此需要持久化一些环境变量。' \. a, l) ~: i# q: J( J
编辑 ~/.bash_profile 文件。添加 ANDROID_HOME,RUSTUP_HOME,CARGO_HOME 的定义以及增加 PATH 定义。
: e& f# Q3 O% k7 S" V+ S! I最后呈现内容如下。' Y! _# [% F" p4 ^/ [+ Q
  1. # .bash_profile. j) m3 n- ~, d# V

  2. ( ^: h% t% H8 q6 M; r
  3. # Get the aliases and functions
    / k8 ^) r) {' f" N! K- F( x
  4. if [ -f ~/.bashrc ]; then
    ! b. v; m; Y" D( Y
  5. . ~/.bashrc
    5 @5 m) Y( B2 O* \5 `% h# y0 _
  6. fi& u+ n, ^1 \7 n6 D/ {% g6 S/ W
  7. " N/ P! w/ \0 n7 x* H
  8. # User specific environment and startup programs
    6 Q7 M+ ^+ E0 z
  9. 7 {. t! k; t7 y! u) h0 O% L1 h
  10. export ANDROID_HOME=/opt/sdk RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo8 w$ d# c  v! m6 a1 K" [, z

  11. 0 x% c: r( e4 o( X+ H% y' O3 ^
  12. PATH=$PATH:$HOME/bin:$ANDROID_HOME/tools/bin:/usr/local/go/bin:/usr/local/cargo/bin" q; q+ f/ u5 B# m3 o& C; ]. V

  13. 6 d- h. j0 Q3 d* y- V7 T6 M+ f$ t* c$ R& L
  14. export PATH
复制代码

. p+ h  `. @8 c; ~  a+ J6 e  Y  o5 B6. 编译 Android 项目这里选一个比较简单的项目来练手:v2ray-plugin-android
4 ^( N/ V, d: c# X# H- u编译过程如下。
3 W+ z( x) f( P" \9 s( e: {' [; T
  1. $ git clone https://github.com/shadowsocks/v2ray-plugin-android.git
    9 ~" @5 Y4 n5 P& H% y# f3 g1 h
  2. $ cd v2ray-plugin-android4 B) R/ @4 G" L. I* W
  3. $ git submodule update --init --recursive
    7 _3 v- u* `" I0 X/ P; I; i9 u1 T7 S
  4. $ ./gradlew assembleRelease
复制代码

! {9 b; P8 X4 d' S0 w完成后,编译好的 apk 文件位于 app/build/outputs/apk/release 路径下。
  w7 y. X. n+ H0 gAndroid 系统要求所有 apk 必须先使用证书进行数字签名,然后才能安装到设备上或进行更新。  m' I( C3 ^4 l
因此这些 apk 文件还不能被直接拿来安装。
0 d4 A4 _! g5 `; l3 P至于如何签名,请参考以下链接,过程省略。6 ~- T, P4 ]( M: ]
https://developer.android.com/studio/publish/app-signing: e4 C3 F. F! ?5 f4 W
7. 总结当你习惯于用命令行做事的时候,你会发现效率往往会有很大的提升。编译代码亦是如此。0 S2 l3 K8 ]3 V! q3 u6 U
0 F% n1 |7 |6 M
0 Z  e# i: a1 }  ]
% t+ R5 A& P) x. n& ?! V6 C) Q
6 |( P2 W" R  s2 y! r$ ?" P

% t3 n( X+ V3 @0 W  ^5 a, ^- h* g3 t3 E- `4 |0 ^
2 M. W" m2 h6 K2 l2 ]9 W

6 K( B, {8 |$ |5 z
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2025-11-5 05:59 AM , Processed in 0.081751 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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