1. 程式人生 >實用技巧 >其它 >Android 10.0 原始碼編譯

Android 10.0 原始碼編譯


技術標籤:android原始碼

編譯環境

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 系統。

微訊號