【问题标题】:Changing dalvik/libcore causes rebuilding the whole framework更改 dalvik/libcore 会导致重建整个框架
【发布时间】:2010-12-26 10:40:44
【问题描述】:

我正在向 Dalvik libcore 方法添加一些拦截例程(例如,libcore/luni/src/main/java/org/apache/harmony/luni/platform/OSFileSystem.java 中的文件打开方法),我认为这只会改变基本共享库。但令我惊讶的是,每次修改后运行 make 时,它几乎都会重建框架的所有内容,例如计算器应用程序、W3C DOM 解析器等。修改。我想知道修改dalvik libcore后是否可以减少重建组件的数量?谢谢。

【问题讨论】:

    标签: java android dalvik


    【解决方案1】:

    实际上,更改 core.jar 会导致许多东西被重建,这并不奇怪。 core.jar 包含许多/所有核心 java 类,如 Object、String 等。因此,每个构建的其他 jar/apk 实际上依赖于 core.jar。

    从 makefile 的角度来看,它不知道您在 core.jar 中进行了哪些更改,也不知道是否可以安全地 重新构建所有这些依赖于 core.jar 的其他内容。它只是看到 core.jar 上的最后修改时间比依赖它的所有其他 jars/apk 更新,因此它全部重建它们。

    然而,诀窍是明确地告诉 make 你想要构建什么,而不是告诉它构建所有东西。

    假设您之前已经完成了完整的构建,您可以简单地做

    make core snod
    

    核心目标将专门为您的更改构建一个新的 core.jar,而不重建任何依赖于 core.jar 的内容。

    snod 目标(systemimage-nodeps 的缩写)将导致它将 out/target/product//system 中的所有内容重新打包到一个新的 system.img 中。这是在 build/core/Makefile 中声明的“特殊”目标。

    一般来说,特定 jar/apk 的目标只是该 jar/apk 的名称,没有扩展名。或者,您可以查看该模块的 Android.mk 文件,并找到模块名称,通常类似于 LOCAL_PACKAGE_NAMELOCAL_MODULE,具体取决于模块的类型。

    对于 core.jar(至少在姜饼中),模块名称在 libcore/JavaLibrary.mk 中(实际上包含在 libcore/Android.mk 中)。该文件包含许多不同模块的定义,但第一个模块,LOCAL_MODULE := core 是负责构建 core.jar 的。其余的似乎主要是测试相关的模块。

    【讨论】:

    • 太好了!但是我怎么知道我应该在这里使用哪个 make 参数(比如'core snod')?
    • 关于您的评论,我已在答案中添加了其他信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多