Android 10.0 原始碼編譯
編譯環境
macOS 13寸,2020款,CPU:2.3 GHz 四核;記憶體:32 GB;三星 T7 固態硬碟 500G ( mac 的硬碟過於昂貴,為長治久安計,接納了大佬朋友的建議,使用了行動硬碟。)。
實測:
編譯 aosp_arm-eng ,需要 1.7 小時左右。編譯 aosp_x86_64-eng 耗費了 3.5 小時左右。
解決錯誤時偶遇一位大佬,使用的是 15 款 mac pro,大概編譯了 8H 左右!各位同學編譯時要對這個時間做好心理建設~
請開啟 macOS 自帶的 “磁碟工具” ,選中自己的行動硬碟/ 自己本身的電腦硬碟分割槽出來一份,點選抹掉,並且選中 “Mac os 擴充套件 (區分大小寫,日誌式)”。
tips:記得備份硬碟已經存在的重要資料,此操作會刪除選中硬碟 or 分割槽所有資料。
環境搭建
Android 系統的原始碼統一由 repo 管理,Android 7.0 之後系統的構建由 GNU Make 逐漸改為 Soong 。
文件整理資料參考於:清華大學開源軟體映象站 、原始碼控制工具、谷歌官方構建文件、以及幾位大佬的指導。
下載 xcode
因為編譯使用到 clang ,所以需要下載 xcode。 xcode 大概有:15G 左右。
執行命令:xcode-select --install 或者去 App Store 直接下載 xcode。
設定檔案描述符數量上限
我似乎沒遇到這個問題,但是大家還是加上吧。畢竟編譯倆小時了突然失敗,還是很難受的。
執行 vi ~/.zshrc 或者 vi ~/.bash_profile ,最後新增下面兩行:
set the number of open files to be 1024
ulimit -S -n 1024
切換當前 python 3 環境為 python 2.x
因為:Repo 是基於 Python 2.x 中的特定功能構建的,與 Python 3 不相容。要使用 Repo,請安裝 Python 2.x:
Repo 下載
mkdir ~/bin // 在根目錄下建立 bin 目錄。此處複製自文件,其實你建立啥名字,在哪個目錄都行。
PATH=~/bin:$PATH // 將此目錄加入環境變數。(也可以 vi ~/.zshrc or vi ~/.bash_profile 自己加入)
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo // curl 下載 repo 到 bin 目錄
chmod a+x ~/bin/repo // 給與 repo 檔案可執行許可權。a 是針對所有使用者,x 是可執行許可權。
tips:
如果科學上網工具不給力,建議使用清華源。
替換方式:
export HTTP_PROXY=https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/
export HTTPS_PROXY=https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/
設定 git 賬戶
不設定會報錯,強制的。
git config --global user.name "你的名字-git 賬戶"
git config --global user.email "你的郵箱"
建立目錄
切換到需要同步原始碼的硬碟/分割槽對應的目錄下
mkdir WORKING_DIRECTORY // 名字可以自己起一個喜歡的,我這裡遵從官方文件。
cd mkdir WORKING_DIRECTORY
初始化倉庫
使用清華源:
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
牛人請用谷歌官方提供地址:
repo init -u https://android.googlesource.com/platform/manifest
選擇 Android 原始碼版本
-b 後面是你需要同步的原始碼標記,谷歌提供了這些版本可以下載:可選列表
我這裡要編譯 10.0 ,選擇了:android-10.0.0_r42
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r42
同步原始碼
這一步操作完,基本不會報錯了,剩下的就是等待。我自己同步大概需要:3.5 H 左右。
repo sync
構建
tips:此步驟可能會遇到一堆問題。具體問題可具體討論~
切換 shell 到 WORKING_DIRECTORY 下
初始化環境
source build/envsetup.sh or . build/envsetup.sh
選擇目標
直接執行 lunch ,命令列會列出所有可以編譯的架構。我這裡選擇 aosp_x86_64-eng ,編號 24。
lunch 24
開始構建
ps: 這一步會有很多問題~ 再議~
m or make
tips: m/make 有一個引數:-j ,設定並行任務數。不設定的話 x一般取你的cpu核心數*2+2(谷歌文件未找出對應說明,這裡是從其他作者部落格上看到的。)實測如果直接 m/make,在同時使用 Android Studio 時我電腦 cpu 會被打滿……
這裡建議單獨抽時間來編譯,不要影響正常的電腦使用。
編譯完成後直接在命令列執行
emulator
即可啟動模擬器執行剛編譯好的 android-10.0.0 aosp_x86_64-eng 架構的 Android 系統。

