gpt4 book ai didi

java - 更改 dalvik/libcore 会导致重建整个框架

转载 作者:行者123 更新时间:2023-12-02 08:25:53 25 4
gpt4 key购买 nike

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

最佳答案

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

从 makefile 的角度来看,它不知道您在 core.jar 中更改了什么,以及重建依赖于 core.jar 的所有其他内容是否安全。它只是看到 core.jar 上的最后修改时间比依赖它的所有其他 jar/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(至少在 Gingerbread 中),模块名称位于 libcore/JavaLibrary.mk 中(实际上包含在 libcore/Android.mk 中)。该文件包含许多不同模块的定义,但第一个带有 LOCAL_MODULE := core 的模块负责构建 core.jar。其余的似乎主要是测试相关的模块。

关于java - 更改 dalvik/libcore 会导致重建整个框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4524904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com