Android makefile文件调试方法
来源:互联网 发布:淘宝店铺装修大学教程 编辑:程序博客网 时间:2024/06/09 19:56
最近有一个Bug问题,本以为解起来分分钟就可以搞定,却耽误了大半天。借这个机会,记录一下自己的学习心得。这里先来描述一下应用场景。
1.应用场景
ISP同事在调试af时需要将af一些配置文件(xml文件)读取到out目录下,但是有的工程在开发时是没有af功能的,所以就不许要添加这些配置文件。为了统一性,以及避免每个工程都要在拷贝环境变量中添加af的配置文件,所以在每个工程配置文件里面都统一添加了如下判断语句,这样我们只需要在BoardConfig.mk中配置对应宏就可以了,而不需要在每个工程下面,手动添加对应的文件了。目前使用代码如下:
CAMERA_AF_DEV_NOT_SUPPORT2 := $(shell grep AF_DEV_NOT_SUPPORT $(BOARDDIR)/BoardConfig.mk)ifeq ($(strip $(word 3,$(CAMERA_AF_DEV_NOT_SUPPORT2)),false)PRODUCT_COPY_FILES = \ frameworks/native/data/etc/android.hardware.camera.xml:system/etc/permissions/android.hardware.camera.xml \ frameworks/native/data/etc/android.hardware.camera.flash.xml:system/etc/permissions/android.hardware.camera.flash.xmlendif2.调试过程
上面的AF_DEV_NOT_SUPPORT是在BoardConfig.mk中定义的,一开始我直接引用这个宏,但是编译整个android代码后发现根本就没有将上面添加的android.hardware.camera.xml等2文件拷贝到对应的system/etc/permissions目录下,所以就有了下面的调试过程。下面可以看到Boardconfig.mk中我定义的一个宏。
//BoardConfig.mk................AF_DEV_NOT_SUPPORT := false............但是在project.mk中当中直接引用AF_DEV_NOT_SUPPORT时,我们得到的其实就是空值,其实调试时这里是可以添加调试代码的,我们不可以直接引用这个变量(具体原因应该是Boardconfig.mk的添加生效时间应该在project.mk之后,导致读取到的是空值),我们可以直接在对应的文件中搜索这个环境变量,如下
$(warning $(AF_DEV_NOT_SUPPORT))CAMERA_AF_DEV_NOT_SUPPORT2 := $(shell grep AF_DEV_NOT_SUPPORT $(BOARDDIR)/BoardConfig.mk)$(error $(CAMERA_AF_DEV_NOT_SUPPORT2))
注意这里有两个makefile打印函数
(1) warning:这里会在终端输出我们要打印的变量,只是输出一个警告信息,但是编译仍然可以继续
(2) error :这里同样会在终端中打印对应变量,但是编译走到这里就会终止。
上面添加之后就有输出结果:
device/google/project/project1/project1.mk:111: device/google/project/project1/project1.mk:113: : *** AF_DEV_NOT_SUPPORT := false. Stop.上面就可以看到我们已经获取到我们在BoardConfig.mk中定义的配置宏了,剩下的就是提取最后那个false关键字了。
其实makefile中已经在为我们准备一个函数word,word(n,str):其中的n就是我们要提取单次的序号(1开始),str就是我们要筛选的字符串组合
例如:$(word 3,$(CAMERA_AF_DEV_NOT_SUPPORT2))就可以得到最后的false。
最终调试代码:
test_name := armwind$(warning $(AF_DEV_NOT_SUPPORT))CAMERA_AF_DEV_NOT_SUPPORT2 := $(shell grep AF_DEV_NOT_SUPPORT $(BOARDDIR)/BoardConfig.mk)$(warning $(word 3,$(CAMERA_AF_DEV_NOT_SUPPORT2)))ifeq ($(strip $(word 3,$(CAMERA_AF_DEV_NOT_SUPPORT2)),false)PRODUCT_COPY_FILES = \ frameworks/native/data/etc/android.hardware.camera.xml:system/etc/permissions/android.hardware.camera.xml \ frameworks/native/data/etc/android.hardware.camera.flash.xml:system/etc/permissions/android.hardware.camera.flash.xml$(warning $(test_name))$(error $(PRODUCT_COPY_FILES))endif(注意的地方:PRODUCT_COPY_FILES 后面的反斜杠千万不要忘记了,要不然会报*** commands commence before first target. Stop.一定要注意啊)
结果:
上面的打印结果可以看到,都是按着我们想的那样进行的大家在调试makefile时,记得会用warning和error 标准函数就行了。至于其它makefile怎么写,其实android系统里有很多代码可以参考的。
0 0
- Android makefile文件调试方法
- Makefile常用调试方法
- android makefile文件批量复制文件的方法
- Makefile中的几个调试方法
- Makefile中的几个调试方法
- Makefile中的几个调试方法
- IDA调试Android so文件 JIN_onLoad方法
- Android Makefile 文件讲解
- Android Makefile 文件讲解
- Android makefile文件详解
- Android Makefile 文件讲解
- Android Makefile 文件讲解
- Android Makefile 文件讲解
- Android Makefile 文件讲解
- Makefile & Android.mk文件
- Makefile文件调试跟踪打印警告错误信息
- qmake生成Makefile文件方法
- Makefile 文件自动生成方法
- 文件上传-通过commons_FIleUpload实现
- 2016年腾讯校园招聘面试经验
- 一些环境配置问题
- 进化算法 遗传算法与粒子群算法之间的比较
- 如何处理大量数据并发操作
- Android makefile文件调试方法
- 不使用软件及硬件,电脑启动wifi,解决移动端通过电脑绑定host,无法访问服务器问题
- Flask学习总结笔记(1)-- 环境配置
- Nagios的启动与停止 查看初步配置情况
- 如何利用容器构建持续交付/持续发布系统? (有彩蛋)
- 常用滤波算法
- 栈及其应用
- MacOs + Virtualenv + ipython notebook下使用matplotlib
- Android逆向之旅---SO(ELF)文件格式详解