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

在 CentOS 7 下构建 Android 编译环境

[复制链接]

986

主题

92

回帖

5万

积分

管理员

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

7 `$ M; U& \6 z5 I  O
在 Android Studio 之外,还可以通过 Gradle Script 来编译 Android 项目并构建和测试应用。
& E( C8 k/ Q: F' y. w, ~本文是一个备忘录,以记录我在 x86_64 GNU/Linux 系统 CentOS Linux release 7.8.2003 下折腾 Android 编译环境的一个过程。) y9 W4 w) u( u/ E

" N. K: u" @: ?  i+ U本文将会安装以下组件:8 U* u& S7 t4 B, P% e; j2 I* Q
  1. Git2 {7 A7 r, r4 ~8 Z. @" \+ K
  2. JDK 1.8
    + d7 W$ Z# U( P7 p
  3. Go 1.14.7, A9 J9 W/ ^( `% ?/ t
  4. Android SDK! B$ C, G0 U4 G
  5.   Android NDK' j* ~  S0 T2 y: s, h
  6. Rust 1.45.0  T( b$ {# w8 G: D' q4 P
  7.   Android Targets:
    ! P2 n/ M6 z+ U5 r" p2 J
  8.     armv7-linux-androideabi  U, z5 _! }  c6 n. b4 `
  9.     aarch64-linux-android2 z8 I9 m- O# v; D
  10.     i686-linux-android& }$ @; x2 Q, p
  11.     x86_64-linux-android
复制代码

* G. W7 [2 F$ W1 E/ q$ k8 M" m以下的所有过程均是在 root 用户下操作。
: V0 {" n: N5 v2 l# f+ Q7 i6 t1. 安装 Git 和 JDK 1.8这两个组件发行版自带,通过以下命令即可安装。与此同时,再安装一些其他必要的组件 wget 和 unzip。0 f0 J1 d; i8 `3 }
  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"
    ) v0 z# U$ I8 e3 }8 X
  2. OpenJDK Runtime Environment (build 1.8.0_252-b09)7 z/ G4 v8 p+ N% A
  3. OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
复制代码
  1. $ javac -version
复制代码
返回
  1. javac 1.8.0_252
