Android 源代码框架修改重建,但在模拟器中生效



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

然后,当我重新启动模拟器时,我看到我的更改已生效。

最新更新