m:編譯整個安卓系統
makes from the top of the tree
mm:編譯目前目錄下的子產品,目前目錄下需要有android.mk這個makefile檔案,否則就往上找最近的android.mk檔案。
builds all of the moudles in the current directory
mma:目前目錄新增或删除檔案後,可以用mma重新編譯。
mmm:編譯指定路徑下的子產品,指定的路徑下面需要有android.mk這個makefile檔案
builds all of the moudles in the supplies directory
mmma:指定目錄下新增或删除檔案後,可以用mmma重新編譯。
mmm指令 的編譯過程:
build/core/main.mk(是android編譯系統的入口檔案)
->build/core/config.mk(會定好編譯類型和目标檔案)
->build/core/definitions.mk(定義在編譯過程中用到的宏)
->one_shot_makefile->build/core/package.mk(編譯apk庫檔案)
->build/core/java_library.mk(編譯java庫檔案)
->build/core/static_java_library.mk(編譯java靜态庫檔案)
->build/core/shared_library.mk->build/core/dynamic_library.mk->build/core/binary.mk->build/core/base_rules.mk
( 計算一些基本變量的值,并建立一些基本的依賴規則)
->build/core/static_library.mk(編譯.a靜态庫檔案)
->build/core/executable.mk(編譯可執行檔案)
->build/core/prebuilt.mk(編譯已經預編譯好的第三方庫檔案)
->build/core/makfile(有system.img、boot.img、recovery.img等鏡像檔案生成規則)
環境變量one_shot_makefile中存放要編譯子產品的android.mk的檔案路徑,如果環境變量值為空,表示執行的是m或者make指令,會對android源代碼中的所有子產品進行編譯。
mm、mmm是類似的,都是用來編譯某些子產品。
使用這些編譯指令,首先需要在android根目錄下配置環境
[plain] view plain copy
#source build/envsetup.sh 要確定目前根目錄下有envsetup.sh腳本檔案
#choose... 對環境的選擇
#cd (要編譯子產品所在的目錄)
#mm(mma、mmm、mmma) -b -j2 2>&1 開始編譯子產品
注:-b表示編譯子產品的所有檔案,-j2表示編譯的時候開啟兩個線程,2>&1表示将錯誤切換到輸出(輸入為0,輸出為1,錯誤為2)。
envsetup.sh腳本檔案裡包含vendorsetup.sh 、lunch、 m mm mmm的定義