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

来源:互联网 发布:递推算法求韩信点兵 编辑:程序博客网 时间:2024/04/27 04:51

研究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.apkLOCAL_PACKAGE_NAME := HelloLOCAL_CERTIFICATE := platform#如果使用的系统的包,需要引入他们使用的资源文件,否则会提示编译资源找不到的错误LOCAL_RESOURCE_DIR += $(LOCAL_PATH)/resLOCAL_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目录下。所以直接写javaLOCAL_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 := disabledLOCAL_AAPT_FLAGS := --auto-add-overlayLOCAL_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#打包成apkinclude $(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源码工程就可以调试了

加入断点
这里写图片描述

选择调试进程

这里写图片描述

这里写图片描述

这里写图片描述

0 1
原创粉丝点击