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

在 CentOS 7 下构建 Android 编译环境

[复制链接]
发表于 2022-7-4 16:37:02 | 显示全部楼层 |阅读模式

$ v! O2 J0 }6 H. R
在 Android Studio 之外,还可以通过 Gradle Script 来编译 Android 项目并构建和测试应用。/ i& |* R, _% }' |, k
本文是一个备忘录,以记录我在 x86_64 GNU/Linux 系统 CentOS Linux release 7.8.2003 下折腾 Android 编译环境的一个过程。5 T6 m9 c! E; K- _$ C9 [
* U' u  J" B! e1 T6 x/ p
本文将会安装以下组件:
6 X; Y! f  N4 r$ I# h! ^2 l
  1. Git' j  E0 A' _- @- {
  2. JDK 1.8
    3 q' H# n. Q. `+ l. @% D) q
  3. Go 1.14.7" e' u$ f7 _; J$ m' Y$ ]7 j& [; |
  4. Android SDK  x; }" b' |0 j- I. d0 }' d- W
  5.   Android NDK
    ! N4 D- k( L* I
  6. Rust 1.45.0! c- p- b3 V( ?3 b; C- M5 ^
  7.   Android Targets:
    # H; N; s" j8 r+ u$ r
  8.     armv7-linux-androideabi3 U* L8 l% F8 I, F) X9 D3 \
  9.     aarch64-linux-android
    ' b& K- j" V, j! h6 Z
  10.     i686-linux-android* Z- U+ T6 S6 X" w' R. h
  11.     x86_64-linux-android
复制代码
+ N  q3 [- b# d* k6 h- l( O
以下的所有过程均是在 root 用户下操作。4 I' }9 ]5 S) U; N: `
1. 安装 Git 和 JDK 1.8这两个组件发行版自带,通过以下命令即可安装。与此同时,再安装一些其他必要的组件 wget 和 unzip。+ [! ?1 c1 o# T2 R# e. 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"& V1 W/ Q0 l7 a+ ?2 j4 D
  2. OpenJDK Runtime Environment (build 1.8.0_252-b09)8 l5 F" V* l$ V
  3. OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
复制代码
  1. $ javac -version
复制代码
返回
  1. javac 1.8.0_252
复制代码
& W' U- A# ]5 g7 H" ?! m$ X
2. 安装 Go目前 Go 的最新版是 1.14.7。安装过程如下。
8 k1 G' u2 P: x! |$ K; U( @# K
  1. $ GO_VERSION=1.14.7
    # }9 q9 k. E  P0 V3 R1 x
  2. $ wget -O /tmp/go${GO_VERSION}.tar.gz https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz8 c; `' `( e" K' c) n! @' o
  3. $ tar -C /usr/local -xzf /tmp/go${GO_VERSION}.tar.gz
    , {- m8 Y9 m2 v% W. J( p% x6 c
  4. $ rm -fv /tmp/go${GO_VERSION}.tar.gz8 b$ b$ W0 `- \( Q0 D
  5. $ export PATH=/usr/local/go/bin:$PATH
复制代码
完成后通过以下命令验证 Go 版本号。
  1. $ go version
复制代码
返回
  1. go version go1.14.7 linux/amd64
复制代码
' M, L! F  @' g. w  s
3. 安装 Android SDK 及 Android NDK假设 ANDROID_HOME 路径是 /opt/sdk。安装过程如下。' S3 d4 d0 W  c: S/ d4 Q- `
  1. $ mkdir -p /opt/sdk && cd /opt/sdk
    1 V* l  |' H( P
  2. $ wget https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip! J: @: m' _0 u" E
  3. $ unzip -q commandlinetools-linux-6609375_latest.zip
    / q/ i5 B, }# X2 i  U
  4. $ rm -fv commandlinetools-linux-6609375_latest.zip
    / Y4 U; S# M" K
  5. $ export PATH=/opt/sdk/tools/bin:$PATH
    8 Y/ f3 _: e' D9 G) j7 z+ l- S: M" N
  6. $ [ -z "${ANDROID_HOME}" ] && export ANDROID_HOME=/opt/sdk  L2 I! S6 t( W  O5 s( Q$ q# T
  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:
    1 k- G% ~/ t) c  U* D
  2.   Path                 | Version      | Description                     | Location             ( L& D6 L0 c/ f- V; ?7 v
  3.   -------              | -------      | -------                         | -------              : K) D: g* H' D$ b0 ~5 H7 W7 c) ^/ d
  4.   build-tools;29.0.2   | 29.0.2       | Android SDK Build-Tools 29.0.2  | build-tools/29.0.2/  
    6 r5 U; ]9 C" p& y
  5.   ndk-bundle           | 21.3.6528147 | NDK                             | ndk-bundle/          8 d2 D* Y+ w$ \: F- w% D
  6.   ndk;21.0.6113669     | 21.0.6113669 | NDK (Side by side) 21.0.6113669 | ndk/21.0.6113669/   
    / L1 m3 r3 Z  j' e+ Q6 T' p
  7.   patcher;v4           | 1            | SDK Patch Applier v4            | patcher/v4/          # ~0 d* U% T* Y
  8.   platform-tools       | 30.0.3       | Android SDK Platform-Tools      | platform-tools/      
    $ C7 j" y) p( o6 V8 x
  9.   platforms;android-29 | 4            | Android SDK Platform 29         | platforms/android-29/$ v  \, g1 u' r+ r7 ]
  10.   platforms;android-30 | 1            | Android SDK Platform 30         | platforms/android-30/
    " e. ~7 Y3 {) ^# ?  g
  11.   tools                | 2.1.0        | Android SDK Tools 2.1           | tools/               ! t2 R, j7 z, H, v: {
  12. Available Packages:2 S/ J$ t+ @) A# n. ?1 T
  13.   以下省略
复制代码

" t1 |6 d1 ~7 W! A) D4. 安装 Rust 及其它目前 Rust 的最新版是 1.45.0。安装过程如下。
9 z: l" q5 E2 _: Y' d3 T
  1. $ export RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo( n: a2 R4 {9 ?% x* G% j
  2. $ RUST_VERSION=1.45.0
    3 j  P" }8 M) |, Z
  3. $ RUSTARCH='x86_64-unknown-linux-gnu'( T( b% a$ D; s/ w
  4. $ wget -O /tmp/rustup-init "https://static.rust-lang.org/rustup/archive/1.21.1/${RUSTARCH}/rustup-init"
    # e0 Y3 l. c0 Y' N& |+ l" K
  5. $ chmod 755 /tmp/rustup-init1 M2 S& l! b& G" B
  6. $ /tmp/rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION
    ) |4 Q) ^3 _4 d# o( W& V
  7. $ rm -fv /tmp/rustup-init- S* c- S7 H3 l7 ]$ m. ?5 h5 [; V
  8. $ chmod -R a+w ${RUSTUP_HOME} ${CARGO_HOME}/ i* O( H6 l1 w( \
  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. B3 [& o) e0 {: C/ z
  2. aarch64-linux-android1 U, s# h) f6 |
  3. i686-linux-android
    1 o$ C& e3 j/ r* N6 u3 q
  4. x86_64-linux-android
复制代码
安装过程如下。
  1. $ rustup install stable
    % y0 Y/ T2 D# q) |4 r
  2. $ rustup default stable& O! l2 A+ ~. V. N& n
  3. $ rustup target add armv7-linux-androideabi: L6 v# |! L" B% K; y+ t: X3 J6 j
  4. $ rustup target add i686-linux-android& Z. k; \; g- P; r
  5. $ rustup target add aarch64-linux-android
    3 d5 M( W5 s# W# [. t; |
  6. $ rustup target add x86_64-linux-android
复制代码
( s* e; @2 ]( _3 B4 b) q- ]7 I
5. 持久化环境变量上面的安装步骤是通过 export 来定义系统 PATH 的,在退出当前登录后就会丢失设置。
; w4 X/ P' i, A( A因此需要持久化一些环境变量。
6 n4 r" Z. I, v) j& C- K4 c编辑 ~/.bash_profile 文件。添加 ANDROID_HOME,RUSTUP_HOME,CARGO_HOME 的定义以及增加 PATH 定义。
2 \; w  V2 X/ C* s1 n最后呈现内容如下。
8 ]8 Z# x4 b  Z* a. K( G) o) W
  1. # .bash_profile
    7 Q/ a% D% Q' F$ \1 u$ ]

  2. ; q) k# m/ x) f: P' y$ _5 Q, B
  3. # Get the aliases and functions1 E1 C  s. s9 B# l
  4. if [ -f ~/.bashrc ]; then9 r& z: a# `+ Z0 B
  5. . ~/.bashrc
    # |( M% T3 j* |0 s. p
  6. fi  c5 a' d' Z2 X

  7. 5 x8 H6 [, z2 |! A( j; D. y/ O
  8. # User specific environment and startup programs
    ' ~; G% X4 u+ X) c  T

  9. ! A) [4 l: S/ m* a- U$ w
  10. export ANDROID_HOME=/opt/sdk RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo
    ' `7 h) j+ l$ p( G# o; q7 G5 E8 ?
  11.   }1 x- j- o( J) ?# ]
  12. PATH=$PATH:$HOME/bin:$ANDROID_HOME/tools/bin:/usr/local/go/bin:/usr/local/cargo/bin  ^9 l/ d7 W. L/ t; a7 `: F' l

  13. " q0 b. g. @! ]4 a/ l
  14. export PATH
复制代码

, {! v1 g3 t7 \4 Y7 \5 P6 W6. 编译 Android 项目这里选一个比较简单的项目来练手:v2ray-plugin-android。; W9 D7 R# d+ Q
编译过程如下。  V. `, D! x; Y( m
  1. $ git clone https://github.com/shadowsocks/v2ray-plugin-android.git
    ; D3 _! E3 ]5 \, o' q% h' o7 P
  2. $ cd v2ray-plugin-android
    ! ]5 [* b' A! V
  3. $ git submodule update --init --recursive
    ! A2 u3 A! W6 L2 w% O$ F
  4. $ ./gradlew assembleRelease
复制代码
9 s9 w; Z0 i$ q
完成后,编译好的 apk 文件位于 app/build/outputs/apk/release 路径下。+ f7 }( o: V, D. R: B/ [4 R
Android 系统要求所有 apk 必须先使用证书进行数字签名,然后才能安装到设备上或进行更新。
% E6 \% m* g4 @( F  c因此这些 apk 文件还不能被直接拿来安装。
' O( f+ A8 o5 {4 Z3 _) J' L( _# d至于如何签名,请参考以下链接,过程省略。: d0 ~. t7 H- j
https://developer.android.com/studio/publish/app-signing
1 t: j! F5 o  h, |3 t7. 总结当你习惯于用命令行做事的时候,你会发现效率往往会有很大的提升。编译代码亦是如此。& V4 r6 o/ U5 p! G) m3 P& R
( B7 M% x' l9 r$ @1 ?
- B9 V0 C7 C$ R. b$ h& N

  J, U, i  b% _2 q
4 ^5 S* \( @  u" q6 u8 z9 ^
6 F  G; c" v& _& u6 G) _. t0 o) D2 [( t; L
9 M9 Z6 R5 N4 l

; ^: r4 m1 K6 V0 x' r7 u
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-11-3 04:45 AM , Processed in 0.093445 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2026 Discuz! Team.

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