研究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源码工程就可以调试了
加入断点
选择调试进程