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

在 CentOS 7 下构建 Android 编译环境

[复制链接]

979

主题

90

回帖

5万

积分

管理员

积分
53052
发表于 2022-7-4 16:37:02 | 显示全部楼层 |阅读模式
, G) K( v. I6 o# e' W
在 Android Studio 之外,还可以通过 Gradle Script 来编译 Android 项目并构建和测试应用。
/ K# I4 ^5 g9 N! o- X本文是一个备忘录,以记录我在 x86_64 GNU/Linux 系统 CentOS Linux release 7.8.2003 下折腾 Android 编译环境的一个过程。- J9 }4 U1 e( d* ]' o& g5 Y( Y
3 Z. B- N* O/ l' Q/ v8 h
本文将会安装以下组件:
; h7 q) Z" _- F+ v. E6 D
  1. Git
    $ M. y& }/ w+ w: f4 b
  2. JDK 1.8& [% n5 |9 }/ l' d1 ]( E. X
  3. Go 1.14.7
    8 E6 Z/ ?1 F5 V6 v% U, k
  4. Android SDK
    ( G7 t/ v" d- n, l, V, L
  5.   Android NDK
    7 _  I( B( I1 n% \
  6. Rust 1.45.07 C" Q* B8 }5 y% I* S# V
  7.   Android Targets:
    ( Z, K2 M: U9 w4 H
  8.     armv7-linux-androideabi8 a. M. C/ u1 ^7 g5 Y7 I
  9.     aarch64-linux-android
    : J  U, Z* b0 z/ l( Q5 e
  10.     i686-linux-android4 s% v# K0 {2 b, f* t  G- o1 x
  11.     x86_64-linux-android
复制代码

) t0 ]6 u- W3 b* K  j以下的所有过程均是在 root 用户下操作。. p( n1 S( \  z
1. 安装 Git 和 JDK 1.8这两个组件发行版自带,通过以下命令即可安装。与此同时,再安装一些其他必要的组件 wget 和 unzip。% J- j. [# G/ U5 }/ Z( `' d9 J
  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"$ S( D$ }4 a% @& Z) q; R
  2. OpenJDK Runtime Environment (build 1.8.0_252-b09)0 D0 t- y( E! Y$ z5 B+ E+ K
  3. OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
复制代码
  1. $ javac -version
复制代码
返回
  1. javac 1.8.0_252
复制代码
8 {% l: e$ ~3 E1 U, d
2. 安装 Go目前 Go 的最新版是 1.14.7。安装过程如下。
5 f- ?, D/ L( v3 \. [
  1. $ GO_VERSION=1.14.70 w4 ^% i# g* g5 U: N
  2. $ wget -O /tmp/go${GO_VERSION}.tar.gz https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz. B- n' A2 K: F1 |. a$ U
  3. $ tar -C /usr/local -xzf /tmp/go${GO_VERSION}.tar.gz% L" u* t, E2 l8 q
  4. $ rm -fv /tmp/go${GO_VERSION}.tar.gz
    6 E9 e: R+ F( b- T2 w7 x
  5. $ export PATH=/usr/local/go/bin:$PATH
复制代码
完成后通过以下命令验证 Go 版本号。
  1. $ go version
复制代码
返回
  1. go version go1.14.7 linux/amd64
复制代码
' A" Q1 O, F9 L
3. 安装 Android SDK 及 Android NDK假设 ANDROID_HOME 路径是 /opt/sdk。安装过程如下。! x! F( Q/ T% f( x2 C
  1. $ mkdir -p /opt/sdk && cd /opt/sdk
    7 E0 o8 ~: _& z/ h6 M
  2. $ wget https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip% ]' A: A! i/ e" c& _* E# |& g
  3. $ unzip -q commandlinetools-linux-6609375_latest.zip
    6 r. A0 T, @% F: q# T3 K# v, B) S
  4. $ rm -fv commandlinetools-linux-6609375_latest.zip4 v1 @" H, l& t* k  X3 e0 Y
  5. $ export PATH=/opt/sdk/tools/bin:$PATH4 N* F; X1 p0 i1 B
  6. $ [ -z "${ANDROID_HOME}" ] && export ANDROID_HOME=/opt/sdk; {1 u/ ?: f3 Q8 S
  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:0 y$ p* i" _2 {1 U. Y& B' Z0 h
  2.   Path                 | Version      | Description                     | Location             ! @1 |# S# S0 N, j4 n" M
  3.   -------              | -------      | -------                         | -------              
    ; U5 R  H) z& \, G6 U: b
  4.   build-tools;29.0.2   | 29.0.2       | Android SDK Build-Tools 29.0.2  | build-tools/29.0.2/  / H' D& p2 _, S. T# k# V4 x5 u1 `. i
  5.   ndk-bundle           | 21.3.6528147 | NDK                             | ndk-bundle/         
    & V0 O/ L" w* L; J' Q+ [" {
  6.   ndk;21.0.6113669     | 21.0.6113669 | NDK (Side by side) 21.0.6113669 | ndk/21.0.6113669/    : R% s2 h# B. M' L
  7.   patcher;v4           | 1            | SDK Patch Applier v4            | patcher/v4/          2 r4 S4 j3 g" R+ z- ]
  8.   platform-tools       | 30.0.3       | Android SDK Platform-Tools      | platform-tools/      
    ; D& R2 B) M# Y9 D5 c/ r6 n  T
  9.   platforms;android-29 | 4            | Android SDK Platform 29         | platforms/android-29/  w. f7 f2 g& e4 s" \3 F
  10.   platforms;android-30 | 1            | Android SDK Platform 30         | platforms/android-30/4 O! _+ ]0 ?( k% f* r
  11.   tools                | 2.1.0        | Android SDK Tools 2.1           | tools/               
    ; B7 y  B6 u" `' M* J" a1 N- M8 I7 t4 r
  12. Available Packages:
    . v9 @! N! Z. t# e8 \
  13.   以下省略
复制代码
* o# f2 _! N6 l
4. 安装 Rust 及其它目前 Rust 的最新版是 1.45.0。安装过程如下。  b. I3 r5 n# C: {8 L& J# z
  1. $ export RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo
    0 ?- e2 h* d. |; B/ p5 y9 L
  2. $ RUST_VERSION=1.45.0, N: `  l3 E3 c$ U
  3. $ RUSTARCH='x86_64-unknown-linux-gnu'6 q& u, M  S7 F. _
  4. $ wget -O /tmp/rustup-init "https://static.rust-lang.org/rustup/archive/1.21.1/${RUSTARCH}/rustup-init"
    ' k: ~5 `$ r& @
  5. $ chmod 755 /tmp/rustup-init
    ( e) V2 {# X$ V# L1 h7 J
  6. $ /tmp/rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION8 i0 D# o/ k; u1 ~  c
  7. $ rm -fv /tmp/rustup-init
    ! e; U2 b7 Q8 ^  ]
  8. $ chmod -R a+w ${RUSTUP_HOME} ${CARGO_HOME}
    7 m& _5 P- r$ I5 R: @' X
  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-androideabi7 t; W, q/ g) Q, Q- e& D
  2. aarch64-linux-android& B2 O, K4 z5 p5 z* ]0 }
  3. i686-linux-android
    ! G. L5 k' X1 A
  4. x86_64-linux-android
复制代码
安装过程如下。
  1. $ rustup install stable! M  `  Y/ _( B1 M
  2. $ rustup default stable7 X9 `% V( l' c* Q3 Y- w/ |+ W1 u. M
  3. $ rustup target add armv7-linux-androideabi+ e* {& m% m/ j1 ]$ Z7 i- c" p
  4. $ rustup target add i686-linux-android6 Y$ ?& P+ [% T
  5. $ rustup target add aarch64-linux-android
    # H) ]% u0 ~6 l7 O
  6. $ rustup target add x86_64-linux-android
复制代码
4 z% }( V8 i9 g
5. 持久化环境变量上面的安装步骤是通过 export 来定义系统 PATH 的,在退出当前登录后就会丢失设置。7 k0 w6 D& a4 U0 e/ q% B& ~; \
因此需要持久化一些环境变量。5 u5 t3 U! a6 I1 c
编辑 ~/.bash_profile 文件。添加 ANDROID_HOME,RUSTUP_HOME,CARGO_HOME 的定义以及增加 PATH 定义。
  {9 L# n. e# z/ h最后呈现内容如下。
7 p, c" Z. e1 ?  |* z3 l
  1. # .bash_profile  c. I) y) L! C1 N3 U  E2 X0 \5 p
  2. 2 Q  U: b) ^9 J  T
  3. # Get the aliases and functions& Q4 n4 u. S8 y( I+ S( O) g7 ]
  4. if [ -f ~/.bashrc ]; then& ^+ M9 G. w3 C$ l1 J7 x) D
  5. . ~/.bashrc
    , z; N8 S% M2 z) l* g! O0 B  b1 |
  6. fi
    8 _. h/ L% B9 o0 T

  7. : ?- N# ]! x/ J8 b
  8. # User specific environment and startup programs
    6 E  S+ Y/ K% D7 b6 o3 [0 _
  9. - A" ?, c! B' B
  10. export ANDROID_HOME=/opt/sdk RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo
    , B+ W: x7 S7 X
  11. - G  o4 a" V- D) A+ d& w
  12. PATH=$PATH:$HOME/bin:$ANDROID_HOME/tools/bin:/usr/local/go/bin:/usr/local/cargo/bin
    4 I* q. f- P0 e- N; ]

  13. ) Q2 ~- h1 h! c4 J- M/ F
  14. export PATH
复制代码

& B: E2 }/ b( }" f9 `! Z6. 编译 Android 项目这里选一个比较简单的项目来练手:v2ray-plugin-android
8 T8 G' s: c5 X! @+ @编译过程如下。
( M8 ^9 E% ~8 H# ]6 p
  1. $ git clone https://github.com/shadowsocks/v2ray-plugin-android.git
    # K: ^& }1 z: b% o8 e: q+ a: V
  2. $ cd v2ray-plugin-android
    , O' Y( `( d1 X
  3. $ git submodule update --init --recursive
    " Z( N8 j8 m5 S7 y: ]  ~9 z
  4. $ ./gradlew assembleRelease
复制代码

+ U) J: N# w. q4 r9 V' i8 I完成后,编译好的 apk 文件位于 app/build/outputs/apk/release 路径下。
% k  Z% o$ l! K) [: k6 o4 v4 cAndroid 系统要求所有 apk 必须先使用证书进行数字签名,然后才能安装到设备上或进行更新。
- ?9 `: V( {4 l) n5 R4 S! m" y因此这些 apk 文件还不能被直接拿来安装。
8 Y8 \1 @. n% o至于如何签名,请参考以下链接,过程省略。
0 L6 ?4 ~! c. T' J, X! @https://developer.android.com/studio/publish/app-signing, O2 o. s* U5 b+ ?9 K4 a
7. 总结当你习惯于用命令行做事的时候,你会发现效率往往会有很大的提升。编译代码亦是如此。  w0 E$ b* S$ l
7 T6 B8 ^' F" n$ l) ]4 H

' f# K; X. {! ^- j% X' Y) N, z; s3 K- ^2 C7 ~

: ]" t/ H( y4 g  a
. m" i3 f' n. ?7 J1 j+ I) R( ], \5 Q, H4 I- ?1 c1 @

3 K3 {, z4 g. o& k- x; @

$ ]2 V: p6 P) G: J5 s: I9 M
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2025-2-25 07:58 , Processed in 0.116752 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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