i modify/framework/base/services/core/java/com/android/server/am/ActivityManagerService.java一些logcat输出字符串。
我尝试使用不同的方法来重建它:
从顶部文件夹或
mmm/framework/base -jN或
mmm/framework/base/services -jN
然后我在/out/target/product/generic_x86/system/framework/x86/services.odex中得到一个新的输出文件
然后我通过使斯诺德更新系统.img
然后我尝试重新启动模拟器,或adb 重新安装 adb 同步,或终止进程system_server
但遗憾的是,无论我使用哪种方法,模拟器总是输出原始字符串。(好生气(
我甚至提取了新的输出System.img来获取新的Services.odex文件,并使用Oat2dex.jar将其反编译为Java代码,我确实看到其中的字符串已更改。
那么为什么当我运行模拟器时,它不会生效......
模拟器使用的系统映像文件system-qemu.img
。 由于某种原因,该文件不是由make snod
创建的,这只会使system.img
。 我认为需要的是一个额外的目标,所以你可以说make qsnod
什么的,但似乎没有。 我不知道怎么有人能这样工作。
在这一点上,我对 Makefile 结构的理解还不够好,无法弄清楚如何添加qsnod
目标,但这里有一种方法可以手动滚动system-qemu.img
.
请注意,make -nN
报告的最后一步是:
[100% 255/255] Create system-qemu.img
要找出它在那里运行的命令,您可以说make showcommands -jN
. 我这样做了,发现它是以下,在我的Macbook Pro上:
[100% 255/255] /bin/bash -c "(export SGDISK=out/host/darwin-x86/bin/sgdisk; device/generic/goldfish/tools/mk_qemu_image.sh out/target/product/generic_x86_64/system.img)"
所以这是从输入system.img
进行system-qemu.img
的命令(这就是make snod
所做的(。
因此,在框架/基础下更改.java文件后,我在机器上重建system.img
的秘诀是:
mmm frameworks/base -jN
make snod -jN
SGDISK=out/host/darwin-x86/bin/sgdisk device/generic/goldfish/tools/mk_qemu_image.sh out/target/product/generic_x86_64/system.img
然后,当我重新启动模拟器时,我看到我的更改已生效。