找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 116|回复: 0

在 CentOS 7 下构建 Android 编译环境

[复制链接]

983

主题

83

回帖

5万

积分

管理员

积分
53122
发表于 2022-7-4 16:37:02 | 显示全部楼层 |阅读模式
9 {- d1 {' e! W- T' h
在 Android Studio 之外,还可以通过 Gradle Script 来编译 Android 项目并构建和测试应用。
6 s8 L5 o. P% D4 f* |4 `本文是一个备忘录,以记录我在 x86_64 GNU/Linux 系统 CentOS Linux release 7.8.2003 下折腾 Android 编译环境的一个过程。
+ O. }* C. W- R- A0 Z% I4 |* v; v4 L, H
本文将会安装以下组件:
  v6 R9 a* _4 \" t* \
  1. Git* A0 O9 [. e% k* h9 P: e
  2. JDK 1.81 |- k$ [. n1 L$ s( t" y( V% @
  3. Go 1.14.7
    $ B  ?$ _0 ]# X* k
  4. Android SDK" @+ V1 ^4 E+ y: M4 _
  5.   Android NDK
    ; N6 H/ j1 z4 p9 q: F5 B; J
  6. Rust 1.45.0
    ) q% @7 f9 H0 s; j$ E3 q
  7.   Android Targets:
    2 |$ H! O4 u! t9 D9 H
  8.     armv7-linux-androideabi
    2 z8 x2 X. c; Q$ V8 J5 h! R2 \, B3 I
  9.     aarch64-linux-android$ P& W: i" J# |9 e
  10.     i686-linux-android6 A3 z3 ?4 j4 a' s, M
  11.     x86_64-linux-android
复制代码
& ^- M+ @+ E% k( E: M+ ^2 G" z
以下的所有过程均是在 root 用户下操作。7 K1 M4 b. {" w/ X% }6 f3 m+ v; v' B
1. 安装 Git 和 JDK 1.8这两个组件发行版自带,通过以下命令即可安装。与此同时,再安装一些其他必要的组件 wget 和 unzip。
, T$ o( J2 J; i! 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"
    / c6 W! c% s$ G! D
  2. OpenJDK Runtime Environment (build 1.8.0_252-b09)9 T7 v7 f  Q  l* _
  3. OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
复制代码
  1. $ javac -version
复制代码
返回
  1. javac 1.8.0_252
复制代码

+ v" J, l9 D9 C0 Q2. 安装 Go目前 Go 的最新版是 1.14.7。安装过程如下。' a4 r! X/ g5 a8 l
  1. $ GO_VERSION=1.14.7
    ) j3 k$ C4 W' d& i& @6 t" f( E
  2. $ wget -O /tmp/go${GO_VERSION}.tar.gz https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz% f8 Q% g' s2 ]
  3. $ tar -C /usr/local -xzf /tmp/go${GO_VERSION}.tar.gz
    ! a  R5 Z- _9 j! j
  4. $ rm -fv /tmp/go${GO_VERSION}.tar.gz
    , b" P& I0 p. S2 S! |; }* _. f0 G
  5. $ export PATH=/usr/local/go/bin:$PATH
复制代码
完成后通过以下命令验证 Go 版本号。
  1. $ go version
复制代码
返回
  1. go version go1.14.7 linux/amd64
复制代码

, l  A8 H" P4 \. `1 B3. 安装 Android SDK 及 Android NDK假设 ANDROID_HOME 路径是 /opt/sdk。安装过程如下。7 w" z% f* L0 x# |
  1. $ mkdir -p /opt/sdk && cd /opt/sdk( `! k' H- l1 r6 F
  2. $ wget https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip
    7 N- f6 P7 q$ S. R9 Y
  3. $ unzip -q commandlinetools-linux-6609375_latest.zip* s8 k9 s# Y0 o; d
  4. $ rm -fv commandlinetools-linux-6609375_latest.zip0 L+ v2 ?- ?7 n$ D
  5. $ export PATH=/opt/sdk/tools/bin:$PATH% z4 e) s# g5 P, r$ w& p9 m1 q( ]: f
  6. $ [ -z "${ANDROID_HOME}" ] && export ANDROID_HOME=/opt/sdk' _: M9 U) _0 A+ z. \, b9 ]
  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:' m! z' }, g' T+ K6 M: t. z
  2.   Path                 | Version      | Description                     | Location            
    $ `, Y# o% |# L" G( Z+ Z- n
  3.   -------              | -------      | -------                         | -------              
    + L% T" o1 p: p, e% P- f: @
  4.   build-tools;29.0.2   | 29.0.2       | Android SDK Build-Tools 29.0.2  | build-tools/29.0.2/  2 J' r- U2 f" h' A- a
  5.   ndk-bundle           | 21.3.6528147 | NDK                             | ndk-bundle/         
    4 ~2 G& N- u$ ^
  6.   ndk;21.0.6113669     | 21.0.6113669 | NDK (Side by side) 21.0.6113669 | ndk/21.0.6113669/   
    1 ~) v2 z5 S4 ^/ r- O! J
  7.   patcher;v4           | 1            | SDK Patch Applier v4            | patcher/v4/          & O  P4 ^! p( [( E9 `% q1 \! w
  8.   platform-tools       | 30.0.3       | Android SDK Platform-Tools      | platform-tools/      
    6 y6 r4 V' y: h5 m" ]
  9.   platforms;android-29 | 4            | Android SDK Platform 29         | platforms/android-29/
    - F) W  {; O+ F1 [
  10.   platforms;android-30 | 1            | Android SDK Platform 30         | platforms/android-30/* y- U: [8 K( t& w! \- i- x. R, d
  11.   tools                | 2.1.0        | Android SDK Tools 2.1           | tools/               
    / D0 B' x" w% L0 U& G
  12. Available Packages:" b: ]6 v6 ^3 m5 X* {7 k
  13.   以下省略
复制代码
! j# i+ F) T! c+ o
4. 安装 Rust 及其它目前 Rust 的最新版是 1.45.0。安装过程如下。
. t- `2 P! c& ^0 s
  1. $ export RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo$ o; }9 ~: b  r7 H- `
  2. $ RUST_VERSION=1.45.0
    5 f  H+ c7 G& w. j5 t' P8 J
  3. $ RUSTARCH='x86_64-unknown-linux-gnu'7 ^' O% g" d0 C& \! R
  4. $ wget -O /tmp/rustup-init "https://static.rust-lang.org/rustup/archive/1.21.1/${RUSTARCH}/rustup-init"
    , d5 v6 Q! W# q1 `1 h
  5. $ chmod 755 /tmp/rustup-init& Z# Z% Z" M9 [1 Z+ ]8 z! H
  6. $ /tmp/rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION: L  s1 l5 o# a( u
  7. $ rm -fv /tmp/rustup-init
    % L- B0 H, y+ [( m
  8. $ chmod -R a+w ${RUSTUP_HOME} ${CARGO_HOME}- q, T2 H; @+ ^% v+ |
  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  a% ]) S3 l1 @' c& W! o
  2. aarch64-linux-android
    & }7 W8 O4 ~; Y  t
  3. i686-linux-android
    . k& I9 j+ [( Z6 B/ x' j
  4. x86_64-linux-android
复制代码
安装过程如下。
  1. $ rustup install stable- j5 P3 N" a9 r! i5 P- B. ^
  2. $ rustup default stable% C5 c/ U  p: w# |/ V
  3. $ rustup target add armv7-linux-androideabi0 B* K- u7 r( E& b
  4. $ rustup target add i686-linux-android
    # O9 M! s. m1 e! B: Y+ o" ^
  5. $ rustup target add aarch64-linux-android
    - B# a9 J$ l* Q/ ]- h0 Q% u+ ?
  6. $ rustup target add x86_64-linux-android
复制代码

" \  x0 U6 }7 C% E$ a1 w! a5. 持久化环境变量上面的安装步骤是通过 export 来定义系统 PATH 的,在退出当前登录后就会丢失设置。
1 X' H0 V# w/ s4 D3 a, k! \因此需要持久化一些环境变量。
3 [9 P# l, _! \8 c# Q; |+ E编辑 ~/.bash_profile 文件。添加 ANDROID_HOME,RUSTUP_HOME,CARGO_HOME 的定义以及增加 PATH 定义。
1 K0 ~" N: Y- F( q; S8 v! z" u5 q% o6 h最后呈现内容如下。
5 R9 [' S) a; H+ m
  1. # .bash_profile
    ! ]$ c. c: X/ u1 I8 R6 ~

  2. 6 C+ ]# G# {$ J. |: u. ?
  3. # Get the aliases and functions4 ^" J" X: |9 |# K* H
  4. if [ -f ~/.bashrc ]; then/ I+ c' ]7 f# K- W
  5. . ~/.bashrc
    ) Q, ?9 Q4 _, k2 e2 z  U8 Y4 Z* c
  6. fi
    1 _: S6 v: m+ u/ w% F1 d* _
  7. ! c3 c! ^; f/ a; ~9 E) [8 y! D
  8. # User specific environment and startup programs
    ! F! W" k% B! U- @
  9. , @2 N5 @1 |+ F/ n$ ~' g7 L
  10. export ANDROID_HOME=/opt/sdk RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo; u9 |8 r5 S7 y2 @" n( A
  11. 3 ~1 J# s4 T" e: K" c
  12. PATH=$PATH:$HOME/bin:$ANDROID_HOME/tools/bin:/usr/local/go/bin:/usr/local/cargo/bin6 L8 E( A, f! Q( i/ l9 n' ]
  13.   k- \4 W" l7 ~0 k5 u
  14. export PATH
复制代码

- B1 L! y; z2 `9 c% g) v6. 编译 Android 项目这里选一个比较简单的项目来练手:v2ray-plugin-android
5 u( u, ^) K; K  _8 [编译过程如下。
3 {" P  R; Z0 Z8 d
  1. $ git clone https://github.com/shadowsocks/v2ray-plugin-android.git2 u. X; w% A: r8 m' _
  2. $ cd v2ray-plugin-android
    ! d* G) u' D* _' W7 X# \* m3 [3 W
  3. $ git submodule update --init --recursive
    / H8 X4 S% |. A  ]3 w! \
  4. $ ./gradlew assembleRelease
复制代码
3 O" a, l! H+ ?8 z& [5 n, f3 \
完成后,编译好的 apk 文件位于 app/build/outputs/apk/release 路径下。9 e5 M4 y4 s  R
Android 系统要求所有 apk 必须先使用证书进行数字签名,然后才能安装到设备上或进行更新。4 h# c; B$ _1 [
因此这些 apk 文件还不能被直接拿来安装。: G. b& `: ?4 `
至于如何签名,请参考以下链接,过程省略。
9 a: k: T0 }( a# ?% V% ~# Bhttps://developer.android.com/studio/publish/app-signing- I+ K1 h& {8 y) y3 s8 q* ~
7. 总结当你习惯于用命令行做事的时候,你会发现效率往往会有很大的提升。编译代码亦是如此。  @0 l: R" F- O$ z4 [
7 l2 @0 {& F4 x0 Q1 B, U
. e# m7 d0 a7 A+ L3 b

9 b1 J) @9 v" ~( E5 v& A
. K; p/ K$ g; f! r0 W5 x; y3 T  o3 g0 S; e) a( P
% F1 |, j+ d6 T( O; U4 m) u
3 C' [  l) t; a  t

0 B' d. ~) g" k
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 20:28 , Processed in 0.087116 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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