复制代码
- Y6 l& i1 F  _8 u
2. 安装 Go目前 Go 的最新版是 1.14.7。安装过程如下。
2 j) |. N! v0 Q0 i( M9 h: J
  1. $ GO_VERSION=1.14.74 ^4 `3 }0 Y1 R
  2. $ wget -O /tmp/go${GO_VERSION}.tar.gz https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz
    & F6 m% x8 W7 y& H6 W3 i# _
  3. $ tar -C /usr/local -xzf /tmp/go${GO_VERSION}.tar.gz! a: F( E6 ]2 ?1 b: W. P9 i
  4. $ rm -fv /tmp/go${GO_VERSION}.tar.gz
    1 Q0 v3 ?4 `# G( _" i$ A
  5. $ export PATH=/usr/local/go/bin:$PATH
复制代码
完成后通过以下命令验证 Go 版本号。
  1. $ go version
复制代码
返回
  1. go version go1.14.7 linux/amd64
复制代码
& q. o/ d% v* u9 L9 I+ D2 G2 Q) T
3. 安装 Android SDK 及 Android NDK假设 ANDROID_HOME 路径是 /opt/sdk。安装过程如下。! W7 p, I* [, h/ r- m& K
  1. $ mkdir -p /opt/sdk && cd /opt/sdk
    . T0 M& ^$ I2 r; q( ~1 d4 i4 U
  2. $ wget https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip
    ) Z% p# v5 V# {2 \6 T  I+ C
  3. $ unzip -q commandlinetools-linux-6609375_latest.zip
    - c7 E* H9 V  W+ h2 l
  4. $ rm -fv commandlinetools-linux-6609375_latest.zip
    5 q& v* }" A- @# C" U' k7 B3 x7 T
  5. $ export PATH=/opt/sdk/tools/bin:$PATH; h8 P; A( @' x5 G
  6. $ [ -z "${ANDROID_HOME}" ] && export ANDROID_HOME=/opt/sdk! A# a  b$ ?5 V- x8 L
  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:8 T$ m. ^- ~" O5 H6 u9 A" W
  2.   Path                 | Version      | Description                     | Location            
    . f9 W! T# B, v- G2 b
  3.   -------              | -------      | -------                         | -------              
    6 H: V# G5 O+ E& r& U0 j% L
  4.   build-tools;29.0.2   | 29.0.2       | Android SDK Build-Tools 29.0.2  | build-tools/29.0.2/  
    # E1 R# |1 ^% M! A" {( ^1 c
  5.   ndk-bundle           | 21.3.6528147 | NDK                             | ndk-bundle/         
    6 e# A8 N+ j( R4 j2 S$ Q) S9 o
  6.   ndk;21.0.6113669     | 21.0.6113669 | NDK (Side by side) 21.0.6113669 | ndk/21.0.6113669/   
    * J+ l) d- ]) i" L  x
  7.   patcher;v4           | 1            | SDK Patch Applier v4            | patcher/v4/         
    / X& o0 C+ `) u" t
  8.   platform-tools       | 30.0.3       | Android SDK Platform-Tools      | platform-tools/      ! _2 f4 P- c* T1 A1 F
  9.   platforms;android-29 | 4            | Android SDK Platform 29         | platforms/android-29/* X% T6 z0 H  z. J
  10.   platforms;android-30 | 1            | Android SDK Platform 30         | platforms/android-30/$ g' m" ?4 j) x9 y9 v- {
  11.   tools                | 2.1.0        | Android SDK Tools 2.1           | tools/               / S( R& k- b! Z, n4 G% R
  12. Available Packages:% S3 X% @1 x: V0 t. ]
  13.   以下省略
复制代码

( {; n4 I+ ]6 d5 H: A: `4. 安装 Rust 及其它目前 Rust 的最新版是 1.45.0。安装过程如下。+ a/ p/ s+ _6 Y; u4 I% l
  1. $ export RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo
      |& t$ z4 }' ?% s/ G  {
  2. $ RUST_VERSION=1.45.0
    3 h1 D5 u! |  k! \- k
  3. $ RUSTARCH='x86_64-unknown-linux-gnu'( z/ |+ i4 m2 ~( ]
  4. $ wget -O /tmp/rustup-init "https://static.rust-lang.org/rustup/archive/1.21.1/${RUSTARCH}/rustup-init"
    - O( G1 ?/ Y" S3 [
  5. $ chmod 755 /tmp/rustup-init5 f  z4 O5 l% U& c+ M# M
  6. $ /tmp/rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION
    ( o8 W. a) f7 B0 E
  7. $ rm -fv /tmp/rustup-init
    ) D% H/ T* H6 X$ T
  8. $ chmod -R a+w ${RUSTUP_HOME} ${CARGO_HOME}5 y+ Y  l6 a2 F7 l3 ~% @
  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  B' w9 r8 Y7 [' |% K1 J& V6 O' c
  2. aarch64-linux-android! K$ B$ t: d, P; p  b8 C- C% D
  3. i686-linux-android
    6 W  }9 J* N+ l# X! @
  4. x86_64-linux-android
复制代码
安装过程如下。
  1. $ rustup install stable
    - F* X) J& V$ ~9 Q; c6 k1 m+ t
  2. $ rustup default stable, g& R: H9 z# W9 ?* C* ^
  3. $ rustup target add armv7-linux-androideabi9 G7 i9 W' l) u1 p* b- ]! t
  4. $ rustup target add i686-linux-android5 Y7 ^* W) [0 I
  5. $ rustup target add aarch64-linux-android
    0 g9 M0 n2 D( o) \  |) B9 m" d- z
  6. $ rustup target add x86_64-linux-android
