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

时间:2010-12-24 07:30:56

标签: java android dalvik

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

1 个答案:

答案 0 :(得分:2)

改变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.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的一个重要组件。其余的似乎主要是与测试相关的模块。