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

在 CentOS 7 下构建 Android 编译环境

[复制链接]

989

主题

92

回帖

5万

积分

管理员

积分
55362
发表于 2022-7-4 16:37:02 | 显示全部楼层 |阅读模式
- x, H+ @7 s% f6 p& P& R( B
在 Android Studio 之外,还可以通过 Gradle Script 来编译 Android 项目并构建和测试应用。
. b+ ?; H7 c3 m( W8 ?本文是一个备忘录,以记录我在 x86_64 GNU/Linux 系统 CentOS Linux release 7.8.2003 下折腾 Android 编译环境的一个过程。
* o: R4 n2 j* ?: Q1 @
4 P; W! u8 _. `本文将会安装以下组件:" e6 ^% A& j2 y5 T  ~
  1. Git/ }* ]: F5 ~& |1 l+ Q( n: R
  2. JDK 1.84 E- f; P3 c" V$ V- R: H
  3. Go 1.14.7% V8 |1 u/ E2 Y1 ?( j$ X
  4. Android SDK; `8 p, |1 C" X2 v2 R6 E& {
  5.   Android NDK* z9 P+ l% Z2 U2 v' h) L1 o
  6. Rust 1.45.0
    5 b: p# ^/ R" I) q& v! e0 D6 K
  7.   Android Targets:8 J4 R4 [, q/ {' {3 A
  8.     armv7-linux-androideabi6 a: m' `9 ^1 a. l9 w" v2 G3 z
  9.     aarch64-linux-android
    # Q3 ?2 x8 h$ V8 @
  10.     i686-linux-android' t8 h1 ]. o4 t* |7 b: }4 L
  11.     x86_64-linux-android
复制代码

6 U6 V; i3 l% }# I8 ]9 }以下的所有过程均是在 root 用户下操作。
3 X- n/ |/ `% a' A: _1. 安装 Git 和 JDK 1.8这两个组件发行版自带,通过以下命令即可安装。与此同时,再安装一些其他必要的组件 wget 和 unzip。" E4 t! M- }  M* A/ h
  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": {# S4 @; G8 r! Z0 d
  2. OpenJDK Runtime Environment (build 1.8.0_252-b09)
    ( K! c' M/ w# e! D7 r6 o; y# e
  3. OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
复制代码
  1. $ javac -version
复制代码
返回
  1. javac 1.8.0_252
复制代码
5 M6 U- V% R( Y2 L# J
2. 安装 Go目前 Go 的最新版是 1.14.7。安装过程如下。
4 Y4 H8 n. }2 C
  1. $ GO_VERSION=1.14.7
    % E! ?: O2 q9 J7 K
  2. $ wget -O /tmp/go${GO_VERSION}.tar.gz https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz
    / Q  ^# _% \! j% N; q
  3. $ tar -C /usr/local -xzf /tmp/go${GO_VERSION}.tar.gz1 a4 x% M; e2 e& [
  4. $ rm -fv /tmp/go${GO_VERSION}.tar.gz7 ^* L9 s3 r7 l* q
  5. $ export PATH=/usr/local/go/bin:$PATH
复制代码
完成后通过以下命令验证 Go 版本号。
  1. $ go version
复制代码
返回
  1. go version go1.14.7 linux/amd64
复制代码
  L* [2 x8 W# [, h
3. 安装 Android SDK 及 Android NDK假设 ANDROID_HOME 路径是 /opt/sdk。安装过程如下。
+ ^& W% k9 g4 Q6 y
  1. $ mkdir -p /opt/sdk && cd /opt/sdk0 D, G2 n; x5 C! S: e. H1 S* o
  2. $ wget https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip, B  m* ]9 Y3 k% _/ M- k, f
  3. $ unzip -q commandlinetools-linux-6609375_latest.zip
    5 m1 g0 j. D0 B
  4. $ rm -fv commandlinetools-linux-6609375_latest.zip: I# |9 {5 C2 k" a2 J8 ?
  5. $ export PATH=/opt/sdk/tools/bin:$PATH5 \6 X7 L6 T& {  s
  6. $ [ -z "${ANDROID_HOME}" ] && export ANDROID_HOME=/opt/sdk) Q5 _" n0 G# G! u7 [
  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:% Z% z7 m* f: z% b5 L0 n( e1 X
  2.   Path                 | Version      | Description                     | Location             2 V! B4 q: D! Y; Z- m
  3.   -------              | -------      | -------                         | -------              
    1 m/ Q; A% c5 H- b
  4.   build-tools;29.0.2   | 29.0.2       | Android SDK Build-Tools 29.0.2  | build-tools/29.0.2/  / l+ m& N2 H* m6 I- `; L4 D
  5.   ndk-bundle           | 21.3.6528147 | NDK                             | ndk-bundle/          % k, v$ p2 v. e4 ^/ S- C
  6.   ndk;21.0.6113669     | 21.0.6113669 | NDK (Side by side) 21.0.6113669 | ndk/21.0.6113669/    * n* L# s& a0 c; v9 z
  7.   patcher;v4           | 1            | SDK Patch Applier v4            | patcher/v4/          ! x" X: b$ @0 z3 R  ^& b" y' \( u
  8.   platform-tools       | 30.0.3       | Android SDK Platform-Tools      | platform-tools/        ^8 k% e  D( ^; d  ^% Z
  9.   platforms;android-29 | 4            | Android SDK Platform 29         | platforms/android-29/3 F2 T- E" s3 s0 [! e) X
  10.   platforms;android-30 | 1            | Android SDK Platform 30         | platforms/android-30/3 G9 O1 n, p/ @7 v4 r) x6 n
  11.   tools                | 2.1.0        | Android SDK Tools 2.1           | tools/               2 g4 [! k2 y$ [# `$ r: G+ C) `
  12. Available Packages:% C2 |" c5 Z; D1 V; `& z5 }  R
  13.   以下省略
复制代码

& S, @) n+ i$ n# L4. 安装 Rust 及其它目前 Rust 的最新版是 1.45.0。安装过程如下。4 a$ o) H% `  Z- E
  1. $ export RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo: ]3 z- l2 E  p! U
  2. $ RUST_VERSION=1.45.0
    + P" L# x6 z: V  h4 i
  3. $ RUSTARCH='x86_64-unknown-linux-gnu'5 E/ o& D4 y" t" t$ Y
  4. $ wget -O /tmp/rustup-init "https://static.rust-lang.org/rustup/archive/1.21.1/${RUSTARCH}/rustup-init"
    , \) K1 C2 i  H* }  ^
  5. $ chmod 755 /tmp/rustup-init; \' ^# G% z$ k) _
  6. $ /tmp/rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION
    % _* |& l! m1 k# J2 Y/ b, u
  7. $ rm -fv /tmp/rustup-init& b  F$ c3 d% n3 ^* p$ c1 t" t
  8. $ chmod -R a+w ${RUSTUP_HOME} ${CARGO_HOME}2 G7 r1 Y; A2 S0 y. O3 v! j2 T
  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- H( _  _, O" G- Y: H8 k
  2. aarch64-linux-android6 X8 \. j! R  h) Q
  3. i686-linux-android
    3 p! r* [2 v: r* ^: T
  4. x86_64-linux-android
复制代码
安装过程如下。
  1. $ rustup install stable
    7 C! L: J; l, [4 S7 ~; a# j, M
  2. $ rustup default stable) X, `+ r& o9 w2 X
  3. $ rustup target add armv7-linux-androideabi
    ' B  L8 q/ u( Y- o! ?
  4. $ rustup target add i686-linux-android& K- s" i, g+ H9 i) {, L
  5. $ rustup target add aarch64-linux-android
    " S6 _- r3 d# U* _7 U# O; l$ A7 Z
  6. $ rustup target add x86_64-linux-android
复制代码
7 c* b& C" \1 l& U: |+ `
5. 持久化环境变量上面的安装步骤是通过 export 来定义系统 PATH 的,在退出当前登录后就会丢失设置。/ b. K4 U0 y% ^. [' f* T: j* L
因此需要持久化一些环境变量。
. e$ Q' X" I/ {4 H' F0 g编辑 ~/.bash_profile 文件。添加 ANDROID_HOME,RUSTUP_HOME,CARGO_HOME 的定义以及增加 PATH 定义。9 C" C- E4 W$ P$ r' `* j% U6 u3 u
最后呈现内容如下。/ l/ _) `1 i7 f% Y" p9 K- D
  1. # .bash_profile8 M2 m9 ~; I* t; s! N) b% ?* j
  2. ! A' u  t/ p. V; h( f+ [/ K; k& C6 F8 N
  3. # Get the aliases and functions- q3 y' {/ f$ J) z9 G7 q( f' J
  4. if [ -f ~/.bashrc ]; then2 y% O, r, _; w3 y3 O
  5. . ~/.bashrc4 w7 b9 t  ]( `' _# ^
  6. fi
    ' |  W# c6 r( `# H4 ^. w. L. g* G
  7. # r" d% \' k+ Q  Z( d! F+ W, m
  8. # User specific environment and startup programs0 D$ v0 i2 S; X. [; ^
  9. / b: F- T. u/ A+ O2 T' z( I
  10. export ANDROID_HOME=/opt/sdk RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo9 ^2 b& l' C9 e  F( h- {

  11. : T/ g; d0 `5 ~/ V; O$ i, O# H( V
  12. PATH=$PATH:$HOME/bin:$ANDROID_HOME/tools/bin:/usr/local/go/bin:/usr/local/cargo/bin* [+ e2 n. U$ }/ n

  13. 9 L9 ?) z  S& r" G2 ~$ P
  14. export PATH
复制代码
8 `+ H. I% Q8 F- v
6. 编译 Android 项目这里选一个比较简单的项目来练手:v2ray-plugin-android
8 p9 G* P8 B% G' f9 ]1 n编译过程如下。
; v$ p& h5 C- \6 k3 a, G8 L
  1. $ git clone https://github.com/shadowsocks/v2ray-plugin-android.git
    " w9 H0 n& l2 ?$ g
  2. $ cd v2ray-plugin-android8 D! m% i' m5 B5 y& H
  3. $ git submodule update --init --recursive# D. C1 x  k5 [8 c! o( i* {
  4. $ ./gradlew assembleRelease
复制代码

) \$ M: m3 s4 e! a2 P完成后,编译好的 apk 文件位于 app/build/outputs/apk/release 路径下。; b% r. F2 S4 I  R6 r! d% o
Android 系统要求所有 apk 必须先使用证书进行数字签名,然后才能安装到设备上或进行更新。
$ @. R! N' N, ?) c+ {; ^因此这些 apk 文件还不能被直接拿来安装。& v0 R: c" C9 h6 F5 z& l/ J
至于如何签名,请参考以下链接,过程省略。4 v* O7 ]$ F4 Z2 {6 i) J
https://developer.android.com/studio/publish/app-signing% ~. }$ R! V1 g) X8 \% p0 E  Q
7. 总结当你习惯于用命令行做事的时候,你会发现效率往往会有很大的提升。编译代码亦是如此。
( g( F$ O7 v5 e! B6 b% u
: T. e9 J9 _0 R" H7 O. e- \8 D
! U, B& ]& u& G: a% n6 w* G6 Q4 w; u5 \
* G& _! [* C6 P" Z. e$ T

; A' |" C2 R, d/ s
* u# e  z5 X% G$ {# C/ o; ]8 [' n3 k  l5 H

! ^7 S; `. T' g' s
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-5-6 08:39 AM , Processed in 0.095605 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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