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

在 CentOS 7 下构建 Android 编译环境

[复制链接]

989

主题

92

回帖

5万

积分

管理员

积分
55362
发表于 2022-7-4 16:37:02 | 显示全部楼层 |阅读模式
; n  z9 L2 ]1 c4 O: |
在 Android Studio 之外,还可以通过 Gradle Script 来编译 Android 项目并构建和测试应用。2 U* m# S) i2 m' V2 t4 q5 c( P0 A
本文是一个备忘录,以记录我在 x86_64 GNU/Linux 系统 CentOS Linux release 7.8.2003 下折腾 Android 编译环境的一个过程。
4 _4 I& z4 A2 w) s; n1 z, U  F
! {0 m3 q; g6 ~4 p- N本文将会安装以下组件:
  X; M2 h9 U6 R; D3 B
  1. Git
      i6 Q/ u! O7 Z5 a% X4 `
  2. JDK 1.8: l( c1 @2 s9 j7 x# T7 Y
  3. Go 1.14.7
    # w. g8 x5 W: R
  4. Android SDK
    4 P0 U, ^& y! {3 O; s8 F3 b
  5.   Android NDK
    - o0 d% j1 c, l8 V4 {6 v
  6. Rust 1.45.0
    " \/ k" ]6 Y6 W3 x
  7.   Android Targets:
    , E2 U+ o1 J% k
  8.     armv7-linux-androideabi. D  `" M  L+ ^5 ~+ E
  9.     aarch64-linux-android# a3 S2 o) t; ~
  10.     i686-linux-android- y( ~/ U' {! w1 ^. [- b  i* M
  11.     x86_64-linux-android
复制代码

0 @) x; \4 ]! b' `以下的所有过程均是在 root 用户下操作。8 j" {: X# c& J7 q% A
1. 安装 Git 和 JDK 1.8这两个组件发行版自带,通过以下命令即可安装。与此同时,再安装一些其他必要的组件 wget 和 unzip。
3 E. l* ^5 P7 v5 u+ _
  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"6 G: ^4 [, ]5 G" ^4 Q3 J7 l$ O0 O" J& Y2 c
  2. OpenJDK Runtime Environment (build 1.8.0_252-b09)
    ! Z% m$ N* [$ S; O6 O' }
  3. OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
复制代码
  1. $ javac -version
复制代码
返回
  1. javac 1.8.0_252
复制代码
- o1 J& N% B8 \* ]* q* ]
2. 安装 Go目前 Go 的最新版是 1.14.7。安装过程如下。
+ N- D% X3 p$ f4 G
  1. $ GO_VERSION=1.14.7" U4 t# k( p1 g; m
  2. $ wget -O /tmp/go${GO_VERSION}.tar.gz https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz
    ' x4 T% a# A: r, @, v  B- H$ i) _) J
  3. $ tar -C /usr/local -xzf /tmp/go${GO_VERSION}.tar.gz
    * m8 J' k9 B# ~3 K: J6 ?' M3 n
  4. $ rm -fv /tmp/go${GO_VERSION}.tar.gz" D( Y% s: E! D# X
  5. $ export PATH=/usr/local/go/bin:$PATH
复制代码
完成后通过以下命令验证 Go 版本号。
  1. $ go version
复制代码
返回
  1. go version go1.14.7 linux/amd64
复制代码

