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源码工程就可以调试了
加入断点
选择调试进程
- Android Framework学习——如何加入并编译自定义的模块
- Framework/base下添加自定义模块的编译
- 编译Framework/base 下添加自定义模块的步骤
- 关于加入NDK编译环境的方法以及如何加入PIE模块的编译选项
- 自定义android模块不编译的问题
- 如何把android framework源代码加入SDK
- 单独编译android framework模块出现的问题
- 如何编译android 4.1 的源码并在android的ADT里面调试framework相关的代码
- 如何在android系统中增加编译自定义模块
- 如何编译Android源码的单独模块
- 如何编译android 5.0的某个模块
- 编译nginx并加入 chunkin-nginx-module模块
- 编译nginx并加入chunkin-nginx-module模块
- 常规功能和模块自定义系统 (cfcmms)—050简易数据字典的加入和使用
- 常规功能和模块自定义系统 (cfcmms)—051一对多(OneToMany)字段的加入
- Android SDK编译 ——如何将自己源代码加入android.jar
- Android SDK编译 ——如何将自己源代码加入android.jar
- Android SDK编译 ——如何将自己源代码加入android.jar
- 二叉树查找x的祖先
- 【HDU1398】Square Coins 母函数
- 案例2_健康栏目的实现分析
- 【Linux基础】Linux/Windows下安装python、Numpy、Matplotlib
- 【集合框架】3. Map容器
- Android Framework学习——如何加入并编译自定义的模块
- java多线程-04-线程池
- 019 Remove Nth Node From End of List
- 每日一练--抽奖
- android系统级别硬件访问服务程序
- 二叉树的高度 java 利用递归和层次遍历两种方法
- 【集合框架】4. Set容器
- 一元多项式的加减
- mysql 常用命令