android 系統開發入門(二) mm 單獨模塊編譯調試說明

1.單獨編譯完成後會在out\target\product\平臺名稱\下生成相應的文件,此目錄下的文件對應機器內的相應路徑,如果是apk的調試,則一般通過mm之後會在system\app或者system\priv-app下生成相應的目錄下生成新的apk文件
1)system\app爲系統常用的apk的目錄,system\priv-app爲系統核心應用如launcher,setting,systemui等
2)有的平臺編譯會生成apk和odex兩個文件,實際是由於在系統編譯的腳本的地方加了odex配置,作用是開機過程中解析apk快點,加快開機速度,實際此種情況apk會是空殼,真正起作用的是odex文件,常規情況下可以看到apk只有幾KB,而odex文件會有幾M,如果有apk和odex生成的需要將相應的兩個文件都push到機器裏面去替換,通常執行mm之後都會有提示install之類的字段,告訴你最終是在哪個目錄下生成的新的文件
out\target\product\平臺名\system\priv-app\Settings\Settings.apk 編譯packages\apps\Settings

out\target\product\平臺名\system\priv-app\SystemUI\SystemUI.apk 編譯frameworks/base/packages/SystemUI
out\target\product\平臺名\system\priv-app\SystemUI\oat\arm\SystemUI.odex

out\target\product\平臺名\system\framework\services.jar 編譯framework/base/service
out\target\product\平臺名\system\framework\oat\arm\services.odex

out\target\product\平臺名\system\framework\framework-res.apk 編譯framework/base/core/res

out\target\product\平臺名\system\framework\framework.jar 編譯framework/base
out\target\product\平臺名\system\framework\arm\boot.oat
out\target\product\平臺名\system\framework\arm\boot.art
2.實際通過adb替換步驟如下,前期沒把握的時候可以自己加個自己的log,然後驗證自己push有沒有替換成功
adb root
adb remount 
adb push out\target\product\平臺名\system\priv-app\Settings\Settings.apk system/priv-app/Settings 
adb reboot
3.常見編譯無源碼apk的mk文件說明
LOCAL_PATH:= $(call my-dir)  
用於確定源碼所在的目錄,最好把它放在CLEAR_VARS變量引用的前面,因爲它不會被清除,每個Android.mk只需要定義
一次即可,表示LOCAL_PATH的值爲當前路徑的值,用於返回當前路徑
include $(CLEAR_VARS)   
它清空了很多以LOCAL_開頭的變量(LOCAL_PATH除外)。由於所有的MakeFile都是在一個編譯環境下執行的,因此
變量的定義理論上是全局的,在每個模塊編譯開始前進行清理工作是必要的。表示清空所有LOCAL_xxx的變量,不影響後面這些變量的使用
LOCAL_MODULE_TAGS := optional  表示該模塊在所有版本下都編譯
LOCAL_SRC_FILES := $(call all-subdir-java-files)   表示編譯的源代碼文件列表,添加所有的java 源文件
LOCAL_PACKAGE_NAME := jnisample   表示生成的apk的名稱,即此例爲jnisample.apk
LOCAL_JNI_SHARED_LIBRARIES := libtest   表示生成的so文件的名稱,此例即爲libtest.so
LOCAL_CERTIFICATE := platform 表示使應用獲得系統權限,即可以在源碼環境下編譯類似於sharedUserId="android.uid.system"
LOCAL_DEX_PREOPT := false  直接打包生成.apk 不會附帶生成.odex文件了 
include $(BUILD_PACKAGE)    每個編譯模塊都是以include $(CLEAR_VARS)開始,以include $(BUILD_XXX)結束
include $(LOCAL_PATH)/jni/Android.mk   表示編譯工程文件下面的jni/Android.mk文件
include $(call all-makefiles-under,$(LOCAL_PATH))   表示編譯工程內的所有mk文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章