我正在为Dalvik libcore方法添加一些拦截例程(例如libcore / luni / src / main / java / org / apache / harmony / luni / platform / OSFileSystem.java中的文件打开方法),我认为只会更改基本共享库。但令我惊讶的是,每次我在修改后运行 make 时,它都会重建几乎所有框架,例如Calculator应用程序,W3C DOM解析器等。构建框架之后真的需要时间。修改。我想知道在修改dalvik libcore后是否有可能减少重建组件的数量?感谢。
答案 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_NAME
或LOCAL_MODULE
,具体取决于模块的类型。
对于core.jar(至少在姜饼中),模块名称在libcore / JavaLibrary.mk中(实际上包含在libcore / Android.mk中)。此文件包含许多不同模块的定义,但第一个模块LOCAL_MODULE := core
是构建core.jar的一个重要组件。其余的似乎主要是与测试相关的模块。