Android studio Gradle 构建加速

Posted

技术标签:

【中文标题】Android studio Gradle 构建加速【英文标题】:Android studio Gradle build speed up 【发布时间】:2013-06-23 20:58:58 【问题描述】:

自上次更新(从 6 月 25 日开始构建)以来,android Studio Gradle 中的任何更改都非常缓慢。当您编辑文件并在 keyup 上重新编译时,它似乎也会自动跟踪更改。

在我的 i5 上,每次更改都需要几分钟时间。

知道如何加快 Gradle 更改速度吗?

【问题讨论】:

Building and running app via Gradle and Android Studio is slower than via Eclipse的可能重复 对于那些花时间阅读答案和问题的人,这不是重复的问题,正如@Dave Jarvis 所建议的那样。但它与 AS 的旧 beta 版本高度相关,可能与当前版本几乎没有关系。 看到这个***.com/a/36826562/1770868 看到这个***.com/a/54852468/7137330 【参考方案1】:

肯定会有所作为:How To… Speed up Gradle build time

只需在以下目录中创建一个名为gradle.properties 的文件:

/home/<username>/.gradle/ (Linux)
/Users/<username>/.gradle/ (Mac)
C:\Users\<username>\.gradle (Windows)

将此行添加到文件中:

org.gradle.daemon=true

【讨论】:

好答案。如需进一步详细阅读,请查看this SO answer。 来自您的链接:“注意:这只会影响控制台构建。Android Studio 始终使用 Gradle 守护程序(并根据您的设置进行一些其他优化)。” 我有 .gradle 目录和 gradle.properties 文件。但是还是要花很多时间。任何建议 没有任何区别 修改后重启Android Studio。【参考方案2】:

更改此设置后,我的编译时间从 10 分钟减少到 10 秒。

第 1 步:

设置(ctrl+Alt+S) ->

构建、执行、部署 ->

编译器->

在命令行选项框中键入“--offline”。

第 2 步:

选中“并行编译独立模块”复选框。

& 点击应用 -> 确定

第 3 步:在您的 gradle.properties 文件中 -> 添加以下行

org.gradle.jvmargs=-Xmx2048M -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.daemon=true

更新:

如果您使用的是 Android Studio 2.0 或更高版本,请尝试 Instant Run

设置→构建、执行、部署→即时运行→启用即时 运行。

更多关于 Instant Run 的信息 - https://developer.android.com/studio/run/index.html#instant-run

【讨论】:

我试过这个,它确实大大加快了我的构建速度。我知道这个选项现在会导致它离线构建,离线构建这个有什么缺点吗? @Simon - 缺点是您将无法下载 build.gradle 文件中确定的最新版本的依赖项。它运行得更快,因为它使用了这些导入库的缓存快照。对于一些开发人员来说,稳定性是最重要的,但是离线时间过长可能会在他们最终上线时搞砸他们,并且这些依赖关系已经演变,从而使上述项目落后。 感谢兄弟,这对我来说工作得很好,我的 gradle 构建速度提高了 @Simon,当你开始开发时,你可以简单地设置上面的设置,然后停止,在晚上结束时关闭它们,最后一次运行应用程序,以便一切仍然同步.或者这样会有问题吗? 从 33 秒减少到 5 秒 :))【参考方案3】:

通过将以下内容添加到 android studio 中的 gradle.properties 文件中,我能够将我的旧 core2duo 笔记本电脑(运行 linux mint)上的 gradle 构建时间从 43 秒减少到 25 秒

org.gradle.parallel=true
org.gradle.daemon=true

为什么守护进程设置使构建更快的来源: https://www.timroes.de/2013/09/12/speed-up-gradle/

【讨论】:

来自您的链接:“注意:这只会影响控制台构建。Android Studio 始终使用 Gradle 守护程序(并根据您的设置进行一些其他优化)。” 并行选项改进了我的构建,即使在 AS 中也是如此。谢谢你:) 并行选项没有改进我的构建。 谢谢。该解决方案使我的构建时间从 7 分钟缩短到 23 秒... thanx 让我的构建时间从 2 分钟缩短到 3 秒【参考方案4】:

开发人员正在努力。就像我在this answer 中发布的那样,目前最快的解决方案是从命令行使用 gradle,您应该为所有未开发的模块切换到二进制库。在 g+ 上有一个 discussion 与开发人员有关。

【讨论】:

我显然应该早点加入the tool discussion group。【参考方案5】:

按照这些步骤将使其速度提高 10 倍,并将构建时间缩短 90%

