如何編譯 Build Android AOSP

記錄下 Android 要怎麼編譯 build AOSP (Android Open Source Project)。

1
2
3
$ source build/envsetup.sh
$ lunch
$ make -j4

source build/envsetup.sh 之後才能用 mm 或 mmm 指令。
lunch 後面可接 target。
要跑模擬器的話選擇 lunch aosp_arm-eng 然後 make 完後下 emulator 指令。

aosp_arm-eng 的 aosp_arm 是產品名稱,後面的 eng 是 engineer 的意思,另外還有 user、userdebug

Buildtype 說明
user 編譯出來的系統有一定的權限限制, 常用於產品發佈階段
userdebug 編譯出來的系統有 root 權限, 常用於開發測試除錯
eng engineer 版本

make -j4-j4 是代表讓電腦使用幾個執行緒進行編譯,這樣能提高編譯速度,這個值取決於開發機器的CPU數、核心數與執行緒數,以四核心CPU的電腦為例,就可以使用 -j4 這參數,
如果CPU有支援超執行緒(HT, Hyper-Threading)的話就可以使用 -j8

要編譯單一模組的話,可以在 make 後面加上模組名稱,以下為常用的模組:

make <目標模組> 說明
make kernel 編譯 kernel,輸出 boot.img
make bootimage 產生 boot.img
make userdataimage 產生 userdata.img
make recoveryimage 產生 recovery.img
make cacheimage 產生 cache.img

產出的 boot.img、system.img 在out/target/product/目錄下
接下來就介紹一下 Android 的各種映像檔

Android 的映像檔

名稱 說明
boot.img 包含kernel啟動參數, kernel等多個元素?
ramdisk.img 一個小型的檔案系統, 是 Android 系統啟動的關鍵
system.img Android 的, framework 也在這裡, 將被掛載到 /system 目錄下
recovery.img 「救援模式」時使用的映像檔
cache.img 緩衝區, 將被掛載到 /cache 目錄下
misc.img 各種雜項
userdata.img 各程式的資料儲存地,將被掛載到 /data 目錄下
metadata.img
vendor
radio
tos

參考
[1] Building Android | Android Open Source Project
https://source.android.com/setup/build/building
[2] 理解Android編譯命令- Gityuan博客
http://gityuan.com/2016/03/19/android-build/
[3] Partitions and Images | Android Open Source Project
https://source.android.com/devices/bootloader/partitions-images
https://blog.csdn.net/tuhuolong/article/details/44681037
https://www.twblogs.net/a/5b8e41662b7177188343df5e