我修改 /framework/base/services/core/java/com/android/server/am/ActivityManagerService.java 一些logcat输出字符串 .
我尝试使用不同的方法来重建它:
make -jN 来自顶级文件夹或
mmm /framework/base -jN 或
mmm /framework/base/services -jN
然后我在 /out/target/product/generic_x86/system/framework/x86/services.odex 得到一个新的输出文件
然后我通过 make snod 更新 system.img
然后我尝试重新启动模拟器,或 adb remount adb sync ,或杀死system_server进程
但遗憾的是,无论我使用何种方法,模拟器总是输出原始字符串 . (太生气了)
我甚至提取新的输出system.img以获取新的services.odex文件,并使用oat2dex.jar将其反编译为java代码,我确实看到字符串已更改 .
那么为什么当我运行模拟器时,它不会生效...
1 回答
模拟器使用的系统映像文件是
system-qemu.img
. 由于某种原因,该文件不是由make snod
制作的,只有system.img
. 我认为所需要的是一个额外的目标,所以你可以说make qsnod
或者什么,但是没有人知道任何人都可以像这样工作 .我现在还不太了解Makefile结构,以弄清楚如何添加
qsnod
目标,但这是一种手动滚动system-qemu.img
的方法 .请注意
make -nN
报告的最后一步是:要找出它在那里运行的命令,你可以说
make showcommands -jN
. 我这样做了,在我的Macbook Pro上发现了以下内容:所以这是从输入
system.img
(这是make snod
所做的)制作system-qemu.img
的命令 .所以,我在我的机器上重建
system.img
的方法,在框架/ base下更改.java文件后,是:然后,当我重新启动模拟器时,我发现我的更改已生效 .