## 前言
今天嘗試了下把 ShadowsockAndroid 工程自主編譯打包, 走了很多彎路, 試了好久才成功。 最後回過頭來看, 其實也很簡單。
## 前提條件
* Android系統6。0+的手機(Android SDK >= 23)
* 你的電腦已裝好 Git 環境
* 你的電腦已裝好 Rust 環境
## 步驟
### 檢查 Rust 環境
在命令列中執行 `rustup ——version` , 應該能得到如下的提示
```bash
rustup ——version
rustup 1。24。3 (ce5817a94 2021-05-31)
info: This is the version for the rustup toolchain manager, not the rustc compiler。
info: The currently active `rustc` version is `rustc 1。54。0-nightly (dbe459ded 2021-06-02)`
```
### 給 Rust 配置國內映象
* 新增環境變數
```bash
# 中國科學技術大學
RUSTUP_DIST_SERVER=https://mirrors。ustc。edu。cn/rust-static
RUSTUP_UPDATE_ROOT=https://mirrors。ustc。edu。cn/rust-static/rustup
```
將以上內容放到你的 `bash_profile` 中就可以了 (Windows 的話, 加到環境變數中就行)
* 修改 cargo 的配置檔案
找到 `~/。cargo/config` 檔案(如果沒有, 就自己建立一個, 同理, 在 Windows 上就是相應的位置, 個人目錄下的 `。cargo/config`), 加入以下內容
```yml
[source。crates-io]
replace-with = ‘ustc’
# 中國科學技術大學
[source。ustc]
registry = “git://mirrors。ustc。edu。cn/crates。io-index”
```
### 更新 Rust
這一步應該也不是必要, 根據實際情況, 自行判斷吧
命令列中執行如下命令:
更新 rustup 自身
```bash
rustup self update
```
更新 rust
```bash
rustup update
```
### Clone ShadowSocks
克隆 ShadowSocks
```bash
git clone https://github。com/shadowsocks/shadowsocks-android。git
```
倉庫的依賴別忘了更新
```bash
cd shadowsocks-android
git submodule update ——init ——recursive
```
### 新增 rust target
在 shadowsocks-rust 中新增target, 執行以下兩個命令:
```bash
cd core/src/main/rust/shadowsocks-rust
```
```bash
rustup target add armv7-linux-androideabi aarch64-linux-android i686-linux-android x86_64-linux-android
```
### 編譯 ShadowSocks
用 Android Studio 開啟工程 shadowsocks-android , 連線手機。
這裡要注意一點, shadowsocks-android 需要 JDK 11。
如果你的本機就是 JDK 11 , 那無事。
如果你的電腦是其它版本, 那麼你可以直接替換(重新安裝)本機 JDK 為 11。
同時還有一種方法, 在 Android Studio 中的工程設定中, 選擇 Android Studio 中內建的 JDK 11。
直接開始編譯吧。
理論上, 應該可以成功了。