Android 第三方 Recovery 繁體中文編譯教學
Android 第三方 Recovery 繁體中文編譯教學
從零開始的編譯指南
挑選一個想要編譯的 Recovery
先備知識
- Linux 終端指令語法
- git 指令(至少需要基礎的能力)
- 永不放棄的心
- 一顆清晰的頭腦
配置一台主機
- CPU:至少4核心,建議8核心
- RAM:至少4GB (Android 10),建議配置8GB以上
- 儲存空間容量:至少50GB,建議100GB
- 儲存裝置類型:HDD即可 (SATA 3),SSD更好
- 系統:初學者建議安裝 Ubuntu 18.04 LTS / Ubuntu 20.04 LTS
安裝必要的編譯套件
- Ubuntu 18.04 LTS
1
sudo apt install bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5 libncurses5-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev openjdk-11-jdk git vim repo libwxgtk3.0-dev
- Ubuntu 20.04 LTS
1
sudo apt install bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5 libncurses5-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev openjdk-11-jdk git vim
設定 git
1
2
git config --global user.email "您的e-mail"
git config --global user.name "您的名字"
同步 Recovery 原始碼
參考各個 Android Custom Recovery 的編譯 Manifest
本文皆以 Orange Fox Recovery Project 與 ASUS ZenFone 4 Max (X00I)進行舉例
- 先建立資料夾
1 2
mkdir -p ~/OrangeFox cd ~/OrangeFox
- 同步 Recovery 源代碼
1
repo init -u https://gitlab.com/OrangeFox/Manifest.git -b fox_9.0
1
repo sync -j8 --force-sync
更新原始碼
- 在這之後如果有需要更新原始碼,請使用 repo sync 進行同步(更新 Recovery 原始碼)
1
repo sync
- 待原始碼同步完成之後,還需要配置 TWRP Device Tree
同步 TWRP Device Tree
1
2
3
Example: git clone {url} -b {branch name} {directory}
git clone Github連結 -b 分支 device/品牌名/機型代號
範例如下:
1
git clone https://github.com/asusdevices/twrp_device_asus_X00I -b omni-9.0 device/asus/X00I
- 設定 Cache
1 2 3
export USE_CCACHE=1 export CCACHE_EXEC=/usr/bin/ccache ccache -M 50G
- 都把檔案放置完成後,可以開始進行編譯
1 2 3 4 5 6
cd OrangeFox source build/envsetup.sh export ALLOW_MISSING_DEPENDENCIES=true export FOX_USE_TWRP_RECOVERY_IMAGE_BUILDER=1 export LC_ALL="C" lunch omni_裝置代號-eng && mka recoveryimage
範例如下:
1 2 3 4 5 6
cd OrangeFox source build/envsetup.sh export ALLOW_MISSING_DEPENDENCIES=true export FOX_USE_TWRP_RECOVERY_IMAGE_BUILDER=1 export LC_ALL="C" lunch omni_X00I-eng && mka recoveryimage
編譯 Orange Fox Recovery Project 使用的參數
腳本
編譯 OFRP 腳本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#!/bin/bash cd OrangeFox . build/envsetup.sh export ALLOW_MISSING_DEPENDENCIES=true export LC_ALL="C" export OF_AB_DEVICE=0 export FOX_REPLACE_BUSYBOX_PS=1 export FOX_REPLACE_TOOLBOX_GETPROP=1 export FOX_USE_TAR_BINARY=1 export FOX_USE_ZIP_BINARY=1 export FOX_USE_NANO_EDITOR=1 export OF_DISABLE_MIUI_SPECIFIC_FEATURES=1 export OF_NO_TREBLE_COMPATIBILITY_CHECK=1 export FOX_DELETE_AROMAFM=1 export OF_USE_LOCKSCREEN_BUTTON=1 export OF_SUPPORT_OZIP_DECRYPTION=1 export FOX_ADVANCED_SECURITY=1 export OF_MAINTAINER=維護者名字 export TW_DEVICE_VERSION="R11.0" export FOX_VERSION=R11.0_0 export FOX_R11=1 export OF_USE_TWRP_SAR_DETECT=1 export TARGET_DEVICE_ALT="代號1,代號2" lunch omni_裝置代號-eng && mka recoveryimage
範例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash
cd OrangeFox
. build/envsetup.sh
export ALLOW_MISSING_DEPENDENCIES=true
export LC_ALL="C"
export OF_AB_DEVICE=0
export FOX_REPLACE_BUSYBOX_PS=1
export FOX_REPLACE_TOOLBOX_GETPROP=1
export FOX_USE_TAR_BINARY=1
export FOX_USE_ZIP_BINARY=1
export FOX_USE_NANO_EDITOR=1
export OF_DISABLE_MIUI_SPECIFIC_FEATURES=1
export OF_NO_TREBLE_COMPATIBILITY_CHECK=1
export FOX_DELETE_AROMAFM=1
export OF_USE_LOCKSCREEN_BUTTON=1
export OF_SUPPORT_OZIP_DECRYPTION=1
export FOX_ADVANCED_SECURITY=1
export OF_MAINTAINER=EdwardWu
export TW_DEVICE_VERSION="R11.0"
export FOX_VERSION=R11.0_0
export FOX_R11=1
export OF_USE_TWRP_SAR_DETECT=1
export TARGET_DEVICE_ALT="X00I,X00ID"
lunch omni_X00I-eng && mka recoveryimage
Happy Hacking!
其他注意事項
編譯 Recovery 是一個不小的工程
- 推薦在編譯的時候使用 tmux 指令去新增一個 session 以便把當前的工作階段保留在後台
- 如果要上傳檔案到雲端硬碟,推薦使用 rclone 上傳檔案
- 需要熟悉 git 指令
- 建議編寫一些簡單的腳本方便自己執行命令
參考資料連結
- tmux
- tee
- rclone
- git 修改 Commit 紀錄 剛才的 Commit 後悔了,想要拆掉重做… 追加檔案到最近一次的 Commit 同步遠端分支 Git 基礎 - 與遠端協同工作 rename git branch locally and remotely Git cherry-pick from another repository 使用 Git 時如何做出跨 repo 的 cherry-pick git 場景 :從一個分支cherry-pick多個commit 合併發生衝突了,怎麼辦? 下載Github上特定Repository內的資料夾
Q&A
- 編譯過程遇到 FAILED 的時候,可以嘗試去看看哪個檔案造成的,它會寫在 FAILED 的後方
- 如果真的遇到自己無法解決的問題,可以加入這兩個 Telegram 群組 Android Building Help RomDevelopment
- 快速上手 Android Custom ROM 適配 - Prebuilt Vendor
- 等我想到還有什麼問題再加上來
聯絡我
- Telegram:Edward Wu
- 行有餘力的話,可以考慮捐款給我 Paypal
- 同場加映 Android 第三方 ROM 繁體中文編譯教學
- GitHub : bluehomewu
- Email : bluehome.wu@gmail.com
tags: Android
Recovery
編譯
第三方
教學
本文章以 CC BY 4.0 授權