Android源代码框架修改重建但在emulator中生效

Android源代码框架修改重建但在emulator中生效,android,build,android-emulator,android-source,Android,Build,Android Emulator,Android Source,我修改了/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中

我修改了/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中得到一个新的输出文件

然后我用make snod更新system.img

然后我尝试重新启动emulator,或者重新安装adb sync,或者终止系统服务器进程

但遗憾的是,无论我使用哪种方法,仿真器总是输出原始字符串

我甚至提取了新的output system.img以获得新的services.odex文件,并使用oat2dex.jar将其反编译为java代码,我确实看到字符串在其中发生了变化


那么为什么我运行emulator时,它不会生效…

emulator使用的系统映像文件是
system qemu.img
。 由于某些原因,该文件不是由
makesnod
生成的,它只生成
system.img
。我认为需要的是一个额外的目标,所以你可以说
makeqsnod
或其他什么,但似乎没有。我不知道怎么会有人能这样工作

目前,我对Makefile结构的理解还不够透彻,无法理解如何添加
qsnod
目标,但这里有一种手动滚动的方法
系统qemu.img

请注意,
make-nN
报告的最后一步是:

[100% 255/255] Create system-qemu.img
要了解它在那里运行的命令,可以说
makeshowcommands-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)"
这就是从input
system.img
生成
system qemu.img
的命令(这就是
make snod
生成的)

因此,在更改framework/base下的.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

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

应该是
框架
而不是
框架