我修改 /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代码,我确实看到字符串已更改。
那么为什么当我运行模拟器时,它不会生效...
答案 0 :(得分:1)
模拟器使用的系统映像文件是system-qemu.img
。
由于某些原因,该文件不是由make snod
生成的,而system.img
只生成make qsnod
。我认为所需要的是一个额外的目标,所以你可以说qsnod
或其他东西,但似乎并不是一个。我不知道任何人都可以像这样工作。
此时我还不太了解Makefile结构,以了解如何添加system-qemu.img
目标,但这是一种手动滚动的方式
make -nN
。
请注意[100% 255/255] Create system-qemu.img
报告的最后一步是:
make showcommands -jN
要找出它在那里运行的命令,你可以说[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)"
。我做了这个,发现它是我的Macbook Pro上的以下内容:
system-qemu.img
这样就可以从输入system.img
(这是make snod
制作的)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
命令。
所以,在我的机器上重建CollectionViewCell
之后,在框架/基础上更改.java文件后,我的配方是:
CollectionViewController
然后,当我重新启动模拟器时,我发现我的更改已生效。