复制代码

2 |# c$ @- P* h$ H1 Y9 R- O) k5. 持久化环境变量上面的安装步骤是通过 export 来定义系统 PATH 的,在退出当前登录后就会丢失设置。3 `# `% P* z( ?% E2 l; ~8 i# o: N
因此需要持久化一些环境变量。0 j$ a) B! ]- ]) V
编辑 ~/.bash_profile 文件。添加 ANDROID_HOME,RUSTUP_HOME,CARGO_HOME 的定义以及增加 PATH 定义。
7 h, J) f) K- c: j3 `# v& [, s6 V% @最后呈现内容如下。. y1 B. j. P# z4 k
  1. # .bash_profile% u7 U* v7 ]5 W" H4 c) q
  2. , s, `* g8 b$ `$ n3 X' I
  3. # Get the aliases and functions
    % Z: n+ Z; @4 ?4 O4 q8 c% R6 P
  4. if [ -f ~/.bashrc ]; then* G( {4 E8 [2 |; V8 Y
  5. . ~/.bashrc
    * M; V7 \0 B8 H
  6. fi
    4 F* R6 D3 }* O4 f
  7. 4 T6 J, ~% ?+ \2 i  o& I4 l4 z  m( m
  8. # User specific environment and startup programs, d4 }; a6 x8 k: q
  9. & R$ s4 z, E+ F" Q  K
  10. export ANDROID_HOME=/opt/sdk RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo0 z! a% X( i; t- {- D. Y' j- r
  11. # O0 i; B9 v) P9 `( D0 i  d2 T: \5 y
  12. PATH=$PATH:$HOME/bin:$ANDROID_HOME/tools/bin:/usr/local/go/bin:/usr/local/cargo/bin
    0 Y" W% `# j( j) U0 z) p
  13. ; T) q, U; i7 Q4 a/ C
  14. export PATH
复制代码

$ Z% P% a7 V% I6. 编译 Android 项目这里选一个比较简单的项目来练手:v2ray-plugin-android
2 F- V3 ~. K+ o) F! W编译过程如下。
% U. I' n8 r( @5 r2 M
  1. $ git clone https://github.com/shadowsocks/v2ray-plugin-android.git9 Q( ]" n) H! x' I5 p. U
  2. $ cd v2ray-plugin-android
    ( N9 T8 \  z, i; p$ E0 t6 W- l
  3. $ git submodule update --init --recursive  l9 K/ e0 r4 A
  4. $ ./gradlew assembleRelease
复制代码

4 `  N, x# E- d2 Z  d5 q+ k完成后,编译好的 apk 文件位于 app/build/outputs/apk/release 路径下。( u  I$ y4 j4 ]# x! t4 x7 j
Android 系统要求所有 apk 必须先使用证书进行数字签名,然后才能安装到设备上或进行更新。
8 ]9 |3 A5 \# ]5 ]- H因此这些 apk 文件还不能被直接拿来安装。
5 d, @: Y) \1 [& R至于如何签名,请参考以下链接,过程省略。1 m5 h8 D$ x2 X& T
https://developer.android.com/studio/publish/app-signing
) o4 k' S0 l" Z* ^, W7. 总结当你习惯于用命令行做事的时候,你会发现效率往往会有很大的提升。编译代码亦是如此。
, V" c* i7 W' P9 ?) }: }% A: I! p$ i3 e

& \; b+ _: E  U5 a0 L
" C8 F4 ^* V3 b' ?# l0 w; c/ b" f8 n+ f" N9 |, M1 y1 k* ~4 q
. m, e' S  t7 [" u5 f0 c

, i: R( w' ?( K) M* c0 N) m+ P6 u8 w. Q5 \/ z4 w& ~

4 q. C& B6 [7 [/ i# r  V
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-3-22 02:27 AM , Processed in 0.097320 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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