我已经通过许多步骤来完善我们的构建系统(这些以及更多)。后来,我阅读了这篇官方博文,声称在 Gradle 3.4 中通过增量构建将构建时间缩短了 5-10 倍。事实上,我们的增量构建不起作用,因为我们使用了 annotationProcessors。由于 Gradle 4.7 annotationProcessors 可以选择与增量构建兼容。我经历了许多依赖项更新,以使用支持它的 annotationProcessors激活增量构建。
通过各种配置和改进,我能够将构建时间(预构建)从约 30 秒减少到约 19 秒。根据增量构建博客文章,我假设我可以进一步将构建时间减少到约 5 秒。
不幸的是,随着增量构建,它只下降到大约 15 秒。使用--profile
,--info
我试图进一步诊断问题。仅提取 gradle 任务compileDevDebugJavaWithJavac
表明编译步骤从 ~16s 变为 ~12s。
476 个类的增量编译在 12.51 秒内完成。
在我看来,这对于单行更改来说太慢了,而且它几乎不能反映 Gradle 对增量构建的要求。我特别尝试更改依赖项很少的文件,并且我知道公共常量会触发完全重建。还有什么可能导致仅单个文件的增量构建如此缓慢?
我还尝试启用实验功能
android.enableSeparateAnnotationProcessing=true
它确实有效并将我的构建分成两个编译步骤
compileDevDebugJavaWithJavac 6.777s
processDevDebugAnnotationsWithJavac 6.104s
我希望与
org.gradle.parallel=true
这两个任务可能并行运行,几乎是构建时间的一半。但显然并行处理在这里不起作用,或者是吗?
还可以做些什么来增加非常小的更改的构建时间?
编辑:我发现主要问题是我们有太多的类依赖关系,它总是触发476个类的编译(见这个问题)。因为我不希望在我们的遗留代码中解决足够的类依赖关系:我的问题仍然存在。该项目可以enableSeparateAnnotationProcessing
并行化还是有任何其他配置?