Android9.0 mm编译遇到的一些问题
最近在Android 9.0 源码上修改些文件,遇到的一些问题,简单记录下~
------------------------------------------------------------------------------------------------------------------------------
问题
1、单独模块下mm编译报错?
2、make单独编译某个模块,生成的so库文件,adb push进机器后,重启,发现系统里面还是原来的文件,so没有更新成功?
3、make 编译img的时候,发现修改的文件是编译打包在vendor.img里面,而之前在Android 7.1 、5.1、4.4 上,修改同样目录下的文件,make编译是打包在system.img下的?
我修改的文件是在 android/hardware/qcom/camera/QCamera2下,按照之前的经验,该目录下的文件编译是打包在 /sysetem/lib/hw/camera.***.so 中,不过Android 9.0 是有区别的,是生成在/vendor/lib/hw/下的,我们可以看下该目录下的mk文件,有个 LOCAL_VENDOR_MODULE := true 的属性,就表示是生成在/vendor目录下的。
在该目前下,mm编译的时候,会发现报错,提示 HAL3/test 目录下有些变量的定义没有使用到,如果make编译就不会有该问题,HAL3/test目录下的文件,是一些测试程序相关的文件,我们可以把HAL3/test 目录下的Android.mk文件重命名程其他名字,不编译该目录下的文件即可,我一般就重命名程Android.mk.backup。
mm编译的时候,还有个问题就是,编译的过程中需要引用到一些其他的模块的文件,如果其它模块没有编译过,那么这是m m编译也是不通过的。这时就可以通过make来编译单独的module,比如我修改的,在Android.mk里面,我们知道Module是 camera.msm8953, 所以返回到源码 android目录下,make camer.msm8953 就可以了,这样编译也是很快的,一般几分钟就可以搞定。
在Android 9.0 上,会发现编译生成这个camera.msm8953 后,adb push 到机器/vendor/lib/hw下后,重启,发现camera.msm8953 还是之前的文件,也就是没有修改成功,而adb push 进去的时候,是确认push成功的了。这时就需要先执行下adb disable-verity ,再执行push操作,文件就可以替换成功了。
(adb disable-verity 说是关闭调试环境下的dm-verity 检查,我的理解是,文件的读写权限问题吧,就是默认是不允许修改某个文件的,不过为啥adb push进去的时候,也不提示权限问题呢,难道是因为执行了adb root,adb remount)
好了,文章开头的3个问题就有答案了:
1、单独模块下mm编译报错?
----- 把编译出错的,没有用到的模块下的代码先不编译,如果是需要引用到其它模块的文件,则可以通过make + module来编译;
2、make单独编译某个模块,生成的so库文件,adb push进机器后,重启,发现系统里面还是原来的问题,so没有更新成功?
------ adb push 之前,先执行下adb disable-verity,有时可能adb root 、adb remount也得用上;
3、make 编译img的时候,发现修改的文件是编译打包在vendor.img里面,而之前在Android 7.1 、5.1、4.4 上,修改同样目录下的文件,make编译是打包在system.img下的?
------ 这个就得仔细看下Android.mk里面的内容了,如果指点是 LOCAL_VENDOR_MODULE := true 的,那就是打包进vendor.img 的。
---- 2019-08-26 15:16 深圳 ----
欢迎关注我的个人公众号,公众号会记录自己开发的点滴,还有日常的生活,希望和更多的小伙伴一起交流~~