修改framework的部分代码,做一些特殊的事。基于AOSP 10.0
编译framework代码
当我们修改完成framework模块的代码之后,需要编译模块,我之前不知道可以直接单独编译和刷入手机的,导致浪费了很多时间。
修改完成代码保存之后,进入framework/base目录执行mm
前提是注入了aosp的环境变量。
source build/envsetup.sh
lunch xx
cd framework/base
mm
编译完成之后。
刷入手机验证
编译完成之后的产物目录
android-10.0.0_r41\out\target\product\blueline\system\framework\framework.jar
目录下有一个framework.jar(这个jar就是框架的代码)
里面都是dex,如果想看代码,可以去这个目录下看,就好像平时看第三方jar一样,导入as即可。
android-10.0.0_r41\out\soong.intermediates\frameworks\base\framework\android_common\jarjar\framework.jar
开始刷入。
adb root //获取root权限
adb disable-verity //关闭检测功能
adb reboot //关闭检测之后需要重启机器
重启机器成功之后:
adb root //再次获取root权限
adb remount //重启挂载system分区为可读写分区
推送framework.jar
adb root && adb remount
adb push framework.jar /system/framework
adb reboot
由于我关闭了dex优化,我这里就不需要删除什么odex和arm下面的东西。
如何关闭dex优化,看这个文章https://blog.csdn.net/Otaku_627/article/details/108441530
关闭之后需要全编译,建议在第一次编译系统的时候就关闭,后面更新jar方便多了,不会遇到卡开机问题。
我删除了某某服务中的一个方法,之前写了APP进行调用,现在删除方法之后,替换了framework的jar,再次调用
com.example.myapplication W/System.err: java.lang.NoSuchMethodException:
表示这个方法没有了,也就是成功修改并且替换了。
总结
1、方便后面修改模块和验证,建议从开始就关闭dex优化。
2、修改单个模块之后,去模块的目录下看看是否有mk文件,如果有在目录下mm编译即可。
3、刷入手机可能会失败,先准备好代码分支对应的官方刷机包,随时刷回去官方的,保证我们下次刷入自己编译的顺利。