找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 117|回复: 0

在 CentOS 7 下构建 Android 编译环境

[复制链接]

983

主题

83

回帖

5万

积分

管理员

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

. c# Q, j+ K: m6 G
在 Android Studio 之外,还可以通过 Gradle Script 来编译 Android 项目并构建和测试应用。
2 [" A) ^/ J# W- ?本文是一个备忘录,以记录我在 x86_64 GNU/Linux 系统 CentOS Linux release 7.8.2003 下折腾 Android 编译环境的一个过程。: n+ ?% Q3 p7 K; r

& k1 P* i  F; P+ b. F8 X" `本文将会安装以下组件:" E& a: g6 z) R" h0 k  T6 M
  1. Git
    % ^$ W; K" b1 x1 P) L: T. P  g
  2. JDK 1.85 C% U4 X; O5 U3 |0 C2 Y8 S6 B4 g) Z
  3. Go 1.14.7
      @0 V, z( g" b; f  ?+ }1 e
  4. Android SDK8 G( |" v( J& V& \' c# D
  5.   Android NDK
    ( _3 I* s& a, p& _8 V" ], e
  6. Rust 1.45.0$ j% i/ q# a5 f4 R1 A! D3 y6 z' l* A
  7.   Android Targets:
    , e1 u, Z; k: L
  8.     armv7-linux-androideabi( g) J: r8 W1 W- N0 |/ A( e7 G5 r
  9.     aarch64-linux-android
    ' |! D* N3 k+ D  X# j6 [
  10.     i686-linux-android! Z4 R' ^- P+ X3 m
  11.     x86_64-linux-android
复制代码

1 [4 u0 g- B3 R" Y7 s以下的所有过程均是在 root 用户下操作。1 _# i0 s2 Z; N, z$ R' N
1. 安装 Git 和 JDK 1.8这两个组件发行版自带,通过以下命令即可安装。与此同时,再安装一些其他必要的组件 wget 和 unzip。4 N. V2 c) a7 s& 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"; l! d4 f' ?: j* Z3 I% u5 [
  2. OpenJDK Runtime Environment (build 1.8.0_252-b09)
    4 U0 ]/ w9 a$ ^. C2 A
  3. OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
复制代码
  1. $ javac -version
复制代码
返回
  1. javac 1.8.0_252
复制代码
4 m. A4 f% @2 P* A! K
2. 安装 Go目前 Go 的最新版是 1.14.7。安装过程如下。2 v; X) ?6 f0 N& I5 O5 G6 b4 M5 J
  1. $ GO_VERSION=1.14.7+ u3 d; |$ G2 ]: P% @, W
  2. $ wget -O /tmp/go${GO_VERSION}.tar.gz https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz1 M4 t+ t5 z' h( O
  3. $ tar -C /usr/local -xzf /tmp/go${GO_VERSION}.tar.gz
    6 @, t& P9 g$ Z4 O; `: h( h. B
  4. $ rm -fv /tmp/go${GO_VERSION}.tar.gz6 G- K& E+ j  F1 N! e: j; Z
  5. $ export PATH=/usr/local/go/bin:$PATH
复制代码
完成后通过以下命令验证 Go 版本号。
  1. $ go version
复制代码
返回
  1. go version go1.14.7 linux/amd64
复制代码
% k. P/ i) |5 M2 t
3. 安装 Android SDK 及 Android NDK假设 ANDROID_HOME 路径是 /opt/sdk。安装过程如下。
! W1 `8 W5 i' b' ]1 Q3 K% j
  1. $ mkdir -p /opt/sdk && cd /opt/sdk
    " m' n6 F& m! ]2 L
  2. $ wget https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip
    ' Z7 b! ~9 G2 E, C$ T7 o
  3. $ unzip -q commandlinetools-linux-6609375_latest.zip; r4 Z& N# y0 R. g
  4. $ rm -fv commandlinetools-linux-6609375_latest.zip8 p# P* M3 p7 G+ ^3 O
  5. $ export PATH=/opt/sdk/tools/bin:$PATH$ y! I% f# j8 j, c& E# D
  6. $ [ -z "${ANDROID_HOME}" ] && export ANDROID_HOME=/opt/sdk
    ) `. k8 z( }5 y: B& \  g
  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:
    ; s5 [9 ~1 V  e- x7 U$ R
  2.   Path                 | Version      | Description                     | Location            
    : |8 I7 ~6 z4 U  E
  3.   -------              | -------      | -------                         | -------              # Q7 [( O! N1 q. F) Z& r
  4.   build-tools;29.0.2   | 29.0.2       | Android SDK Build-Tools 29.0.2  | build-tools/29.0.2/  4 X6 u4 R/ f5 r. Z7 b0 L9 B; X% l- d% z
  5.   ndk-bundle           | 21.3.6528147 | NDK                             | ndk-bundle/         
    7 C& |7 ]/ o$ z. i) v) h  a
  6.   ndk;21.0.6113669     | 21.0.6113669 | NDK (Side by side) 21.0.6113669 | ndk/21.0.6113669/    * @! j0 l2 w+ \; z( N; l" E7 S6 z
  7.   patcher;v4           | 1            | SDK Patch Applier v4            | patcher/v4/          $ ], P2 w. n% C+ f3 X, m
  8.   platform-tools       | 30.0.3       | Android SDK Platform-Tools      | platform-tools/      . D7 g# S- T8 W1 U
  9.   platforms;android-29 | 4            | Android SDK Platform 29         | platforms/android-29/
    1 \+ a8 L5 X1 U' d. g
  10.   platforms;android-30 | 1            | Android SDK Platform 30         | platforms/android-30/% |: i  |5 l0 w. l4 _, \8 k
  11.   tools                | 2.1.0        | Android SDK Tools 2.1           | tools/               4 _& S. q/ l+ I7 u4 C
  12. Available Packages:
    * C- j  [$ F9 U. ?# ]# `* I
  13.   以下省略
