首页 文章

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

提问于
浏览
1

我修改 /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

    模拟器使用的系统映像文件是 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 (这是 make snod 所做的)制作 system-qemu.img 的命令 .

    所以,我在我的机器上重建 system.img 的方法,在框架/ base下更改.java文件后,是:

    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
    

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

相关问题