Android Studio 缓慢的增量构建

标签 android gradle android-gradle-plugin android-studio-3.0 incremental-build

我已经完成了许多步骤来改进我们的构建系统(those 等等)。后来看了这个official blogpost声称通过 Gradle 3.4 中的增量构建,构建时间缩短了 5-10 倍。事实上,我们的增量构建没有工作,因为我们使用了 annotationProcessors。由于 Gradle 4.7 annotationProcessors 可以 opt-in与增量构建兼容。我经历了许多依赖项更新以使用 annotationProcessors that support it 激活增量构建.

通过各种配置和改进,我能够将构建时间(预构建)从约 30 秒减少到约 19 秒。基于incremental build blogpost我假设我可以进一步将构建时间减少到 ~5 秒。

不幸的是,随着增量构建,它只下降到大约 15 秒。使用 --profile--info 我试图进一步诊断问题。仅提取 gradle 任务 compileDevDebugJavaWithJavac 它表明编译步骤从 ~16s 到 ~12s。

Incremental compilation of 476 classes completed in 12.51 secs.

在我看来,这对于单行更改来说太慢了,而且它几乎没有反射(reflect) Gradle 对增量构建的要求。我特别尝试更改几乎没有依赖项的文件,并且我知道公共(public)常量会触发完全重建。还有什么会导致仅针对单个文件的增量构建如此缓慢?

我也尝试启用实验性功能

android.enableSeparateAnnotationProcessing=true

它确实有效并将我的构建分成两个编译步骤

compileDevDebugJavaWithJavac 6.777s

processDevDebugAnnotationsWithJavac 6.104s

我希望结合

org.gradle.parallel=true

这两个任务可能会并行运行,并且几乎是构建时间的一半。但显然并行处理在这里不起作用,是吗?

还可以做些什么来增加非常小的更改的构建时间?

编辑:我发现主要问题是我们有太多的类依赖,它总是触发 476 个类的编译(参见 this 问题)。因为我不希望在我们的遗留代码中解决足够的类依赖关系:我的问题仍然存在。项目是否可以enableSeparateAnnotationProcessing并行化或者是否有其他配置?

最佳答案

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

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

关于Android Studio 缓慢的增量构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54585625/

相关文章:

gradle - Gradle中的动态版本控制

android - 三个依赖的区别

java - Gradle项目中的Gradle项目?

android - 我无法将视频上传到 YouTube

android - Jetpack compose 的公开下拉菜单

android - 使用 Android 的 MediaPlayer 类播放资源视频

java - 如何在 Androidx 中更改首选项文本颜色

linux - Gradle 不显示任何控制台输出

android - 您上传的 APK 未使用上传证书签名 - 即使我使用的是 Google Play 签名

android - 设置输出文件名/Gradle 时不支持绝对路径