標籤:exec current str 定義 pre set dir 命令 The
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根目錄下配置環境
#source build/envsetup.sh 要確保當前根目錄下有envsetup.sh指令檔
#lunch ... 對工程的選擇
#cd (要編譯模組所在的目錄)
#mm(mma、mmm、mmma) -B -j2 2>&1 開始編譯模組
註:-B表示編譯模組的所有檔案,-j2表示編譯的時候開啟兩個線程,2>&1表示將錯誤切換到輸出(輸入為0,輸出為1,錯誤為2)。
envsetup.sh指令檔裡包含vendorsetup.sh 、lunch、 m mm mmm的定義
mmm 和 mm 區別:
mmm package/apps/DeskClock
cd package/apps/DeskClock ,然後再mm
Android 編譯時間:m、mm、mmm、mma、mmma的區別