標籤:
原文網址:http://blog.csdn.net/androidlover1991/article/details/17014055
實際開發中,並不需要每次都編譯所有原始碼,只需要編譯自己修改的模組即可。
Android 的編譯系統提供了強大的機制支援單獨模組的編譯,而且十分簡單。Android 提供三
種方式用於編譯單獨模組 :
1.make 模組名
2.mm 來自於 envsetup.sh 指令碼中註冊的函數
3. mmm 來自於 envsetup.sh 指令碼中註冊的函數
下面將分別介紹這三種方法。
1.make 模組名
這種方法適合第一次編譯,會把相依模組一併編譯。它需要在全部原始碼中找到編譯模
塊的 Android.mk 檔案,並檢查相依模組是否有修改,因此編譯時間較長。使用這種方法,我
們只需要搜尋源碼目錄下的 Android.mk 檔案,找到模組名,然後指定給 make 即可。
(1)編譯應用程式層源碼
對於應用程式層程式,需要查看 Android.mk 檔案的 LOCAL_PACKAGE_NAME 變數。
例如,要編譯 Phone 應用程式的源碼,先查看 Phone 的 Android.mk 檔案,在終端中運行
以下命令 :
[email protected]:~/android/jellybean$ cat packages/apps/Phone/Android.mk
顯示 Android.mk 的內容如下 :
......(省略部分內容)
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := com.android.phone.common
......(省略部分內容)
LOCAL_PACKAGE_NAME := Phone
......(省略部分內容)
找到 LOCAL_PACKAGE_NAME 欄位,其值便是我們需要得到的編譯參數,即 Phone。
得到編譯參數後,在終端中運行如下命令便可單獨編譯 Phone 模組及其相依模組 :
[email protected]:~/android/jellybean$make Phone
(2)編譯架構層和系統運行庫源碼
對於架構層和系統運行庫,需要查看 LOCAL_MODULE 變數。
以 frameworks 包中的源碼為例,在終端中運行以下命令 :
[email protected]:~/android/jellybean$ find
frameworks -name Android.mk
該命令將搜尋 frameworks 目錄下所有的 Android.mk 檔案,列表如下 :
frameworks/media/libvideoeditor/lvpp/Android.mk
frameworks/media/libvideoeditor/osal/src/Android.mk
frameworks/base/cmds/app_process/Android.mk
......(省略其他部分)
以 app_process 為例,在終端中運行以下命令 :
[email protected]:~/android/jellybean$ cat
frameworks/base/cmds/app_process/Android.mk
顯示 Android.mk 的內容如下 :
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= app_process
include $(BUILD_EXECUTABLE)
LOCAL_MODULE 變數的值便是我們要找的模組名。在終端中運行以下命令 :
[email protected]:~/android/jellybean$make app_process
2.mmm 命令
該命令是 envsetup.sh 中註冊的函數,用於在源碼根目錄編譯指定模組,參數為模組的相對
路徑。只能在第一次編譯後使用。比如要編譯 Phone 部分源碼,需要在終端中執行以下命令 :
[email protected]:~/android/jellybean$mmm packages/apps/phone
3.mm 命令
該命令也是 envsetup.sh 中註冊的函數,用於在模組根目錄編譯這個模組。只能在第一次
編譯後使用。例如要編譯 Phone 部分源碼,需要在終端中執行以下命令 :
[email protected]:~/android/jellybean$cd packages/apps/phone
[email protected]:~/android/jellybean/packages/apps/phone$mm
注意 mmm 和 mm 命令必須在執行“.build/envsetup.sh”之後才能使用,並且只編譯發生變化的文
件。如果要編譯模組的所有檔案,需要 -B 選項,例如 mm -B。
【轉】模組編譯Android源碼方法