研究AndroidFramework源碼免不了要加入自己的模塊進行調試學習。這裏將會介紹如何加入自己的模塊,並將相應的模塊push到真機上進行調試
編寫Android.mk
具體在哪裏編寫呢?
這裏先解釋一下目錄的含義
/home/kevin/Downloads/cm13htcm9
我下載的cm源碼所在的目錄
/home/kevin/Downloads/cm13htcm9/packages/apps/Hello
我通過AndroidStudio創建的一個Hello工程。目錄結構是studio的目錄結構。
首先通過參考其他系統自帶app的目錄結構我們可以發現。
目錄結構一般都是這樣(這裏是系統自帶計算器的源碼目錄)
這是之前eclipse的結構了,而我們現在使用的集成開發工具是AndroidStudio,目錄結構有所不同。
一般我就放在app這個module下。具體路徑如下
/home/kevin/Downloads/cm13htcm9/packages/apps/Hello/app/src/main
編寫mk
可以直接將系統自帶的app拷貝過來修改。
這裏貼上我的Hello項目所編寫的Android.mk
#必備的兩行,聲明LOCAL_PATH變量,也就是當前的路徑
#並清除其它變量
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#包名,這生成的apk名字。這裏的話會生成Hello.apk
LOCAL_PACKAGE_NAME := Hello
LOCAL_CERTIFICATE := platform
#如果使用的系統的包,需要引入他們使用的資源文件,否則會提示編譯資源找不到的錯誤
LOCAL_RESOURCE_DIR += $(LOCAL_PATH)/res
LOCAL_RESOURCE_DIR += frameworks/support/v7/appcompat/res
#LOCAL_RESOURCE_DIR += frameworks/support/v7/gridlayout/res
#LOCAL_RESOURCE_DIR += frameworks/support/v7/recyclerview/res
#指定該模塊的編譯版本爲optional
#user: 指該模塊只在user版本下才編譯
#eng: 指該模塊只在eng版本下才編譯
#tests: 指該模塊只在tests版本下才編譯
#optional:指該模塊在所有版本下都編譯
LOCAL_MODULE_TAGS := tests
#源碼所在目錄,這裏就在當前位置的java目錄下。所以直接寫java
LOCAL_SRC_FILES := $(call all-java-files-under, java)
#LOCAL_SRC_FILES += \
# src/xx/xx/xx/XxxOne.aidl \
# src/xx/xx/xx/XxxTwo.aidl
#依賴的jar包,包括系統的和第三方的(放在libs目錄)jar包
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4 \
android-support-v7-appcompat
#android-support-v7-recyclerview
#混淆文件名
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
#關閉混淆
LOCAL_PROGUARD_ENABLED := disabled
LOCAL_AAPT_FLAGS := --auto-add-overlay
LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.appcompat
#LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.gridlayout
#LOCAL_AAPT_FLAGS += --extra-packages com.android.datetimepicker
#LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.recyclerview
#打包成apk
include $(BUILD_PACKAGE)
include $(call all-makefiles-under,$(LOCAL_PATH))
編譯
mmm packages/apps/Hello/app/src/main/
通過adb推送到手機
修改system分區爲可讀寫
adb shell
mount -o remount,rw /system
exit
通過命令adb push來寫入手機的系統文件夾了。
cd 到我們編譯模塊生成目錄執行命令(在編譯完之後終端會輸出生成的模塊所在目錄)
我這是
/home/kevin/Downloads/cm13htcm9/out/target/product/generic/data/app
中的Hello目錄
adb push Hello /system/app/
重啓
adb reboot
重啓之後就可以看到App已經安裝了
調試
我是直接將工程新建在android源碼目錄下的(packages/apps/)。
直接用AndroidStudio打開Android源碼工程就可以調試了
加入斷點
選擇調試進程