aosp12/13/14模拟器如何进行单模块更新-安卓Framework开发实战小技巧

234 阅读2分钟

背景:

在学习framework开发入门时候,大部分人都跟着马哥使用aosp自带的模拟器进行开发,当时我们一般有一点代码修改都是直接make,即make整个系统镜像,然后再进行emulator运行模拟器来验证效果。这种方式说是对于性能好的机器来说其实没啥影响,因为aosp编译耗时一般都是在第一次编译时候,后期修改热编译都是一般修改差量部分,所以大部分时间也都在1-2分钟既可以完成系统整编。

但是也有的公共模块,可能自己公共模块修改了会影响其他模块也要进行编译,因为其他模块可能对他有依赖, 这个情况编译可能最长会到达20分钟。 基于以上的问题,很多同学提出是否可以让模拟器和手机一样进行单模块编译,编译了单模块再进行单模块push,验证。这种方式在手机上其实是非常非常常见的方案,因为手机整编一次非常耗时间,不到迫不得已一般都是进行单模块编译,因为framework开发的大部分同学都是只进行framework.jar和services.jar等模块修改。

进行探索实战:

那么上面基于上面单模块编译然后push要求,我们在模拟器上进行一个尝试。 1、直接emulator然后进行

emulator

adb root

adb remount

adb push out/target/product/emulator_x86_64/system/framework/services.jar /system/framework/services.jar 在这里插入图片描述 上图可以发现报错了

adb: error: failed to copy 'out/target/product/emulator_x86_64/system/framework/services.jar' to '/system/framework/services.jar': remote couldn't create file: Read-only file system

大概意思说属于read-only的file system

是否有其他解决方法呢? 使用emulator -help命令看到线索 在这里插入图片描述 有一个-writable-system可以让system等image变成可写 尝试一下:

emulator -writable-system

adb root 在这里插入图片描述让我们重启一次 emulator -writable-system 在这里插入图片描述 重启后就remount就成功了

push 修改验证:

修改wms代码

在这里插入图片描述 进行编译push验证 在这里插入图片描述 注意push目标目录要正确,而且要kill相关进程进行验证,这样就不需要再来重启模拟器了 验证效果: 在这里插入图片描述

一切完美生效,这样可以一些时间,比整编相比还是有很大优势。

总结

1、单模块编译更新,需要我们对自己模块修改后编译生成对应的so,apk,jar很熟悉,这样我们才可以考虑单模块编译push,如果不清楚的话请大家还是整编最为保险,以防出现不生效啥的情况

2、每次启动模拟器要带上emulator -writable-system,而且第一次adb remount要进行重启生效

更多framework技术干货,请关注公众号“千里马学框架”