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

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

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

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

【问题讨论】:

标签: android android-studio


【解决方案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 与开发人员有关。

【讨论】:

【解决方案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.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】:
          1. 启用离线工作

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

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

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

          【讨论】:

          【解决方案12】:

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

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

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

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

          2. 您可以通过在主目录中创建相同的文件(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 性能指南

                                总体

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

                                【讨论】:

                                  猜你喜欢
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2016-10-30
                                  • 2023-03-05
                                  • 2017-01-25
                                  • 2015-11-27
                                  • 2018-05-24
                                  相关资源
                                  最近更新 更多