复制代码
( |* \9 i( f; x% o# u, O
4. 安装 Rust 及其它目前 Rust 的最新版是 1.45.0。安装过程如下。5 Q( j) t# T5 l
  1. $ export RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo
    - a! D6 f$ w' F# f
  2. $ RUST_VERSION=1.45.0
    3 ?! ?7 L$ f# G, {
  3. $ RUSTARCH='x86_64-unknown-linux-gnu'" S; v3 t4 W5 I- e9 ], z
  4. $ wget -O /tmp/rustup-init "https://static.rust-lang.org/rustup/archive/1.21.1/${RUSTARCH}/rustup-init"
    & x$ r5 u& e% s7 z
  5. $ chmod 755 /tmp/rustup-init
    ; [; K! b# m' r6 w/ \
  6. $ /tmp/rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION  _2 k- U' y( O# I6 ^* k$ U/ C
  7. $ rm -fv /tmp/rustup-init- x  a- m3 K& T/ J) Q
  8. $ chmod -R a+w ${RUSTUP_HOME} ${CARGO_HOME}
    : w7 i  v8 E4 ~- @' o4 X
  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
    * i" W/ w" n- ]' c
  2. aarch64-linux-android1 Z2 A' R! ~$ }% H* n: V" @! E
  3. i686-linux-android& |' d8 C. a4 i
  4. x86_64-linux-android
复制代码
安装过程如下。
  1. $ rustup install stable, `4 G0 p% N# k0 ^
  2. $ rustup default stable0 b7 g8 p1 D3 h; l5 G' g
  3. $ rustup target add armv7-linux-androideabi
    6 X) B) S4 ^) }- z* o4 O, [7 `
  4. $ rustup target add i686-linux-android
    7 e2 B' B* W8 g
  5. $ rustup target add aarch64-linux-android* ~5 P( }; _% v! K( p" Q
  6. $ rustup target add x86_64-linux-android
复制代码

4 h0 R! o$ \0 l. G  Q) {) w5. 持久化环境变量上面的安装步骤是通过 export 来定义系统 PATH 的,在退出当前登录后就会丢失设置。
4 `- N) [/ q4 k+ W2 j8 [因此需要持久化一些环境变量。/ V/ l* g* A) `
编辑 ~/.bash_profile 文件。添加 ANDROID_HOME,RUSTUP_HOME,CARGO_HOME 的定义以及增加 PATH 定义。
6 l( c1 D, f( y! J最后呈现内容如下。& ^, r! d- y2 [9 S5 V$ a, @
  1. # .bash_profile' O# `* }8 C9 g9 k3 O% T
  2. ; S% q* j5 _2 G# O" a
  3. # Get the aliases and functions
    3 V7 z! o7 j" r$ Q" b
  4. if [ -f ~/.bashrc ]; then
    * X1 e. A8 v) q! _: e8 D
  5. . ~/.bashrc
    $ [/ F" ?) h1 h" U2 E6 ^& ^# \
  6. fi- p6 T; q2 v2 o0 H5 j

  7. * m4 ~( a" X. z, g
  8. # User specific environment and startup programs& R* P3 M- P( ~; Q6 c
  9. : r- P5 c# @( x$ ^: s$ {2 `( d
  10. export ANDROID_HOME=/opt/sdk RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo
    1 o4 O9 H! W# J5 [0 R

  11. ( i9 q2 ~/ R' ^% M) A- O; o/ y
  12. PATH=$PATH:$HOME/bin:$ANDROID_HOME/tools/bin:/usr/local/go/bin:/usr/local/cargo/bin
    3 ^, }! U: x2 v- ?* S
  13. + K+ ], n) o. ^6 {+ t) v6 Q
  14. export PATH
复制代码
" R6 w* u0 h- R
6. 编译 Android 项目这里选一个比较简单的项目来练手:v2ray-plugin-android
& ]. C8 V9 W* K8 f. h$ z2 f0 i编译过程如下。
, B4 \# W* V  e# U; u
  1. $ git clone https://github.com/shadowsocks/v2ray-plugin-android.git
    1 R4 j7 J( s! x# g, v$ `
  2. $ cd v2ray-plugin-android
    ) W0 i' C& [/ z4 G. v3 L2 ]; u
  3. $ git submodule update --init --recursive
    % U8 D3 s1 j, |2 v0 p' f- _. q
  4. $ ./gradlew assembleRelease
复制代码

  H7 C+ k2 v9 d完成后,编译好的 apk 文件位于 app/build/outputs/apk/release 路径下。
, z9 R' q5 ^: ?: O6 v3 [2 ~7 jAndroid 系统要求所有 apk 必须先使用证书进行数字签名,然后才能安装到设备上或进行更新。
0 _. }; S( ?. \! Y/ [6 _: B因此这些 apk 文件还不能被直接拿来安装。8 y0 ^' Z' a( y5 w7 [
至于如何签名,请参考以下链接,过程省略。5 R. V2 \4 r& [  R* Y
https://developer.android.com/studio/publish/app-signing
0 I/ ^; S; G9 f7 ?! x  L3 ~5 O7. 总结当你习惯于用命令行做事的时候,你会发现效率往往会有很大的提升。编译代码亦是如此。
4 f, U9 x8 A# ], r; Z4 A
$ j4 z/ c% w3 [: [  N
1 K+ e1 G: c+ V+ b, c! {0 ^
4 f; ~) W" S2 ?5 r
/ T1 z" [& e( \$ G3 S+ j
3 J' ?* l+ T! n2 W: @* l; {5 C8 k- U
& A  o; s' g7 }" ?

; h. W3 i" e3 ~7 F: |& }' x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|返回首页

GMT+8, 2024-12-23 21:09 , Processed in 0.112937 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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