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

时间:2014-01-14 22:24:49

标签: android build gradle android-gradle dex

在包含大约140个项目/库的多项目设置中使用gradle构建时,构建时间需要1小时22分钟。我正在使用--parallel。我们的ANT构建只需不到20分钟而无需并行构建。

这正是我所做的。

./gradlew clean
./gradlew build --parallel

我做了一点测试,似乎dexing花费的时间最长。有没有办法让gradle过程重用它已经有的东西?如果已经构建了库,则应该重新使用已经dexed的库。

我看到了选项--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工作。但是,它似乎仍然没有重新使用已经dexed库。因为德兴仍然需要永远。每个项目大约需要一分钟。 有没有办法让gradle重新使用已经dexed的库?或者是否有一个不同的原因,为什么构建仍然需要大约一个小时?我们的ANT过程只需不到15分钟。

3 个答案:

答案 0 :(得分:21)

执行clean您实际上删除了已经预定义的库 根据建议in this thread,您可以通过禁用预先设置来为clean版本节省一些时间(因为在下一次构建时它们将被删除):

android {
  dexOptions {
    preDexLibraries = false
  }
}

答案 1 :(得分:7)

According to this post

  

现在每个项目都会预先依赖它自己的依赖项。这个   表示依赖于同一个库的2个组件都将运行pre-dex   在那个图书馆的classes.jar这是愚蠢的。我们正在考虑修复   此

答案 2 :(得分:2)

您是否尝试过设置Gradles编译器的参数?

如果您有远程依赖项,则每次运行项目时,都将使用网络使用远程资源进行操作。您应该为Gradles编译器定义指令,让他使用以下方式脱机工作:

--offline

在这里,我将为您提供编译器设置的屏幕截图,以获得更好的性能:

enter image description here

或者是什么......

enter image description here

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