; B0 a1 N# f" M( r) I# ^1 B; `3. 安装 Android SDK 及 Android NDK假设 ANDROID_HOME 路径是 /opt/sdk。安装过程如下。' d9 F& ?' {7 v: R/ ~$ Y5 \5 h1 L" x
  1. $ mkdir -p /opt/sdk && cd /opt/sdk2 p1 S7 ~2 u) q% }2 ~
  2. $ wget https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip5 V3 N& Q( L: ~6 w6 Q( f4 ?$ N
  3. $ unzip -q commandlinetools-linux-6609375_latest.zip3 g# ^5 Q% \7 W; z  R. P
  4. $ rm -fv commandlinetools-linux-6609375_latest.zip
    4 O6 \4 q4 C4 u
  5. $ export PATH=/opt/sdk/tools/bin:$PATH; y4 y0 b4 @5 ]+ J7 U
  6. $ [ -z "${ANDROID_HOME}" ] && export ANDROID_HOME=/opt/sdk5 Z) K8 W& O) t) x8 N7 b; 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:5 q6 S7 h4 ?; I, j* C
  2.   Path                 | Version      | Description                     | Location            
    2 y5 m5 f" e! h; A& G
  3.   -------              | -------      | -------                         | -------              + A" G/ S& x! |! L" X
  4.   build-tools;29.0.2   | 29.0.2       | Android SDK Build-Tools 29.0.2  | build-tools/29.0.2/  + }6 a- j6 ?7 C. j5 r# C$ }, T2 R
  5.   ndk-bundle           | 21.3.6528147 | NDK                             | ndk-bundle/         
    % M8 m6 T7 o' _% v% T; o# z' D8 Q
  6.   ndk;21.0.6113669     | 21.0.6113669 | NDK (Side by side) 21.0.6113669 | ndk/21.0.6113669/   
    2 g( r0 u: K  n0 b, D1 u
  7.   patcher;v4           | 1            | SDK Patch Applier v4            | patcher/v4/          & J4 i0 U& J  b+ O% F" H; ]
  8.   platform-tools       | 30.0.3       | Android SDK Platform-Tools      | platform-tools/      ; m& r  D! w! i/ l& w7 A" S
  9.   platforms;android-29 | 4            | Android SDK Platform 29         | platforms/android-29/2 N1 W4 n8 x; `! V6 K' Z
  10.   platforms;android-30 | 1            | Android SDK Platform 30         | platforms/android-30/- ~9 N' l  I3 E
  11.   tools                | 2.1.0        | Android SDK Tools 2.1           | tools/               / R2 [' p$ W& S7 W4 _
  12. Available Packages:6 p( j  K4 q6 z6 n% y
  13.   以下省略
复制代码

/ ~- Z( Y0 @1 d1 L( D9 {+ E4. 安装 Rust 及其它目前 Rust 的最新版是 1.45.0。安装过程如下。
: a% Y9 D7 x  t' i
  1. $ export RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo5 I! |' n" M! Y
  2. $ RUST_VERSION=1.45.09 ^+ Q: t: M+ {# x5 R
  3. $ RUSTARCH='x86_64-unknown-linux-gnu'9 H7 a' ^9 @9 E$ X- n
  4. $ wget -O /tmp/rustup-init "https://static.rust-lang.org/rustup/archive/1.21.1/${RUSTARCH}/rustup-init"
    9 R( p  f$ Z5 R
  5. $ chmod 755 /tmp/rustup-init
    5 H# {* b* Y% K. \% n0 d- e! ]
  6. $ /tmp/rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION
    ( e. L! \  L, r! M
  7. $ rm -fv /tmp/rustup-init
    4 p% O( Y! G7 S, O
  8. $ chmod -R a+w ${RUSTUP_HOME} ${CARGO_HOME}
    / O1 B) d8 X! ~8 j# N; g. j  i# c
  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% [$ E' _- B9 ]: E. w: M# Z3 E; S
  2. aarch64-linux-android
    4 Z1 m! n/ I( `7 k  _
  3. i686-linux-android: @' H/ |( A* R" g7 U0 X) e# ^
  4. x86_64-linux-android
复制代码
安装过程如下。
  1. $ rustup install stable# K2 e( E& i! ^9 r! F9 \" e
  2. $ rustup default stable# v* G4 F3 H( z
  3. $ rustup target add armv7-linux-androideabi
    8 _( r/ r" i0 j. p# `
  4. $ rustup target add i686-linux-android
    & g; O+ v: Y; m5 |: ^
  5. $ rustup target add aarch64-linux-android
    5 q1 y6 H5 E+ \2 v$ w2 [4 h) o
  6. $ rustup target add x86_64-linux-android
复制代码
( x, |" {- W/ @# n2 Z
5. 持久化环境变量上面的安装步骤是通过 export 来定义系统 PATH 的,在退出当前登录后就会丢失设置。' E$ i" F! F* u/ i) E! F: ^
因此需要持久化一些环境变量。
1 R! _: J; a# p7 O1 a# v编辑 ~/.bash_profile 文件。添加 ANDROID_HOME,RUSTUP_HOME,CARGO_HOME 的定义以及增加 PATH 定义。3 j7 f2 _( @/ [5 \" c1 y8 d
最后呈现内容如下。
6 e. o. u, d* E& m- {  _2 P6 v
  1. # .bash_profile
    . `$ y+ \$ c6 ~; K0 Y

  2. ' _' }1 S5 {: Q+ ^6 `3 E
  3. # Get the aliases and functions
    ! ~! v! u* R5 n" C! _
  4. if [ -f ~/.bashrc ]; then
    : ]8 w, ]1 j4 D& ^6 a
  5. . ~/.bashrc
    / f& a3 G3 {; R7 W$ m0 k
  6. fi2 U2 ]0 Y* P5 @
  7. 9 T0 t/ v. h9 M8 s8 `
  8. # User specific environment and startup programs
    ) Q: ?5 D( o+ S

  9. ( a4 S6 K- p& S; j
  10. export ANDROID_HOME=/opt/sdk RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo& C& R' Y( a- y4 g/ p3 C! d
  11. / A& F  \$ w' B* c4 T
  12. PATH=$PATH:$HOME/bin:$ANDROID_HOME/tools/bin:/usr/local/go/bin:/usr/local/cargo/bin
    ! h# R- h' X% Z$ V) ~+ O( i9 s

  13. ( e+ @" }$ q; B/ v
  14. export PATH
复制代码
2 q" L( f- ^5 {
6. 编译 Android 项目这里选一个比较简单的项目来练手:v2ray-plugin-android
! S& b0 L1 D6 m3 g. N" h编译过程如下。1 E6 d- d8 y$ e
  1. $ git clone https://github.com/shadowsocks/v2ray-plugin-android.git
    / X' E6 ?" F* x, o0 t
  2. $ cd v2ray-plugin-android
    # ~: E/ u) Y! }: z3 ^6 l
  3. $ git submodule update --init --recursive
    3 z- L9 r( u+ l& U2 H1 ~4 d
  4. $ ./gradlew assembleRelease
复制代码
0 B9 O: s& @. E1 ^* w, m) T
完成后,编译好的 apk 文件位于 app/build/outputs/apk/release 路径下。3 Q5 X3 I6 _6 x  \4 P" e" T
Android 系统要求所有 apk 必须先使用证书进行数字签名,然后才能安装到设备上或进行更新。
; ]1 R  {. ~; E# T, o因此这些 apk 文件还不能被直接拿来安装。
1 P3 k0 Q( K3 z$ A  ^至于如何签名,请参考以下链接,过程省略。
6 G, E8 b  ?6 Y! Ihttps://developer.android.com/studio/publish/app-signing5 s. a; I( r9 n% O4 s( X7 D, M
7. 总结当你习惯于用命令行做事的时候,你会发现效率往往会有很大的提升。编译代码亦是如此。
* {: Y3 }5 k( L" @) {% A' _3 M& q$ i- a
; [  Q! h% M8 k/ H. Q

5 i8 D# H$ h# D$ u$ r3 Z
) I7 h0 r, I& }, E8 u
5 P/ |8 }$ E8 A/ c0 B+ [
8 l- a: h/ _8 c" {: W6 i/ x
, z, C2 D6 e/ o
6 A/ I- ], N7 S# k" T$ j  |' W
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-5-6 01:02 PM , Processed in 0.103732 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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