4

我已经通过许多步骤来完善我们的构建系统(这些以及更多)。后来,我阅读了这篇官方博文,声称在 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并行化还是有任何其他配置?

4

1 回答 1

1

与其担心增量方面,也许您可​​以进行一些优化来加快开发构建。你在用proguard吗?如果是这样,请为您的开发/暂存版本禁用它,并仅将其用于发布版本。

如果您已经这样做了-我不确定除了提高机器规格之外还有什么建议。

于 2019-02-08T03:38:27.263 回答