有人知道在Android Marshmallow设备上替换frameworks.jar和相关库的步骤吗?
我的工作是修改Android Marshmallow框架源代码,完全构建然后更新到设备然后验证结果。每次大约需要1,2个小时。
如果我这样做1,2,3次就可以了,但实际上如果我的修改不起作用,我必须重复100次。但是我只在框架中修改了一小段代码/所以我认为如果我只能重新构建Android代码中的框架/模块并且只替换设备中的框架/部分,那么这将节省我很多时间。
我知道如何使用mmm
来重建框架/模块。但我不喜欢'知道如何替换框架/部件在设备中,因为只需替换framework.jar在Marshmallow案例中不起作用。
答案 0 :(得分:3)
假设您正在修改frameworks/base/
下的内容,因为它来自framework.jar
,我使用的步骤是:
如果您已经有完整版本,请在要修改任何代码的目录中使用mm
命令。它比mmm
快,因为它不再次编译框架依赖。
转到<aosp-root>/out/target/product/<product-name>/system/framework/
目录并获取framework.jar
和services.jar
个项目。
转到<aosp-root>/out/target/product/<product-name>/system/lib/
目录并获取任何libandroid*.so
文件。
设备已植根,adb push *.jar /system/framework/.
adb push *.so /system/lib/.
恢复出厂设置并重启设备。
对您的框架所做的更改现在可能有效。如果目标设备是64位,则在上面的目标上用lib64替换lib。
以上步骤将根据我们在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
的更多官方信息可以找到here,但它并未涵盖Android Build System使用的所有变量和宏,我从AOSP代码本身获得大部分信息。
希望它有所帮助。