記錄下 Android 要怎麼編譯 build AOSP (Android Open Source Project)。
1 | $ source build/envsetup.sh |
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