在Android MarshMallow上仅替换framework.jar及其相关库

12

有人知道在安卓Marshmallow设备上替换frameworks.jar和相关库的步骤吗?

我的工作是修改安卓Marshmallow框架源代码,进行完整的构建,然后更新到设备并验证结果。每次都需要花费1-2个小时。

如果我只做1、2或3次这样的操作还好,但实际上,如果我的修改没有生效,我甚至需要重复100次以上的操作。但是,我只修改了frameworks/中的一小段代码,因此,如果我可以仅重建Android代码中的frameworks/模块并仅替换设备中的frameworks/部分,则可以节省很多时间。

我知道如何使用mmm仅重建frameworks/模块。但我不知道如何替换设备中的frameworks/部分,因为仅替换frameworks.jar在Marshmallow情况下不起作用。


你修改了“frameworks/”中的哪一部分?那里有很多模块。例如,framework.jar来自于位于“frameworks/base”存储库中的Android.mk。 - Perazzo
嗨@robin-chander,我编辑了我的原始答案并添加了更多细节,请检查它是否对您有帮助。 - Perazzo
@Perazzo - 我会测试你的建议。由于我只更改了Java代码,因此我正在推框架.jar,并且在KK和L上可以正常工作。我将测试是否在M上推送libs会有所不同。 - Robin Chander
如果您只修改了Java代码,那么可能只会影响JAR文件。您修改了哪些类?我们可以尝试跟踪覆盖它们的makefile。 - Perazzo
1个回答

8
假设您正在修改位于 frameworks/base/ 下的内容,因为这是 framework.jar 的来源,我使用的步骤如下:
  1. 如果您已经进行了完整构建,请在您修改任何代码的目录中使用 mm 命令。它比 mmm 更快,因为它不会重新编译框架依赖项。

  2. 进入 <aosp-root>/out/target/product/<product-name>/system/framework/ 目录并获取 framework.jarservices.jar 项目。

  3. 进入 <aosp-root>/out/target/product/<product-name>/system/lib/ 目录并获取任何 libandroid*.so 文件。

  4. 已经 root 设备,使用 adb push *.jar /system/framework/.

  5. adb push *.so /system/lib/.

  6. 恢复出厂设置并重新启动设备。

现在您所做的更改可能已经生效。如果您的目标设备是 64 位,请将上述目标替换为 lib64。

解释

上述步骤将根据我们在 AOSP 框架内所修改的内容而有所不同。以下是每个文件中包含的简要描述:

  • framework.jar:应用程序可以访问的 API
  • services.jar:位于 frameworks/base/services 下的管理器和系统服务的实现。
  • libandroid*.so:从本地代码(C/C++)生成的库,例如位于 frameworks/base/core/jni 的 .cpp 文件。

但是,通常来说,框架中的每个 Android.mk 都会生成至少一个由 LOCAL_MODULE 变量命名的输出,模块的类型取决于以下 include 指令:

# JAR file
include $(BUILD_JAVA_LIBRARY)

# Library to be used by other modules
include $(BUILD_SHARED_LIBRARY)

# Executables
include $(BUILD_EXECUTABLE)

例如,frameworks/base/cmds 文件夹为其中的每个项目生成一个Java库和可执行文件,例如通过ADB安装应用程序时常用的pm命令。无论哪种情况,规则是:Java库放在/system/framework/中,共享库放在/system/lib/中,可执行文件放在/system/bin中。

更多关于Android.mk的官方信息可以在这里找到,但它并未涵盖Android Build System使用的所有变量和宏,我从AOSP代码本身获取了大部分信息。

希望能对您有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接