首先在以下目录中创建一个名为 gradle.properties 的文件:

/home/<username>/.gradle/ (Linux)
/Users/<username>/.gradle/ (Mac)
C:\Users\<username>\.gradle (Windows)

将此行添加到文件中:

org.gradle.daemon=true
org.gradle.parallel=true

并在 Android Studio 中检查此选项

【讨论】:

【参考方案6】:

有更新版本的 gradle(2.4 版)。

您可以通过从文件菜单中打开“项目结构”对话框来为您的项目设置此项,

Project Structure -&gt; Project -&gt; Gradle version

并将其设置为“2.4”。 您可以在this link 阅读有关提升性能的更多信息。

【讨论】:

谢谢,Gradle 2.4 版节省了将近 14 秒。 这让我的构建时间变长了【参考方案7】:

使用 Android Studio 2.1,您可以启用“Dex In Process”以更快地构建应用程序。

您可以在这里获得更多信息:https://medium.com/google-developers/faster-android-studio-builds-with-dex-in-process-5988ed8aa37e#.vijksflyn

【讨论】:

【参考方案8】:

这就是我所做的,我的 gradle 构建速度显着提高了!第一次构建从 1 分钟到 20 秒,后续构建从 40 秒变为 5 秒。

gradle.properties 文件中 添加这个:

org.gradle.jvmargs=-Xmx8192M -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

命令行参数中通过转到文件>其他设置>默认设置>构建、执行、部署>编译器并将以下参数添加到命令行参数

添加这个:

--debug --stacktrace -a, --no-rebuild -q, --quiet --offline

【讨论】:

【参考方案9】:

在进行 Android 开发时,尽量避免使用只有 8 GB RAM 的 Mac/PC。只要你启动了 1 个模拟器(Genymotion 或其他),你的构建时间在带有 gradle 构建的 Android Studio 中变得非常缓慢。即使您对 1 个源文件进行简单的一行更改,也会发生这种情况。

关闭模拟器并使用真实设备会有很大帮助,但当然这是非常有限且不太灵活的。减少模拟器的 RAM 使用设置会有所帮助,但最好的方法是确保您的笔记本电脑至少有 12-16 GB 的 RAM。

更新(2017 年 6 月):现在有几篇很好的 medium.com 文章详细解释了如何加速 Android Studio gradle 构建,它甚至可以在 8 GB 机器上运行:

如何将 Gradle 构建时间减少 65%: https://medium.com/@kevalpatel2106/how-to-decrease-your-gradle-build-time-by-65-310b572b0c43 让您的 Gradle 再次快速构建!:https://medium.com/@wasyl/make-your-gradle-builds-fast-again-ea323ce6a435

总结的共识是:

创建一个 gradle.properties 文件(全局位于 ~/.gradle/gradle.properties 或本地到项目),并添加以下行:

org.gradle.daemon=true
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.configureondemand=true

【讨论】:

【参考方案10】:
dexOptions 
    incremental true
    javaMaxHeapSize "4g"

【讨论】:

'incremental ture' 在 Android Studio 2018 中已过时。 这是 2 年前发布的。 我知道,我只是为仍在寻找这些解决方案的人声明的 ;)【参考方案11】:

    启用离线工作

    通过在 gradle.properties 中添加以下代码来提高 Gradle 性能

org.gradle.daemon=true org.gradle.parallel=true

分步指南:http://www.viralandroid.com/2015/08/how-to-make-android-studio-fast.html

【讨论】:

让我们保持这些答案的多样性,并专注于 OP 问题的细节。回复:***.com/a/34828203 ... ***.com/a/34827929 ... ***.com/a/34827858 ... ***.com/a/34827827 ... ***.com/a/34827788【参考方案12】:

根据 Android 维基媒体应用团队 的 page,优化 Gradle 构建的一个好方法是将此行添加到您的 ~/.gradle/gradle.properties强>

org.gradle.daemon=true                                                          
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx2048M

对于那些没有文件的人,有两种方法可以做到:

    通过在项目根目录中创建一个名为 gradle.properties 的文件,将文件本地添加到项目中,或者,

    您可以通过在主目录中创建相同的文件(Windows 上为 %UserProfile%.gradle,Linux 上为 ~/.gradle 来为所有项目全局设置它们和 Mac OS X)

    good practice 在您的主目录中设置属性,而不是在项目级别。

【讨论】:

【参考方案13】:

您也可以使用命令行来获得更好的性能。您可以在 linux 项目的根文件夹中使用命令 ./gradlew &lt;task name&gt; 或使用 gradlew.bat 文件,如 gradlew &lt;task name&gt;。当您第一次运行时对于给定 Gradle 版本的上述命令之一,它将下载相应的 Gradle 发行版并使用它来执行构建。

