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

时间:2017-07-25 15:23:15

标签: android build android-emulator android-source

我修改 /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 个答案:

答案 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

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