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

在 CentOS 7 下构建 Android 编译环境

[复制链接]

989

主题

92

回帖

5万

积分

管理员

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

' 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' `
  1. Git& X/ D- n$ \  X# x8 B
  2. JDK 1.8& u) T. i  M" y* P
  3. Go 1.14.7% c9 w9 \3 Q/ k  K
  4. Android SDK
    3 R0 ?* @- w, I6 Z$ i  |4 x
  5.   Android NDK( m+ r8 W( ?9 x7 b0 ?4 r2 f
  6. Rust 1.45.04 y& Q4 `* H$ T  v
  7.   Android Targets:
    + X3 ^$ d: l: M4 T( G
  8.     armv7-linux-androideabi
    " ?1 Q3 Z! D& r$ W: L
  9.     aarch64-linux-android1 p# F$ Q9 w1 e. N# G' r/ ~) S2 W1 O
  10.     i686-linux-android
    2 r/ _) o! `5 q
  11.     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- [
  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"4 F5 T2 m) p8 V2 v
  2. OpenJDK Runtime Environment (build 1.8.0_252-b09)
    ) P6 Q' U" L  y, ?+ ?, Z
  3. OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
复制代码
  1. $ javac -version
复制代码
返回
  1. javac 1.8.0_252
复制代码
  u- x' l8 Y1 F7 _1 N
2. 安装 Go目前 Go 的最新版是 1.14.7。安装过程如下。
  |  I/ A. \' C& _$ T/ t/ g
  1. $ GO_VERSION=1.14.76 T, E" |, ~. ^6 h
  2. $ 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
  3. $ tar -C /usr/local -xzf /tmp/go${GO_VERSION}.tar.gz( v8 m4 |4 [  [6 @* H% O( }* N
  4. $ rm -fv /tmp/go${GO_VERSION}.tar.gz
    ' g5 ~" m0 ]+ J6 _
  5. $ export PATH=/usr/local/go/bin:$PATH
复制代码
完成后通过以下命令验证 Go 版本号。
  1. $ go version
复制代码
返回
  1. 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 ?
  1. $ mkdir -p /opt/sdk && cd /opt/sdk% c* F' T8 g( e2 [& B- T& z
  2. $ wget https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip$ D/ `# h/ R" W$ b" F6 G
  3. $ unzip -q commandlinetools-linux-6609375_latest.zip2 q) t# j  k4 c5 S0 k4 C
  4. $ rm -fv commandlinetools-linux-6609375_latest.zip7 n' z- \# U# A8 M3 F$ [6 I
  5. $ export PATH=/opt/sdk/tools/bin:$PATH$ f: [4 Y" {4 m6 x- P# u( V
  6. $ [ -z "${ANDROID_HOME}" ] && export ANDROID_HOME=/opt/sdk
    3 U* i1 v. ]1 w. C' ~* E2 \# I
  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:
    % @$ T* c0 z7 A3 W$ }. J# W
  2.   Path                 | Version      | Description                     | Location             2 g' u4 A$ E3 y/ |' _
  3.   -------              | -------      | -------                         | -------              
    : R. R, |  l: Q+ ]3 p- v* N
  4.   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
  5.   ndk-bundle           | 21.3.6528147 | NDK                             | ndk-bundle/          0 p9 h' l3 N) V, s& P0 ^+ T* H
  6.   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
  7.   patcher;v4           | 1            | SDK Patch Applier v4            | patcher/v4/          ( V$ q/ C+ X" I
  8.   platform-tools       | 30.0.3       | Android SDK Platform-Tools      | platform-tools/      
    ) B4 j& \$ z1 {) t; _" x, ]
  9.   platforms;android-29 | 4            | Android SDK Platform 29         | platforms/android-29/
    3 R$ O4 `8 y! w3 m4 E
  10.   platforms;android-30 | 1            | Android SDK Platform 30         | platforms/android-30/
    ) d5 P$ @* V( s! Y2 K
  11.   tools                | 2.1.0        | Android SDK Tools 2.1           | tools/               
    " W0 X- X! X* u. x5 O
  12. Available Packages:4 l' e/ l! a8 j+ i
  13.   以下省略
复制代码
0 k  b$ ]" r2 Q7 E* a% ?5 J
4. 安装 Rust 及其它目前 Rust 的最新版是 1.45.0。安装过程如下。' V9 ~# M( c+ I! {& y
  1. $ export RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo
    # l! W& d8 n: t% U- Z
  2. $ RUST_VERSION=1.45.0$ A' e3 J+ E$ M9 w7 R6 f/ K
  3. $ RUSTARCH='x86_64-unknown-linux-gnu'$ q" U" P6 M( a/ c9 |* |7 [
  4. $ 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
  5. $ chmod 755 /tmp/rustup-init
    8 Z3 @! k; O1 o5 v  x- l/ j
  6. $ /tmp/rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION) G# i6 L! g8 M6 G
  7. $ rm -fv /tmp/rustup-init
    - U. I* L+ w4 U0 t9 ?
  8. $ chmod -R a+w ${RUSTUP_HOME} ${CARGO_HOME}" [# s) c* Z1 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+ ~: h1 e) U6 X8 Q) j: h
  2. aarch64-linux-android
    4 w& I- @, V9 r
  3. i686-linux-android2 @5 W  y, y  Y: P0 _& O4 V
  4. x86_64-linux-android
复制代码
安装过程如下。
  1. $ rustup install stable
    ( L# \+ p2 H5 `8 I
  2. $ rustup default stable
    0 M. Z9 H" S' }# B: e( {- k! {  E; M
  3. $ rustup target add armv7-linux-androideabi
    4 g* c; s* T. y( {
  4. $ rustup target add i686-linux-android
    9 n% c6 e& R, F7 t. }1 U
  5. $ rustup target add aarch64-linux-android' x  I6 v7 `0 _+ W& Q; `
  6. $ 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
  1. # .bash_profile$ `( z1 D8 _- }6 ~8 ?/ q8 f- ^

  2. 4 e% H$ k  J# Z3 o
  3. # Get the aliases and functions7 Y. Z/ [; Z) C7 E8 p! C7 P  a
  4. if [ -f ~/.bashrc ]; then* E) M$ v2 f- S
  5. . ~/.bashrc
    * h; k) I* i- }0 }! k0 c
  6. fi
    ) s- k2 h, L4 ?- x

  7. / r' ?9 |4 T5 L& b7 c
  8. # User specific environment and startup programs8 B. q' S9 k) c8 l8 d! f3 }! N
  9. 9 Y2 w" q$ |4 F7 i' i0 x
  10. export ANDROID_HOME=/opt/sdk RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo: J) [9 t+ u3 ^  s! o4 [% g
  11. 2 }% R% _7 g3 H8 d) E
  12. PATH=$PATH:$HOME/bin:$ANDROID_HOME/tools/bin:/usr/local/go/bin:/usr/local/cargo/bin/ N: V. m  L' o# D# e
  13. ! M; q$ y; B4 a8 ^* \/ v
  14. 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
  1. $ git clone https://github.com/shadowsocks/v2ray-plugin-android.git
    4 F# Y2 H+ K9 L0 p. n
  2. $ cd v2ray-plugin-android
    2 f, V0 D2 H0 X2 v+ m, P7 |' _3 L; \
  3. $ git submodule update --init --recursive4 ]1 V+ q% Q- N- b; B: k
  4. $ ./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
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-5-6 01:15 PM , Processed in 0.157456 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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