Android Framework学习——如何加入并编译自定义的模块

研究AndroidFramework源码免不了要加入自己的模块进行调试学习。这里将会介绍如何加入自己的模块,并将相应的模块push到真机上进行调试

编写Android.mk

具体在哪里编写呢?

这里先解释一下目录的含义

/home/kevin/Downloads/cm13htcm9 我下载的cm源码所在的目录
/home/kevin/Downloads/cm13htcm9/packages/apps/Hello 我通过AndroidStudio创建的一个Hello工程。目录结构是studio的目录结构。

首先通过参考其他系统自带app的目录结构我们可以发现。
目录结构一般都是这样(这里是系统自带计算器的源码目录)
Android Framework学习——如何加入并编译自定义的模块_第1张图片
这是之前eclipse的结构了,而我们现在使用的集成开发工具是AndroidStudio,目录结构有所不同。
一般我就放在app这个module下。具体路径如下
/home/kevin/Downloads/cm13htcm9/packages/apps/Hello/app/src/main
Android Framework学习——如何加入并编译自定义的模块_第2张图片

编写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/

Android Framework学习——如何加入并编译自定义的模块_第3张图片

通过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源码工程就可以调试了

加入断点
Android Framework学习——如何加入并编译自定义的模块_第4张图片

选择调试进程

这里写图片描述

Android Framework学习——如何加入并编译自定义的模块_第5张图片

Android Framework学习——如何加入并编译自定义的模块_第6张图片

你可能感兴趣的:(android)