Android Framework學習——如何加入並編譯自定義的模塊

研究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源碼工程就可以調試了

加入斷點
這裏寫圖片描述

選擇調試進程

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

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