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

在 CentOS 7 下构建 Android 编译环境

[复制链接]

991

主题

92

回帖

5万

积分

管理员

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

/ h9 `) `+ v; K; u' i& L9 F; O) t
在 Android Studio 之外,还可以通过 Gradle Script 来编译 Android 项目并构建和测试应用。$ ~  s+ e" s3 P/ E1 Q- `
本文是一个备忘录,以记录我在 x86_64 GNU/Linux 系统 CentOS Linux release 7.8.2003 下折腾 Android 编译环境的一个过程。
/ X+ C3 D9 c' f& O5 @3 A7 ^: o8 h
- X+ \% i* X4 T. l1 ~/ V$ l( K7 S本文将会安装以下组件:" F) Z& ^& T! V9 j
  1. Git
    0 i# ^0 _- H$ s( L. P  ?1 m
  2. JDK 1.8
    4 e$ {7 Y# t2 |# E3 ^% U; A
  3. Go 1.14.7
    9 T' M8 k! o; b2 }
  4. Android SDK8 D( j" k0 L* r% ?
  5.   Android NDK! s, Z# \3 g/ v/ Y5 R7 o
  6. Rust 1.45.0
    6 h: _8 I2 z1 ^. I
  7.   Android Targets:, `3 O/ N/ s2 K
  8.     armv7-linux-androideabi; w! D6 H( u, a4 c( V6 a
  9.     aarch64-linux-android5 ^% W) g7 y7 t# Q
  10.     i686-linux-android9 o+ D- n6 ^* @3 z+ x) o
  11.     x86_64-linux-android
复制代码

/ q' e$ o+ O. n: }" A$ @" M1 J4 U以下的所有过程均是在 root 用户下操作。& B; O' N4 t: N. {& }, _
1. 安装 Git 和 JDK 1.8这两个组件发行版自带,通过以下命令即可安装。与此同时,再安装一些其他必要的组件 wget 和 unzip。
5 J$ [# T& H: V7 W6 C% W4 }# \7 w
  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% H5 x$ Q/ z. I5 }  @( Y9 m
  2. OpenJDK Runtime Environment (build 1.8.0_252-b09)# l" j: f2 v, c# s- V& U
  3. OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
复制代码
  1. $ javac -version
复制代码
返回
  1. javac 1.8.0_252
复制代码

! p9 w9 c) o% @9 S; G2. 安装 Go目前 Go 的最新版是 1.14.7。安装过程如下。: ~7 e2 Y8 _! H/ k! V$ }
  1. $ GO_VERSION=1.14.7
    * D, J* Y5 [, j( c. n$ @
  2. $ wget -O /tmp/go${GO_VERSION}.tar.gz https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz
    5 x1 f+ T. ?9 U, ~) n9 e
  3. $ tar -C /usr/local -xzf /tmp/go${GO_VERSION}.tar.gz
    # |) M* t- S# \2 A! A8 x4 V
  4. $ rm -fv /tmp/go${GO_VERSION}.tar.gz# F$ o& e' a5 K) F
  5. $ export PATH=/usr/local/go/bin:$PATH
复制代码
完成后通过以下命令验证 Go 版本号。
  1. $ go version
复制代码
返回
  1. go version go1.14.7 linux/amd64
复制代码

% Y) I8 B8 W5 A* Z' U! d3. 安装 Android SDK 及 Android NDK假设 ANDROID_HOME 路径是 /opt/sdk。安装过程如下。
. A% O9 R! S, l2 q( k  f) R
  1. $ mkdir -p /opt/sdk && cd /opt/sdk, P, m6 e( A: t! Q. j
  2. $ wget https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip
    ) ]0 L: Z# x) v0 }( d+ K
  3. $ unzip -q commandlinetools-linux-6609375_latest.zip' ?1 H% O1 {+ a- E7 a
  4. $ rm -fv commandlinetools-linux-6609375_latest.zip
    3 ^7 t8 z# y% k" T' Q
  5. $ export PATH=/opt/sdk/tools/bin:$PATH- A; L( c; n, L8 r, V! k. J
  6. $ [ -z "${ANDROID_HOME}" ] && export ANDROID_HOME=/opt/sdk
    9 |0 Y" ^7 J4 R8 ?6 s& v0 |4 v
  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:
    ' |. D1 _2 A7 Q' x+ L8 e+ `/ v
  2.   Path                 | Version      | Description                     | Location             / K& f5 S" y4 m% G) }' G- u
  3.   -------              | -------      | -------                         | -------              
    ' {* x! @  ?3 p4 |( ?1 f
  4.   build-tools;29.0.2   | 29.0.2       | Android SDK Build-Tools 29.0.2  | build-tools/29.0.2/  
    % [" V- C) t4 h$ E' O0 D
  5.   ndk-bundle           | 21.3.6528147 | NDK                             | ndk-bundle/         
    - C2 m3 z- L* B8 i5 @+ O6 V7 k; ?
  6.   ndk;21.0.6113669     | 21.0.6113669 | NDK (Side by side) 21.0.6113669 | ndk/21.0.6113669/    ) ~9 ]# M; P% s9 h. U
  7.   patcher;v4           | 1            | SDK Patch Applier v4            | patcher/v4/          : R' U0 r0 T5 r* Z* L
  8.   platform-tools       | 30.0.3       | Android SDK Platform-Tools      | platform-tools/      ; A6 a( x4 @- z& Y/ ~- R- |* ~+ N
  9.   platforms;android-29 | 4            | Android SDK Platform 29         | platforms/android-29/
    / e6 A% J1 B1 @
  10.   platforms;android-30 | 1            | Android SDK Platform 30         | platforms/android-30/
    - R/ @7 C  T- b) A2 ~; L  N3 [$ Z
  11.   tools                | 2.1.0        | Android SDK Tools 2.1           | tools/               ; ^/ D. a" J: K* T0 M
  12. Available Packages:5 |& r- u- a$ b% d$ I
  13.   以下省略
复制代码

+ F$ e7 f3 s3 a/ I# M# }4. 安装 Rust 及其它目前 Rust 的最新版是 1.45.0。安装过程如下。
: ^" j: }  v5 D, O5 r
  1. $ export RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo! s1 J. r1 l7 b  l
  2. $ RUST_VERSION=1.45.0' _# @7 P9 ?1 b7 m3 {: U; n) Z
  3. $ RUSTARCH='x86_64-unknown-linux-gnu'
    / A$ f9 P. J& ^/ r* W4 y/ ~* e
  4. $ wget -O /tmp/rustup-init "https://static.rust-lang.org/rustup/archive/1.21.1/${RUSTARCH}/rustup-init"! g/ v; n/ o1 e
  5. $ chmod 755 /tmp/rustup-init
    6 _8 q& d0 c' I3 ]
  6. $ /tmp/rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION
    5 s. {7 N. _4 l3 p8 O: i
  7. $ rm -fv /tmp/rustup-init
    * f/ T- J; H' n% g9 l
  8. $ chmod -R a+w ${RUSTUP_HOME} ${CARGO_HOME}1 a6 Z2 Q0 N0 r" D* ]& B( |
  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
      d' F6 |/ n. V' D9 r# r: U
  2. aarch64-linux-android5 }+ q5 c. T* z3 L
  3. i686-linux-android
    : Z4 y$ ~# q; a+ T$ j1 {7 [
  4. x86_64-linux-android
复制代码
安装过程如下。
  1. $ rustup install stable
    ! E' a7 B6 l% X$ l# c
  2. $ rustup default stable4 M9 v/ T$ r4 W) e! x
  3. $ rustup target add armv7-linux-androideabi
    ; J2 P/ [6 }, [; I* h
  4. $ rustup target add i686-linux-android2 k* b9 s+ r. Y( ^; A, F/ m0 b! j
  5. $ rustup target add aarch64-linux-android
    5 P, D- S* e# |7 G8 ~
  6. $ rustup target add x86_64-linux-android
复制代码

( B( A5 r" z0 ^5. 持久化环境变量上面的安装步骤是通过 export 来定义系统 PATH 的,在退出当前登录后就会丢失设置。
/ w9 V, i% ]  r+ Q8 e' _因此需要持久化一些环境变量。
- W! |( c9 L! T0 B" C编辑 ~/.bash_profile 文件。添加 ANDROID_HOME,RUSTUP_HOME,CARGO_HOME 的定义以及增加 PATH 定义。
& L( u% W4 W7 T6 }8 a+ ~最后呈现内容如下。
1 w# w3 l+ V; L1 e5 w
  1. # .bash_profile: u/ A3 K5 n. A' {6 |) F0 r
  2. 4 [3 Z, B# w# n! ^8 g
  3. # Get the aliases and functions" A( ]: C& h1 j$ I9 T! X2 `9 N7 y
  4. if [ -f ~/.bashrc ]; then
    0 `# {: c) U+ j0 w
  5. . ~/.bashrc' e1 h' k0 c8 o, u& L- B. V
  6. fi- n4 g+ A4 S: j3 q: s) c- C7 Y3 n! D
  7. 8 y0 Y% @) P+ }$ @
  8. # User specific environment and startup programs6 c2 _) k0 H7 Z/ t2 U  |

  9. 1 a; U( {5 Z" |. l
  10. export ANDROID_HOME=/opt/sdk RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo
    & {$ D9 N  W, r& |4 n( o

  11. * x3 \% W3 n/ u/ i
  12. PATH=$PATH:$HOME/bin:$ANDROID_HOME/tools/bin:/usr/local/go/bin:/usr/local/cargo/bin
      n# J( j' V2 i. T+ O

  13. $ _) _7 g$ l/ Q3 Y/ A' N
  14. export PATH
复制代码
! ]9 s% @" C* w
6. 编译 Android 项目这里选一个比较简单的项目来练手:v2ray-plugin-android/ Y* G3 s* e! T0 f- F* V
编译过程如下。
' D: E# J& ^" X  X, B
  1. $ git clone https://github.com/shadowsocks/v2ray-plugin-android.git
    1 X8 i/ v, x* B* N( L
  2. $ cd v2ray-plugin-android
    ! j) u8 T( W" @9 p9 K) Q, Q
  3. $ git submodule update --init --recursive4 W  n& O/ M$ J# Z! q/ Z0 z9 K
  4. $ ./gradlew assembleRelease
复制代码
6 K% |, Q  L* F) c* }% {2 |
完成后,编译好的 apk 文件位于 app/build/outputs/apk/release 路径下。% z( ~) d6 h! Q* Q; m
Android 系统要求所有 apk 必须先使用证书进行数字签名,然后才能安装到设备上或进行更新。
2 M( e! m1 J# t  ~6 {0 e& V' r因此这些 apk 文件还不能被直接拿来安装。
3 f# S- k3 n4 E: U4 b4 ?, [至于如何签名,请参考以下链接,过程省略。5 |- Z2 x' _) j0 F4 X
https://developer.android.com/studio/publish/app-signing! A% S: L0 ^! W$ F- c5 s
7. 总结当你习惯于用命令行做事的时候,你会发现效率往往会有很大的提升。编译代码亦是如此。
' u( j: R& R. i. n9 t; F
/ e* ~" P0 o% ?, f& A; p( P! K
: n* k% o( D5 U: ]
8 K/ n: s6 F5 ^
" l5 R3 m$ @) T8 p7 K
* o9 D) y1 ^9 t" o% E% I, K$ D( \5 f

/ N$ \$ j. Q6 t* c* i6 H

( y  @& k. d6 v
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-8-5 03:29 PM , Processed in 0.120923 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2026 Discuz! Team.

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