通过其包装器导入 Gradle 项目时,您的 IDE 可能会要求使用 Gradle 'all' 发行版。这非常好,有助于 IDE 为构建文件提供代码完成。 这不仅意味着您不必自己手动安装 Gradle,而且您还可以确保使用构建所设计的 Gradle 版本。这使您的历史构建更加可靠。 更多信息请参考Executing a build with the Wrapper

【讨论】:

【参考方案14】:

要加快构建速度,请将 Gradle 守护程序的最大堆大小增加至 2048 MB 以上。 为此,请在项目 gradle.properties 中设置 org.gradle.jvmargs=-Xmx2048M

【讨论】:

【参考方案15】:

将此添加到您的 gradle.properties 文件中

org.gradle.daemon=true                                                          
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx2048M

【讨论】:

【参考方案16】:

添加build.gradle 文件:

android 
...
dexOptions 
        javaMaxHeapSize "4g" //specify the heap size for the dex process
    
...

希望对你有帮助。

【讨论】:

【参考方案17】:

我正在运行带有 Windows 10 和 1TB 固态硬盘的第 5 代 i7。 我压缩了 Android Studio Projects 文件夹并获得了大约 80% 的提升。 希望这会有所帮助。

然后我将它与上述解决方案结合起来,即(org.gradle.parallel=true,org.gradle.daemon=true)。性能提升令人印象深刻。

另外:

以上所有答案都是完全正确的,但我必须作为一名经验丰富的 Android 开发人员(4 年半)声明:任何 Android/Gradle 开发人员都不应该在带有微调驱动器的机器上工作,你需要 fork出固态。我们每天都在 IDE 中按下播放按钮 100 次。当我从微调器转到 SSD(Gradle 后)时,我的速度和效率实际上快了 2 到 4 倍,我向你保证我不会在这里夸大其词。

现在我说的不是一台带有小 SSD 和大旋转器的机器,我说的是 1 个大 SSD。如果您已经拥有一台带有小型 SSD 和大型微调器的机器,您可以将小型微调器升级为 500GB SSD,并将 SSD 设置为您的主要操作系统驱动器,并在其上安装您的开发工具。

因此,如果您在快节奏的环境中工作,请将这篇文章展示给您的老板。一个像样的 1TB SSD 将花费您大约 300 英镑(包括增值税),或 500GB SSD 大约 160 英镑。根据您是初级还是高级 Android 开发人员,该驱动器将在 1 到 2 个工作日内自行支付(工资支出),如果您投资较小的驱动器,则大约需要 2 个半到 5 个工作日;比如说 500GB SSD。

很多开发人员可能会争辩说不是这样,但 Gradle 就是这样,因为 Gradle 系统对直接磁盘访问非常困难。如果您使用 .NET/C#/VB Net 或其他开发工具,您不会注意到太多差异,但 Gradle 中的差异是巨大的。如果你对这篇文章采取行动,我向你保证,你不会失望的。就我个人而言,我使用的是带有 8GB RAM 的第五代 i7,它最初带有一个 1TB Spinner,我将它升级到了三星 SSD 840 EVO 1TB,从那以后我再也没有回头。我是从 https://www.aria.co.uk 购买的。

希望这会有所帮助。另外我必须声明,这不是一个商业动机的帖子,我只是推荐 Aria,因为我以前用过很多次,而且它们一直很可靠。

【讨论】:

【参考方案18】:

我们可以将一些命令添加到 gradle.properties 文件中:

org.gradle.configureondemand=true - 这个命令将告诉 gradle 只构建它真正需要构建的项目。 Use Daemon — org.gradle.daemon=true - Daemon 使 gradle 的实例保持启动并在后台运行,即使在构建完成后也是如此。这将消除初始化 gradle 所需的时间并显着减少构建时间。

org.gradle.parallel=true - 允许 gradle 并行构建您的项目。如果您的项目中有多个模块,则通过启用此功能,gradle 可以并行运行独立模块的构建操作。

增加堆大小 — org.gradle.jvmargs=-Xmx3072m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 - 从android studio 2.0开始,gradle在进程中使用dex来减少构建项目的时间安排。通常,在构建应用程序时,多个 dx 进程会在不同的 VM 实例上运行。但从 Android Studio 2.0 开始,所有这些 dx 进程都在单个 VM 中运行,并且该 VM 也与 gradle 共享。这显着减少了构建时间,因为所有 dex 进程都在相同的 VM 实例上运行。但这需要更大的内存来容纳所有的dex进程和gradle。这意味着您需要增加 gradle 守护程序所需的堆大小。默认情况下,守护进程的堆大小约为 1GB。

