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

在 CentOS 7 下构建 Android 编译环境

[复制链接]

991

主题

92

回帖

5万

积分

管理员

积分
55422
发表于 2022-7-4 16:37:02 | 显示全部楼层 |阅读模式
: K; n) V1 j0 `3 I; D
在 Android Studio 之外,还可以通过 Gradle Script 来编译 Android 项目并构建和测试应用。1 h  F. w8 @% X3 y/ b7 N
本文是一个备忘录,以记录我在 x86_64 GNU/Linux 系统 CentOS Linux release 7.8.2003 下折腾 Android 编译环境的一个过程。
) B/ w4 v) W# J2 e# `  A" O
3 b: u' ]. _8 {# u5 [本文将会安装以下组件:: ~, z' |! t" n, D- E6 h! F
  1. Git' T( P" z2 |+ T8 H$ C1 s+ b
  2. JDK 1.8
    " v/ u0 g/ k; z) B! L
  3. Go 1.14.72 Q# K. s) \3 b; P! z7 F# _
  4. Android SDK
    * R0 u; c7 s: _
  5.   Android NDK1 N% E* c$ J# y5 \* T( S+ M! q
  6. Rust 1.45.0
    / B' y6 a& ~" y; G2 e
  7.   Android Targets:. c$ V( Y2 l0 ]1 O
  8.     armv7-linux-androideabi
    8 x1 z7 z/ E; y, ]
  9.     aarch64-linux-android4 d: k# I0 q8 u/ Z% W
  10.     i686-linux-android
    : c/ r7 J$ W; Z5 _7 q) w
  11.     x86_64-linux-android
复制代码
6 \. n" P% O) x/ f
以下的所有过程均是在 root 用户下操作。
( q1 W( l( n6 }$ ^" q3 b1. 安装 Git 和 JDK 1.8这两个组件发行版自带,通过以下命令即可安装。与此同时,再安装一些其他必要的组件 wget 和 unzip。
$ O1 U7 Q2 n+ E8 w* O3 t
  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", v+ K  J) q1 Q. w' i' ~
  2. OpenJDK Runtime Environment (build 1.8.0_252-b09)
    3 F0 a: N$ M4 \; `6 ^- u8 D1 U5 f
  3. OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
复制代码
  1. $ javac -version
复制代码
返回
  1. javac 1.8.0_252
复制代码

; d* }3 F8 T2 {+ A. H& {: c2. 安装 Go目前 Go 的最新版是 1.14.7。安装过程如下。( J: s3 ?. K- }1 k& b2 u- A
  1. $ GO_VERSION=1.14.78 O+ M- q8 `- b
  2. $ wget -O /tmp/go${GO_VERSION}.tar.gz https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz5 q4 S/ N0 L# ^  |/ g& H
  3. $ tar -C /usr/local -xzf /tmp/go${GO_VERSION}.tar.gz
    & U2 [4 P0 K# K
  4. $ rm -fv /tmp/go${GO_VERSION}.tar.gz6 p8 e2 M9 E" P5 [- U: Y
  5. $ export PATH=/usr/local/go/bin:$PATH
复制代码
完成后通过以下命令验证 Go 版本号。
  1. $ go version
复制代码
返回
  1. go version go1.14.7 linux/amd64
复制代码
: G# D) b0 [7 {! l( |
3. 安装 Android SDK 及 Android NDK假设 ANDROID_HOME 路径是 /opt/sdk。安装过程如下。
% a; x3 y; ^# R4 C6 g) I
  1. $ mkdir -p /opt/sdk && cd /opt/sdk
    3 |, Z0 K" ^9 y
  2. $ wget https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip% T' l' S$ P. I; u) j$ _
  3. $ unzip -q commandlinetools-linux-6609375_latest.zip2 E. d! D) O; k. Q9 S1 u/ D6 J
  4. $ rm -fv commandlinetools-linux-6609375_latest.zip8 U$ t0 B, m) X
  5. $ export PATH=/opt/sdk/tools/bin:$PATH2 p- A$ m" h0 a
  6. $ [ -z "${ANDROID_HOME}" ] && export ANDROID_HOME=/opt/sdk
      n  Y% Z$ s# u! y0 ~, Y# X& _) Q
  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:
    % J9 T' D) h4 W) ]
  2.   Path                 | Version      | Description                     | Location             8 W; d6 n1 ~+ V
  3.   -------              | -------      | -------                         | -------              
    8 @1 z. f: [/ E0 v3 l/ B
  4.   build-tools;29.0.2   | 29.0.2       | Android SDK Build-Tools 29.0.2  | build-tools/29.0.2/  1 T+ @+ o3 a  t0 A8 I
  5.   ndk-bundle           | 21.3.6528147 | NDK                             | ndk-bundle/          & a: ]/ }5 `; b2 K% Y) ]
  6.   ndk;21.0.6113669     | 21.0.6113669 | NDK (Side by side) 21.0.6113669 | ndk/21.0.6113669/    9 v% f; i8 U* R/ C" c9 J
  7.   patcher;v4           | 1            | SDK Patch Applier v4            | patcher/v4/         
    , J6 I- R3 M- Q* \5 s
  8.   platform-tools       | 30.0.3       | Android SDK Platform-Tools      | platform-tools/      
    ! W; ^- }; ^  R9 b/ Z) t  |( y5 P, @
  9.   platforms;android-29 | 4            | Android SDK Platform 29         | platforms/android-29/* `9 J* \) }! c- M" {; ?1 |
  10.   platforms;android-30 | 1            | Android SDK Platform 30         | platforms/android-30/
    1 n! q. _: i* a, X& k2 Q
  11.   tools                | 2.1.0        | Android SDK Tools 2.1           | tools/               " d1 f& G$ v/ @6 r. P5 r$ X7 l
  12. Available Packages:
    ! ?' J& v' t4 z! @
  13.   以下省略
