有人知道在 Android Marshmallow 设备上替换 Frameworks.jar 和相关库的步骤吗?
我的工作是修改 Android Marshmallow 框架源代码,进行完整构建然后更新到设备然后验证结果。每次大约需要1.2小时。
做1、2、3次还好,但实际上如果我的修改不起作用,我什至要重复100次。但我只修改了frameworks/中的一小段代码,所以我认为如果我可以在Android代码中仅重建frameworks/模块并仅替换设备中的frameworks/部分,这会节省我很多时间。
我知道如何使用mmm
仅重建框架/模块。但我不知道如何替换设备中的框架/部分,因为仅替换frameworks.jar 在棉花糖情况下不起作用。
假设您正在修改以下内容frameworks/base/ https://android.googlesource.com/platform/frameworks/base/+/marshmallow-release,因为它在哪里framework.jar
来自,我使用的步骤是:
如果您已经有完整的版本,请使用mm
在您要修改任何代码的目录中执行命令。它比mmm
因为它不会再次编译框架依赖项。
Go to <aosp-root>/out/target/product/<product-name>/system/framework/
目录并获取framework.jar
and services.jar
items.
Go to <aosp-root>/out/target/product/<product-name>/system/lib/
目录并获取任何libandroid*.so
file.
设备已经 root 后,adb push *.jar /system/framework/.
adb push *.so /system/lib/.
将设备恢复出厂设置并重新启动。
对框架所做的更改现在可能会起作用。如果您的目标设备是 64 位,请将上述目标上的 lib 替换为 lib64。
解释
上述步骤会根据我们在 AOSP 框架内修改的内容而有所不同。以下是每个文件内部内容的快速描述:
-
framework.jar
:应用程序可访问的API
-
services.jar
:管理器和系统服务的实现位于frameworks/base/services
.
-
libandroid*.so
:从本机代码 (C/C++) 生成的库,例如位于以下位置的 .cpp 文件frameworks/base/core/jni
.
但总的来说,每个Android.mk
框架内部将生成至少一个由以下名称命名的输出LOCAL_MODULE
变量和模块的类型取决于以下包含指令:
# JAR file
include $(BUILD_JAVA_LIBRARY)
# Library to be used by other modules
include $(BUILD_SHARED_LIBRARY)
# Executables
include $(BUILD_EXECUTABLE)
例如,frameworks/base/cmds https://android.googlesource.com/platform/frameworks/base/+/marshmallow-release/cmds/文件夹为其中的每个项目生成一个 Java 库和一个可执行文件,例如pm
通常用于通过 ADB 安装应用程序的命令。无论如何,规则是:Java 库转到/system/framework/
, 共享库转到/system/lib/
和可执行文件去/system/bin
.
更多官方信息关于Android.mk
可以被找寻到here https://developer.android.com/ndk/guides/android_mk.html#var,但它并没有涵盖 Android 构建系统使用的所有变量和宏,我从 AOSP 代码本身获取大部分信息。
希望能帮助到你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)