使用多项目结构时,Gradle 构建速度非常慢

24

当使用gradle在一个包含大约140个项目/库的多项目设置上构建时,构建时间为1小时22分钟。并且我使用了--parallel选项。而我们的ANT构建不使用并行构建仅需要不到20分钟。

以下是我做的确切步骤。

./gradlew clean
./gradlew build --parallel

我进行了一些测试,似乎dex处理需要最长时间。有没有办法让gradle进程重新使用已经完成dex的文件?如果库已经构建完成,应该重复使用已经完成dex的库。

我看到选项--no-rebuild,但是当我使用该选项运行时,它会显示以下内容:

File '/path/to/project/build/libs/project.aar' specified for property 'bundle' does not exist.

我用通用名称替换了文件路径和项目名称。

使用Gradle 1.9-rc-3


其他信息(2014年1月15日):

preDexDebugpreDexRelease在每个项目中花费了非常长的时间。比任何其他任务都要长得多。


进展情况(2014年1月15日):

好的,现在,我将preDexLibraries = false放入所有的build.gradle文件中。但是,我仍然想知道一个可以集中放置该条目并影响所有其他build.gradle文件的地方。

不过,现在dexReleasedexDebug需要很长时间。有没有办法告诉构建只执行dexDebugdexRelease并跳过其他的呢?


进展情况(2014年1月15日):

使用assembleDebug有效。不过,似乎仍然没有重复使用已经dexe的库。因为dexing仍然需要很长时间。每个项目大约需要一分钟的时间。 有没有一种方法可以让gradle重复使用已经dexe的库?或者还有其他原因导致构建仍然需要大约一小时? 我们的ANT进程只需不到15分钟。


现在进展如何?还需要58分钟吗?了解一下自2014年1月以来Gradle开发人员改进了多少会很有趣。 - riper
http://tools.android.com/tech-docs/new-build-system/tips#TOC-Improving-Build-Server-performance提高构建服务器性能。 - albodelu
1
我应该把assembleDebug放在哪里,是在android{ dexOptions{ }}下面吗? - Navakanth
3个回答

20

执行 clean 实际上会删除已经预编译的库。
此讨论线程所建议的,您可以通过禁用预编译来节省一些时间(因为在下一次构建中它们将被删除):

android {
  dexOptions {
    preDexLibraries = false
  }
}

我应该把这个设置放在哪里?我不可能把它放到所有的 build.gradle 文件中。那太荒谬了。有没有其他地方可以放置它,以便影响所有的构建? - prolink007
好的,目前我将该条目放入所有 build.gradle 文件中。不过,我仍然想知道一个集中管理的地方,以便将该条目应用到其他所有的 build.gradle 文件上。不过,现在 dexReleasedexDebug 花费了太长时间。是否有办法让构建只执行 dexDebugdexRelease 并跳过其他任务呢? - prolink007
1
只需使用assembleDebugassembleRelease任务,而不是build - rciovati
1
通过添加 preDexLibraries=false 并运行 assembleDebug,将构建时间从 3 小时以上减少到了 58 分钟。但这仍然比我们的 ANT 构建时间长得多。每个项目的 dexDebug 仍然需要近一分钟的时间。有没有办法缩短这个时间?我们的 ANT 构建正在重复使用已经构建好的库,而 Gradle 进程似乎没有重复使用。感谢你迄今为止的帮助。 - prolink007

6

根据这篇文章,目前每个项目都会自己预处理其依赖项。这意味着依赖于同一库的两个组件都将在该库的classes.jar上运行预处理,这很愚蠢。我们正在考虑解决这个问题。


3
现在已经针对此事提出了问题 - sschuberth

2

您尝试设置Gradle编译器的参数了吗?

如果您有远程依赖项,每次运行项目时都会使用网络操作远程资源。您应该向Gradle编译器定义指令,让它离线工作,方法如下:

--offline

以下是编译器设置的截图,可用于提高性能:

enter image description here

或者说...

enter image description here

来源:http://gradle.org/docs/current/userguide/gradle_command_line.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接