仅替换framework.jar& Android MarshMallow上的相关库

时间:2016-03-15 07:47:33

标签: java android android-source

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

我的工作是修改Android Marshmallow框架源代码,完全构建然后更新到设备然后验证结果。每次大约需要1,2个小时。

如果我这样做1,2,3次就可以了,但实际上如果我的修改不起作用,我必须重复100次。但是我只在框架中修改了一小段代码/所以我认为如果我只能重新构建Android代码中的框架/模块并且只替换设备中的框架/部分,那么这将节省我很多时间。

我知道如何使用mmm来重建框架/模块。但我不喜欢'知道如何替换框架/部件在设备中,因为只需替换framework.jar在Marshmallow案例中不起作用。

1 个答案:

答案 0 :(得分:3)

假设您正在修改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. 设备已植根,adb push *.jar /system/framework/.

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

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

  7. 对您的框架所做的更改现在可能有效。如果目标设备是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代码本身获得大部分信息。

    希望它有所帮助。