2014/05/16

Android 編譯方式 - Compile & Build

1.在編譯之前,當然要先把環境設置好

2.獲取原始碼是必須的

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 系统

沒有留言:

張貼留言