【问题标题】:Android Studio gradle takes too long to buildAndroid Studio gradle 构建时间过长
【发布时间】:2015-06-06 03:17:35
【问题描述】:

我的 Android Studio 项目过去构建速度更快,但现在构建需要很长时间。任何想法可能导致延误? 我试过https://stackoverflow.com/a/27171878/391401 但没有效果。我没有运行任何可能会中断构建的防病毒软件。我的应用程序也没有那么大(大约 5MB),它过去可以在几秒钟内构建,但不确定发生了什么变化。

10:03:51 Gradle build finished in 4 min 0 sec  
10:04:03 Session 'app': running  
10:10:11 Gradle build finished in 3 min 29 sec  
10:10:12 Session 'app': running  
10:20:24 Gradle build finished in 3 min 42 sec  
10:28:18 Gradle build finished in 3 min 40 sec  
10:28:19 Session 'app': running  
10:31:14 Gradle build finished in 2 min 56 sec   
10:31:14 Session 'app': running  
10:38:37 Gradle build finished in 3 min 30 sec  
10:42:17 Gradle build finished in 3 min 40 sec  
10:45:18 Gradle build finished in 3 min 1 sec  
10:48:49 Gradle build finished in 3 min 30 sec  
10:53:05 Gradle build finished in 3 min 22 sec  
10:57:10 Gradle build finished in 3 min 19 sec  
10:57:11 Session 'app': running  

【问题讨论】:

  • 你用什么,你的安卓手机或任何模拟器来运行你的应用程序?
  • 在设备上运行
  • 当 Android Studio 刚成立时,StackOverflow 上的许多人对此表示不满,因为它“只是一个测试版”。然而,自从它“只是一个测试版”以来已经有好几年了,而且它仍然很缓慢,它是在 8 个内核、16gb 的内存和一个 SSD 磁盘上。在这台机器上设置的旧 Eclipse 速度很快。

标签: android android-studio build gradle build.gradle


【解决方案1】:

我做的第二件事是卸载我的防病毒软件(AVG Antivirus) {听起来很疯狂,但我不得不这样做}。 它将 gradle 构建时间减少到 40%

我做的第一件事是启用离线模式 (1. 通常点击编辑器右侧的 Gradle 2.点击连接按钮切换) 它将 gradle 构建时间减少了多达 20%

所以通过执行这两件事,我的 Gradle 构建时间最多减少了 60%

