文章
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 指令
  • 建議編寫一些簡單的腳本方便自己執行命令

參考資料連結

  1. tmux
  2. tee
  3. rclone
  4. 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

  1. 編譯過程遇到 FAILED 的時候,可以嘗試去看看哪個檔案造成的,它會寫在 FAILED 的後方
  2. 如果真的遇到自己無法解決的問題,可以加入這兩個 Telegram 群組 Android Building Help RomDevelopment
  3. 快速上手 Android Custom ROM 適配 - Prebuilt Vendor
  4. 等我想到還有什麼問題再加上來

聯絡我

tags: Android Recovery 編譯 第三方 教學
本文章以 CC BY 4.0 授權