1.在編譯之前,當然要先把環境設置好
2.獲取原始碼是必須的
- 可以是從Google Android獲得, 或你的SOC Vendor給的
3.開始進入主題-編譯Android
- Android系統是以Linux系統與硬體溝通, 所以許多原理就與傳統的linux嵌入式系統非常相似, 只是有再改寫
- 3.1 根據Android建議的build步驟:
$ source build/envsetup.sh
*Initialize the environment with the envsetup.sh script.
初始化環境必須使用 envsetup.sh 腳本, 之後才能使用envsetup.sh裡面有定義的指令函數名稱,與加入處理器廠商的平台資訊*而且必須使用source方式執行腳本才行(這樣執行的話, 此腳本是在父程序中執行的,因此各項動作都會在原本的 bash 內生效!)
*雖然envsetup.sh裡面定義很多function長得不太像一般的shell script, 但它真的就是shell script, 還是一樣是從最上面開始循序執行下來, 只是在此檔後面會去使用檔案內較前面定義的function指令
$ lunch aosp_arm-eng
*看官方說明為android emulator且有debug功能
(DEVICE Build Name + BuildType)
此處的DEVICE Build Name 為 aosp_arm
此處的BuildType 為 eng*搜尋關於 aosp_arm 的makefile:
build/target/product/AndroidProducts.mk:50:
$(LOCAL_DIR)/aosp_arm.mk \
build/target/product/aosp_arm.mk:18:
PRODUCT_NAME := aosp_arm*若是其他處理器廠商
如MTK,Nvidia,Qualcomm,Marvell
應該是另外定義Makefile在device目錄底下$ make -j4
開始編譯!
但是系統怎麼找到要編譯的廠商檔案呢?
默认情况下编译系统认为TARGET_PRODUCT 是generic 的, 那如何编译特定产品的Android呢? - 3.2 在Android 輸入 make 之後
就像上面所說的, 設定好環境也選擇了編譯廠商的某產品
Android 怎麼去編譯? make -j4
Makefile
-> build/core/main.mk
-> build/core/config.mk
-> build/core/envsetup.mk
-> build/core/product_config.mk
持續撰寫中…
參考:
1. Android Makefile中是 如何识别 TARGET_PRODUCT 的
2. 理解 Android Build 系统