背景

修改framework的部分代码,做一些特殊的事。基于AOSP 10.0

公众号地址:https://mp.weixin.qq.com/s/eNbePpJ-LU7D_Gt7YVKjrw

编译framework代码

当我们修改完成framework模块的代码之后,需要编译模块,我之前不知道可以直接单独编译和刷入手机的,导致浪费了很多时间。

修改完成代码保存之后,进入framework/base目录执行mm

前提是注入了aosp的环境变量。

1
2
3
4
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

开始刷入。

1
2
3
4
5
6
7
8
9
10
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,再次调用

1
com.example.myapplication W/System.err: java.lang.NoSuchMethodException:

表示这个方法没有了,也就是成功修改并且替换了。

总结

1、方便后面修改模块和验证,建议从开始就关闭dex优化。
2、修改单个模块之后,去模块的目录下看看是否有mk文件,如果有在目录下mm编译即可。
3、刷入手机可能会失败,先准备好代码分支对应的官方刷机包,随时刷回去官方的,保证我们下次刷入自己编译的顺利。

欢迎关注公众号:黄大官AOSP