Android Studio - Gradle增量构建

10
在过去几天中,我一直在试图提高我们项目的构建时间,但是没有成功。我不介意等待1分钟40秒进行干净的构建,但是如果我在单个Java文件中插入一行代码,构建时间就会与干净的构建相同。我肯定是做错了什么,但我找不到任何文档或堆栈溢出问题,可以指引我正确的方向。我设法收集了一些信息,在这里集中起来,希望有人能更好地理解这个主题,并解释为什么我会得到这些糟糕的构建时间。
  • I understand that this option in my build.gradle file is what I seek.

    android {
        dexOptions {
            incremental true
        }
    ...
    

    Glorious incremental build. However, this doesn't work for me apparently because my project uses the multidex feature for retrocompatibility with android versions before Lollipop.

  • Proguard to the rescue! With Proguard I am able to minify my executable and remove all the unused methods. I got a couple of errors with proguard minify but was able to set it properly and get it working. Great! Dex generation takes about 20s for every build. Unfortunately, nothing is for free, and the proguard gradle task takes about 2m50s to run. Even worse than my initial case.

这个问题有解决方案吗?

全局 Gradle 设置中启用“离线工作”是否有帮助? - nhaarman
很遗憾,我的构建过程中真正耗时的任务是dex生成。获取依赖项实际上非常快。 - Fabio Picchi
3个回答

14

终于找到了解决方案。它一直在官方文档中,我只需要更深入地理解构建过程才能理解所说的内容。

增量构建和多 dex 是不兼容的选项。但是,对于 SDK 版本为 21 及以上的应用,可以通过仅重建受影响的 dex 文件来实现多 dex 的增量构建。更多信息可在此处找到:

http://developer.android.com/tools/building/multidex.html


你考虑过使用BUCK吗?https://www.google.com/search?q=buck+facebook&ie=utf-8&oe=utf-8 - Francis Toth
我会研究一下,感谢您的建议!我不确定我是否可以在工作中使用它,但我肯定会在我的个人项目中尝试一下。 - Fabio Picchi

3
我没有直接解决Gradle问题的答案,但我有一个建议,可能会帮助您加快构建速度。
最近,我遇到了相同的问题:我们的构建需要近4分钟。我尝试了不同的构建选项,但没有明显的收益。
经过一些研究,我发现了Jrebel for Android。它类似于“Instant run”,但更强大。它支持许多类型的更改(UI、方法、字段等),并实时更新应用程序,而无需重新创建活动(因此保存状态)。通常,应用任何类型的更改只需要十到三十秒。
这个工具不是免费的,但他们提供不同的定价选项和试用账户,所以你可以试用一下。它作为Android Studio或Eclipse的常规插件工作,安装非常容易。
更新:
现在他们甚至有免费版本:链接到文章

3

我今天尝试了这个选项(2017年11月13日),并收到以下构建警告:

警告:属性android.dexOptions.incremental已被弃用,对构建过程没有影响。

然后我在谷歌上搜索了这个警告信息,并得到的答案证实自从新的Gradle版本以来,该项已经被弃用。请参阅 android.dexOptions.incremental property is deprecated


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