即使没有任何更改,Android 多模块 Gradle 构建也很慢

Posted

技术标签:

【中文标题】即使没有任何更改,Android 多模块 Gradle 构建也很慢【英文标题】:Android multi-module Gradle build slow even without any changes 【发布时间】:2017-10-30 13:44:08 【问题描述】:

我有一个包含多个模块的 android 项目,即使我尝试在不更改任何内容的情况下重新构建它,构建时间也很慢。

它的结构类似于:

有更多的“父”(和独立的父兄弟)和“功能”模块,但设置是图片的设置。

我的gradle.properties文件如下:

org.gradle.jvmargs=-Xmx4096m -Xms2048m
org.gradle.parallel=true
org.gradle.daemon=true
org.gradle.configureondemand=true

我使用的是 Gradle 版本 3.5 和插件版本 2.4.0-alpha7。

该项目还使用了 multidex(javaMaxHeapSize "4g"jumboMode true)、数据绑定、kotlin 和 java 以及几个注释处理器。

在构建时,我可以看到大多数项目的多个线程并行运行不同的任务,除了最终的“app”模块(我认为这是正常的)。

但是很多时间似乎都花在了不同的 ::compileJavaWithJavac 任务。即使不进行任何更改,在配备 16 Gb RAM 的 MacBook Pro i7 上构建也需要大约 30 秒。

如果我更改功能模块的方法中的一行代码(甚至不更改方法的签名),构建时间会超过 1:30 分钟。

现在是正常时间吗?我可以进一步优化以缩短构建时间吗?

我还检查了其他一些答案:

来自this one,设置preDexLibraries = false 没有帮助,我已经使用assembleDebug incremental = true 建议 here 不起作用,是 deprecated 禁用即时运行似乎有一点帮助,但作用不大 上面讨论的项目的构建风格已经设置了minSdkVersion 21

【问题讨论】:

您终于找到了构建时间过长的罪魁祸首吗?我也遇到过类似的问题。 这真是浪费了谷歌的生产时间,谷歌应该发布清晰的文档当Android应用程序中有多个模块时的方法以及如何提高速度 【参考方案1】:

您应该尽可能使功能模块独立,并且与其他模块的任何依赖关系请考虑存根。一种只包含接口 feature1 -> featureonestub->feature2

的代理

【讨论】:

以上是关于即使没有任何更改,Android 多模块 Gradle 构建也很慢的主要内容,如果未能解决你的问题,请参考以下文章

即使我的代码没有更改,也会出现“Android 资源链接失败”

即使没有分派任何操作,Redux 状态也会在加载时更改

即使没有任何更改,Makefile也会编译文件

为啥编译时库模块中的包不存在,即使 Android Studio 显示代码中没有错误?

Android Studio 复制模块

即使在 Android 中更改后,通知声音也不会从默认值更改