确保不使用动态依赖。即不要使用 实现'com.android.support:appcompat-v7:27.0.+'。 此命令意味着 gradle 将在每次构建应用程序时上线并检查最新版本。 而是使用固定版本,即 'com.android.support:appcompat-v7:27.0.2'

【讨论】:

【参考方案19】:

从 android 文件夹打开 gradle.properties 并取消注释突出显示的行并根据您的机器配置提供内存值。 我的机器上有 8gb 内存,所以我分别给了最大 4096mb 和 1024mb。

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
//Uncomment below line for providing your system specific configuration
#org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError - Dfile.encoding=UTF-8

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
#http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
 //Uncomment below line to allow parallel process execution.
 #org.gradle.parallel=true

在此之后,我的构建时间减少了一半。 建设愉快!

【讨论】:

您的构建现在需要多长时间? 最近没有在移动应用上工作,但在发布此答案时,构建时间从 ~5 分钟减少到 ~3 分钟 这是一个很大的改进【参考方案20】:

当您在项目中启用 multidex 时,通常会发生这种情况。 这可能会减慢您的开发过程! 根据doc:

multidex 配置需要显着增加构建处理时间,因为构建系统必须做出复杂的决定,即哪些类必须包含在主 DEX 文件中,哪些类可以包含在辅助 DEX 文件中。这意味着使用 multidex 的增量构建通常需要更长的时间,并且可能会减慢您的开发过程。

但是你可以优化这个:

为了减少更长的增量构建时间,您应该使用 pre-dexing 在构建之间重用 multidex 输出。

如果您使用的是 Android Studio 2.3 或更高版本,则 IDE 在将您的应用部署到运行 Android 5.0(API 级别 21)或更高版本的设备时会自动使用此功能。

所以您需要将 minSdkVersion 设置为 21 或更高

但如果你的生产版本需要支持低于 21 的 minSdkVersion,例如 19

您可以使用 productFlavors 为您的 dev 设置 minSdkVersion 21 版本:

    android 
    defaultConfig 
        ...
        multiDexEnabled true
        // The default minimum API level you want to support.
        minSdkVersion 15
    
    productFlavors 
        // Includes settings you want to keep only while developing your app.
        dev
            //the IDE automatically uses  pre-dexing feature to mitigate longer incremental when deploying your app to a device running Android 5.0 !
            minSdkVersion 21
        
        prod 

        
    
    buildTypes 
        release 
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                                                 'proguard-rules.pro'
        
    

dependencies 
    compile 'com.android.support:multidex:1.0.3'

【讨论】:

【参考方案21】:

我更喜欢从命令行构建以获得更好的构建时间。如果您的应用程序代码库很大并且您有多个模块,那么您可以尝试此处所述的本地 AAR 方法,它将大大提高 Android Studio 性能和 gradle 构建时间。它也与命令行构建兼容

https://blog.gojekengineering.com/how-we-improved-performance-and-build-times-in-android-studio-306028166b79

可在此处找到带有集成说明的演示项目: https://github.com/akhgupta/AndroidLocalMavenRepoAARDemo

【讨论】:

【参考方案22】:

右键Drawable文件夹,将png/jpg图片转成webp格式,大大提升了gradle

【讨论】:

【参考方案23】:

来自 android 开发者文档:

配置 JVM 垃圾收集器。它将构建时间减少到 2 到 4 秒

gradle.properties 文件

org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC

Refer to this Developer doc

【讨论】:

【参考方案24】:

遵循 Android Studio 和 Gradle 性能指南

Optimize your build speed Improving the Performance of Gradle Builds Configuration cache Build Cache

总体

始终保持 Gradle 版本为最新,以获得新的性能改进 将您的项目模块化尽可能从 Gradle 并行工作中受益 了解Gradle properties 并了解他们的工作

【讨论】:

以上是关于Android studio Gradle 构建加速的主要内容,如果未能解决你的问题,请参考以下文章

加速Android Studio/Gradle构建

Android Gradle 插件Android Studio 工程 Gradle 构建流程 ② ( settings.gradle 构建脚本分析 | 根目录下 build.gradle 分析 )

Android Studio 无法构建 gradle

Android Studio 和 Gradle - 构建失败

Android Studio Gradle构建脚本

Android Studio 中的 Gradle 构建问题