复制代码

2 ?* b' o' Y; M6 K$ x/ w7 G4. 安装 Rust 及其它目前 Rust 的最新版是 1.45.0。安装过程如下。% J, [2 ~* r& k# b
  1. $ export RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo
    + w! j# z$ h0 V/ W
  2. $ RUST_VERSION=1.45.0& U. i: _! \$ C& @! J5 f
  3. $ RUSTARCH='x86_64-unknown-linux-gnu'
    . V; R: p: m5 |+ {
  4. $ wget -O /tmp/rustup-init "https://static.rust-lang.org/rustup/archive/1.21.1/${RUSTARCH}/rustup-init"
    / O# O: H. [1 U; B" X& U
  5. $ chmod 755 /tmp/rustup-init6 {" }5 l7 _' L1 z2 e( B$ |
  6. $ /tmp/rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION
    4 y5 o2 l1 {6 U
  7. $ rm -fv /tmp/rustup-init2 [; k' Q" s1 k# }7 G
  8. $ chmod -R a+w ${RUSTUP_HOME} ${CARGO_HOME}. {* x3 B4 m0 c! ]: o
  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
    # O7 Y# A3 U6 c2 U7 {3 ^6 {0 v1 R* X
  2. aarch64-linux-android
    2 j; Y% D* d4 r: }, ^/ ~: {
  3. i686-linux-android2 j5 v# p& b" L) ~, {- k8 `0 J
  4. x86_64-linux-android
复制代码
安装过程如下。
  1. $ rustup install stable
      I- x' Q* e. l  k& y% L
  2. $ rustup default stable6 `  Q- q) A+ g
  3. $ rustup target add armv7-linux-androideabi3 D0 V; V. G' B0 B! ]% L' X" ^
  4. $ rustup target add i686-linux-android. I3 G( a/ N5 o5 U& m9 {
  5. $ rustup target add aarch64-linux-android
    $ J  G1 O9 C& ?9 ^5 O8 e: i
  6. $ rustup target add x86_64-linux-android
复制代码

' u& x; O* A5 ?' b5. 持久化环境变量上面的安装步骤是通过 export 来定义系统 PATH 的,在退出当前登录后就会丢失设置。& G$ Z# `, `. Z) C& \
因此需要持久化一些环境变量。4 F% ^5 z; y3 x) C
编辑 ~/.bash_profile 文件。添加 ANDROID_HOME,RUSTUP_HOME,CARGO_HOME 的定义以及增加 PATH 定义。
' |7 Z4 G6 Q$ @; z# x. n! ?  R最后呈现内容如下。2 m' [) W: h" y2 ^3 K! H3 L& A
  1. # .bash_profile( ^' w* E# }' l+ |" c4 Y3 T

  2. 8 m* f/ L6 Z" C- q7 N- h: M& X/ A; k6 }
  3. # Get the aliases and functions
    3 e: b4 ~6 ?' [9 X* E/ D$ R
  4. if [ -f ~/.bashrc ]; then
    / q) H' J  q2 ^: A" Z
  5. . ~/.bashrc
    9 ^8 i/ _( S) g0 l; a
  6. fi$ t3 x- n) Y8 w/ j/ ]: T
  7. ' o# f+ x1 {1 X  z0 u
  8. # User specific environment and startup programs
    4 H% k; {+ n. Y' G
  9. # K$ K: j( Z2 m) P' W
  10. export ANDROID_HOME=/opt/sdk RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo
    % O: X; t  `+ _7 w" n

  11. - g$ n1 T) h4 s0 Z/ y& y$ b
  12. PATH=$PATH:$HOME/bin:$ANDROID_HOME/tools/bin:/usr/local/go/bin:/usr/local/cargo/bin
    & p2 t# h4 ]6 E, z0 [  _

  13.   E0 j6 P; ]. t2 U0 d1 [
  14. export PATH
复制代码
( x/ C/ N4 `' X6 `" R% z
6. 编译 Android 项目这里选一个比较简单的项目来练手:v2ray-plugin-android
# \7 v2 U. \* }( L2 c编译过程如下。! W, G( a  W$ [/ y
  1. $ git clone https://github.com/shadowsocks/v2ray-plugin-android.git- S/ n0 r3 V# E4 b0 F; z
  2. $ cd v2ray-plugin-android
    ( o; \) k8 l' ~
  3. $ git submodule update --init --recursive
    ; m( y* c+ K, A2 e
  4. $ ./gradlew assembleRelease
复制代码
, t# X  R& `3 j) I
完成后,编译好的 apk 文件位于 app/build/outputs/apk/release 路径下。
) E6 a' F* F2 EAndroid 系统要求所有 apk 必须先使用证书进行数字签名,然后才能安装到设备上或进行更新。: i6 f- |, @6 z& \
因此这些 apk 文件还不能被直接拿来安装。
5 u  n- Q' o9 @7 S5 [) V% B& O至于如何签名,请参考以下链接,过程省略。
0 G9 p6 x$ J$ w: e! B9 P, o8 Ohttps://developer.android.com/studio/publish/app-signing
: X$ D+ X: a) t9 h7. 总结当你习惯于用命令行做事的时候,你会发现效率往往会有很大的提升。编译代码亦是如此。: r) `5 w$ k+ r* _1 g6 }, y& W) i

" T9 m7 y% w4 i( m' K* t1 t; D* h3 |  q8 O" a) w; j' }0 _
  r/ t$ d* L. h% U. c7 K

, C5 i8 w' X- [' T$ V, J( ?% @! S& R; ~8 b

$ q3 Z8 a2 Z3 O& T* H7 \. c
% u* Z0 S8 V: i. b7 \
1 q& g7 V4 J5 Z& l+ `  r5 E
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-6-20 02:41 PM , Processed in 0.089314 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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