【讨论】:

    【解决方案2】:

    在 Android Studio 中转到 文件 -> 设置 -> 构建、执行、部署 -> 构建工具 -> Gradle

    (如果在 mac 上) Android Studio -> 首选项... -> 构建、执行、部署 -> 构建工具 -> Gradle

    勾选“全局 Gradle 设置”下的“离线工作”

    注意:在较新版本的 Android Studio 中,View->Tool Windows->Gradle->Toggle button of online/offline

    它将减少 90% 的 gradle 构建时间。

    如果您刚刚在 gradle 中添加了新的依赖项,则必须取消选中 offline work 否则 gradle 将无法解析依赖项。完成解决后,您可以检查离线工作以获得更快的构建

    【讨论】:

    • 效果很好。从 12 分钟到 5 秒
    • 当我们将它们添加到 build.gradle 时,此配置不会停止获取新库吗?
    • 当您添加一个新库时,您必须使其在线一次,这将由 gradle build 通知以使项目可运行@DanyY
    • 这是否意味着问题一直是互联网速度而不是处理器速度?
    • 只有我还是 Android Studio 3.6.2 中不再有离线工作选项?
    【解决方案3】:

    在 Android Studio 中,3.6 版以上,有一个新位置可以切换 Gradle 的离线模式来启用或禁用 Gradle 的离线模式。

    要启用或禁用 Gradle 的离线模式,请从菜单中选择 View > Tool Windows > Gradle。在 Gradle 窗口的顶部栏中,单击 Toggle Offline Mode(靠近设置图标)。

    图标有点混乱,反正切换按钮高亮时启用离线模式。 :)

    【讨论】:

    • 非常感谢,我自己真的想不通。
    【解决方案4】:

    检查 Windows 操作系统中的磁盘使用情况...

    问题可能与此有关,在我的情况下,我的 Windows 8 操作系统占用了 100% 的磁盘使用率。

    尤其是 Windows 搜索服务,可能是最消耗的。 禁用它:

    cmd(管理员)

    net.exe stop "Windows search"
    

    查看此链接4 Tips to Fix 100% Disk Usage & Improve Windows Performance

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题,即使 gradle 构建运行了 8 个小时,我也很担心。但后来我像这样在 build.gradle 文件中更改了编译 sdk 版本和最低 sdk 版本。

      年长者:

      android {
      compileSdkVersion 25
      buildToolsVersion "29.0.2"
      
      defaultConfig {
          applicationId "com.uwebtechnology.salahadmin"
          minSdkVersion 9
          targetSdkVersion 25
      }
      

      新(更新):

      android 
      {
        compileSdkVersion 28
         buildToolsVersion "25.0.2"
      
       defaultConfig {
          applicationId "com.uwebtechnology.salahadmin"
          minSdkVersion 15
          targetSdkVersion 28
       }
      

      【讨论】:

        【解决方案6】:

        您可以尝试这篇帖子Why your Android Studio takes forever to build - Part 2 中的提示,其中一个提示建议“启用离线模式”等。

        【讨论】:

          【解决方案7】:

          在您的 build.gradle 中,如果您有用于调试的 minifyEnabled,请将其删除。我在我的项目中有它,构建需要大约 2-3 分钟。在查看构建进度后,我发现这是罪魁祸首,因此删除下面的注释行,我的问题得到了解决。

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

          【讨论】:

            【解决方案8】:

            我遇到过这样的问题,尤其是在通过手机主动调试时;有时需要 27 分钟。我做了以下事情,并记下了每件事下的解释——一个可能对你有用:

            1. 更改了我的 gradle.properties 文件(如果您在 Android 选项下或在项目文件夹中有项目文件视图,则在 Gradle 脚本下)。我添加这个是因为我的电脑有一些可用内存 - 您可以在最后分配不同的值,具体取决于您的电脑规格和 android studio 最低要求(Xmx8000m -XX:MaxPermSize=5000m):

            org.gradle.daemon=true

            org.gradle.configureondemand=true

            org.gradle.parallel=true

            android.enableBuildCache=true

            org.gradle.caching=true

            org.gradle.jvmargs=-Xmx8000m -XX:MaxPermSize=5000m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

            1. 这并没有完全解决我的问题。因此,我也按照其他人之前的建议做了 - 使我的构建过程离线:

            文件 -> 设置/首选项 -> 构建、执行、部署 -> Gradle

            全局 Gradle 设置(在底部)

            标记名为:离线工作的复选框。

            1. 这大大减少了时间,但不稳定;有时需要更长的时间。因此我对 Instant Run 做了一些改动:

            文件 -> 设置/首选项 -> 构建、执行、部署 -> 即时运行

            选中:启用即时运行到热交换代码...

            选中:重新启动代码更改活动 ...

            1. 上面的动作也不稳定,因此我试图找出问题是否可能是直接在我的手机和计算机上运行的进程/内存。在这里,我释放了手机和存储空间中的一点内存空间(利用率为 98% - 下降到 70%)以及任务管理器 (Windows),将 Android Studio 和 Java.exe 的优先级提高到高。谨慎迈出这一步;取决于您计算机的内存。

            2. 毕竟,我在手机上积极调试时的构建时间有时会下降到 1 ~ 2 分钟,但有时会飙升。我决定做一个 让我吃惊的 hack,将它缩短到最好的几秒钟,但在同一个项目中,给了我 22 到 27 分钟是 12 秒!:

            连接手机进行调试,然后点击运行

            启动后,拔下手机 - 构建应该会更快地继续,并在最后引发错误,指示:Session 'app': Error Installation APKs

            重新连接手机并再次点击运行...

            交替

            如果我正在调试的脚本/函数/方法是纯 JAVA,而不是 JAVA-android,例如使用 JSONArrays/JSONObjects 测试 API,我在 Netbeans 上测试我的 java 函数/方法,它可以编译单个文件并更快地显示输出,然后对我的 Android Studio 文件进行必要的更改。这也节省了我很多时间。

            编辑

            我尝试在本地存储中创建一个新的 android 项目,并将我以前项目中的所有文件复制到新项目中 - java、res、manifest、gradle app 和 gradle 项目(具有最新的 gradle 类路径依赖项)。现在我可以在不到 15 秒的时间内在手机上构建。

            【讨论】:

              【解决方案9】:

              我在 kotlin 中遇到了同样的问题。更新过时的 kotlin 运行时为我解决了这个问题

              【讨论】:

                【解决方案10】:

                我很长一段时间都面临同样的问题,但我通过调整 gradle 中的设置解决了它。

                步骤 1:在 Module app 中,在 BuildScript 中添加依赖

                buildscript {
                 dependencies {
                         classpath 'com.android.tools.build:gradle:2.0.0-alpha9'
                }
                }
                

                第 2 步:添加 dexOption 并给出以下 heapSize

                  dexOptions {
                    incremental = true;
                    preDexLibraries = false
                    javaMaxHeapSize "4g"
                }
                

                第 3 步:添加产品风味

                    productFlavors {
                    dev {
                        minSdkVersion 23
                        applicationId = "com.Reading.home"
                    }
                    prod {
                        minSdkVersion 15
                        applicationId = "com.Reading.home" // you don't need it, but can be useful
                
                    }
                }
                

                这应该会减少您的构建时间。

                【讨论】:

                  【解决方案11】:
                  1. 转到文件->设置-->Gradle-->将其设置为离线模式并检查

                  【讨论】:

                    【解决方案12】:

                    启用 Java 8 功能导致构建速度极慢

                    分级

                     jackOptions {
                            enabled true
                      }
                    
                      compileOptions {
                        targetCompatibility 1.8
                        sourceCompatibility 1.8
                    }
                    

                    删除以上行后,它会在几秒钟内构建。

                    有问题Compiling with Jack takes very long time

                    项目经理的回答

                    我们知道,构建时间现在是 Jack 的一个问题。我们对 2.4 Gradle 插件进行了改进,这对于增量构建来说应该是一个重大改进。

                    截至目前,我能找到的最新 Gradle 版本是 2.3.0-beta4

                    【讨论】:

                    • 是的,我同意。要在 android studio 中启用 java 8,您需要使用 Jack,通过这样做,我的构建时间从 1-2 分钟到 16 分钟飞到了月球……什么……它现在无法使用。谷歌一如既往的出色工作
                    【解决方案13】:

                    检查您的互联网连接。如果互联网速度很慢,gradle 构建也需要很长时间才能构建。我通过将我的 wifi 互联网连接更改为另一个速度良好的连接来检查。现在构建时间是正常的。请在使用其他解决方案之前尝试此操作。有人会做出错误的决定来重新安装或更改设置。我希望它会有所帮助。谢谢和问候。

                    【讨论】:

                    • 确保在防火墙上允许 Android Studio。当突然弹出防火墙窗口要求我允许它时,正在等待全新安装的 gradle 将近 15 分钟。本来可以更早的
                    • 是的,它经常发生,但是一旦 gradle 同步过程完成,如果互联网速度非常慢,除非您添加了新的依赖项,否则切换到离线模式
                    【解决方案14】:

                    找到原因了!!如果 Android Studio 有代理服务器设置并且无法访问服务器,那么构建需要很长时间,可能是它试图访问代理服务器并等待超时。当我删除代理服务器时,它的工作正常。

                    删除代理:File > Settings > Appearance & Behavior > System settings > HTTP Proxy

                    【讨论】:

                    • 如何删除代理服务器?
                    • 在 Windows 文件 > 设置 > 外观和行为 > 系统设置 > HTTP 代理
                    • 我的问题也出在代理上,但在那,我不得不在 gradle 属性中添加 HTTPS 代理。 HTTP 代理还不够:systemProp.http.proxyHost=xxx.xxx.xxx.xxx systemProp.http.proxyPort=8080 systemProp.https.proxyHost=xxx.xxx.xxx.xxx systemProp.https.proxyPort=8080
                    • AS 完全是笑话和废话。我只是厌倦了这种废话。
                    • 我同意!!!从 Eclipse 迁移一个大项目,我遭受了极大的痛苦,现在错误已清除,使用 AS 构建永远不会完成!!!我讨厌 AS @The_Martian
                    【解决方案15】:

                    1) 在我将一些新的库依赖项添加到我的 gradle 文件后,我的构建时间严重增加,结果我需要使用 multidex。当我正确设置 multidex 时,我的构建时间增加到 2-3 分钟。因此,如果您想要更快的构建时间,请避免使用 multidex,并尽可能减少库依赖项的数量。

                    2)您也可以尝试在 android studio 中启用“离线工作”,就像这里建议的那样,这是有道理的。这不会在您每次构建时重新获取库。在禁用“离线工作”的情况下,缓慢的连接或代理/vpn 使用可能会导致构建时间变慢。

                    3) 谷歌服务 - 如此处所述,不要使用整个捆绑包,只使用其中需要的部分。

                    【讨论】:

                      【解决方案16】:

                      找到了一种简单且最好的方式来构建 gradle

                      转到您的应用 >> 打开您的 gradle.properties 并从中更改几行 [删除 #]

                      否则你也可以复制粘贴我下面的sn-p

                          # Project-wide Gradle settings.
                      
                      # IDE (e.g. Android Studio) users:
                      # Gradle settings configured through the IDE *will override*
                      # any settings specified in this file.
                      
                      # For more details on how to configure your build environment visit
                      # http://www.gradle.org/docs/current/userguide/build_environment.html
                      
                      # Specifies the JVM arguments used for the daemon process.
                      # The setting is particularly useful for tweaking memory settings.
                      # Default value: -Xmx2048m -XX:MaxPermSize=512m
                       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
                       org.gradle.parallel=true
                      

                      它之前对我有用,它需要将近 2-3 分钟,现在只需要 5-6 秒

                      在上述情况下,我的 mac 机器有 8GB 内存,所以我为 gradle 分配了 4gb

                      【讨论】:

                      • 这将我的构建时间从 30 多分钟减少到 24 分钟...有什么办法可以进一步减少...?
                      • @ProgrammingPirate 你找到方法了吗?我遇到了同样的问题,但这并没有帮助 - 我有 32 GB RAM,我的电脑(Windows)很棒,只是 Android Studio 很慢
                      【解决方案17】:

                      我的电脑也有类似的问题。 Windows Defender 阻止了 Gradle Building 的某些部分。 我已经禁用它,之后工作正常。

                      【讨论】:

                        【解决方案18】:

                        推荐阅读: How I save 5h/week on Gradle builds!

                        根据这篇优秀的帖子,您应该尝试优化以下内容:

                        • Gradle 守护进程
                        • 并行项目执行
                        • 按需配置项目
                        • 模块很贵...

                        【讨论】:

                          【解决方案19】:

                          按照这些步骤操作将使其速度提高 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
                          

                          【讨论】:

                          • 您可以直接从位于 studio 项目下的 gradle.properties 进行设置。
                          • 是也启用这个选项 org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
                          • 设置 MaxPermSize=1024m
                          • 为什么这些属性没有预定义?有什么缺点吗?
                          • 这个选项应该只用于解耦项目。更多详情,请访问gradle.org/docs/current/userguide/…
                          【解决方案20】:

                          在 Android Studio 2.0 的测试版中,他们推出了一项名为 Instant Run 的功能。它大大减少了构建时间。核心概念是,Android Studio 仅将所做的小改动推送到已运行的应用中。

                          它将我们在代码中所做的更改分为三个部分:热交换、热交换和冷交换,具体取决于更改会给构建带来多少负载。之后,它只是简单地交换已经运行的应用程序中的代码,我们可以在几秒钟内看到更改运行。请参阅他们的doc 了解更多信息。

                          Here你可以下载Android Studio 2.0预览版。

                          PS:此功能存在一些问题。他们已经在文档中列出了它。安装前检查一下。

                          【讨论】:

                            【解决方案21】:

                            @AndroidDev 解决方案对我有用。 我已将整个库包含在 gradle 中。

                            compile 'com.google.android.gms:play-services:8.4.0'
                            

                            更改以解决问题。从 4 分钟到 1 分钟。

                            compile 'com.google.android.gms:play-services-ads:8.4.0'
                            compile 'com.google.android.gms:play-services-analytics:8.4.0'
                            

                            谢谢

                            【讨论】:

                              【解决方案22】:

                              如果您使用的是 Google Play 服务,请确保您没有在 Gradle 构建脚本中使用它:

                              compile 'com.google.android.gms:play-services:8.3.0'
                              

                              仅使用您的应用真正使用的那些 Google API。如果您使用的只是谷歌地图,您会使用这个:

                              com.google.android.gms:play-services-maps:8.3.0
                              

                              当我这样做时,我的编译时间从 2 分钟多到 25 秒左右。有关可以选择性编译的 Google api 列表,请参阅:

                              https://developers.google.com/android/guides/setup

                              【讨论】:

                              • 你应该得到 100 多张赞成票。其他所有来源都建议添加org.gradle.parallel=true 和命令行相关...但没有一个提供对实际情况的简单直接的理解。根据您的建议,我的构建时间从 1 分 5 秒变为 3.427 秒。太棒了!
                              • 非常感谢,这也是我的主要问题。现在一切正常。
                              • 效果很好。使用此链接查找您的播放服务库名称:developers.google.com/android/guides/…
                              • 你值得一试...你解决了我的问题。问题出在谷歌播放服务上...谢谢:)
                              • 这不仅有助于解决长期构建问题,而且我现在还可以在调试时不使用 Proguard 直接部署到 Android 设备(以前我收到关于 65K 方法限制的错误)。谢谢!
                              猜你喜欢
                              • 1970-01-01
                              • 1970-01-01
                              • 2018-07-07
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 2018-12-22
                              • 1970-01-01
                              相关资源
                              最近更新 更多