Android构建gradle太慢(依赖性解析)

时间:2016-04-10 11:47:15

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

我已经使用Android Studio(目前的版本1.5)2年了。一切都很好,但是当我下载Canary(2.1 p5)时,一切都出错了。每次我想创建一个新项目或打开一个项目或同步或导入一个新的lib或依赖项时,gradle都需要很长时间才能构建 - 将近20分钟

我没有做任何事情,我只是下载了Canary版本并运行它。

症状:

  1. 当我连接到互联网时发生了
  2. 第一个延迟是 Gradle:解决依赖关系':app:_debugCompile'
  3. ...
  4. 建成25分钟后差不多完成了
  5. 注意当我断开互联网连接时,gradle将尽快完成

    我试图通过这些方式解决这个问题

    1. 我将gradle改为离线工作(它有效,但我不想这样,因为我想导入libs或依赖项)
    2. 我在gradle.properties中创建了一个新文件(文件名为C:\Users\username\.gradle),然后将这些行写入其中

      org.gradle.parallel=true
      org.gradle.daemon=true
      
    3. 我删除了该版本,然后安装了我的旧版本,但工作正常,但问题仍然存在:(

    4. 禁用/启用防火墙

    5. 禁用/启用AntiVirus(Nod32)

    6. 重新安装Windows操作系统(8.1)

    7. 我已下载所有版本(1.0.0,...,1.5.1,2.0.0,2.1)

    8. 我已经使用了代理

    9. 系统信息

      • CPU:Intel Core i5
      • Ram:6.00 GB
      • 操作系统:Windows 8.1 64位

      的build.gradle(项目:APPNAME)

      // Top-level build file where you can add configuration options common to all sub-projects/modules.
      
      buildscript {
          repositories {
              jcenter()
          }
          dependencies {
              classpath 'com.android.tools.build:gradle:1.5.0'
      
              // NOTE: Do not place your application dependencies here; they belong
              // in the individual module build.gradle files
          }
      }
      
      allprojects {
          repositories {
              jcenter()
          }
      }
      
      task clean(type: Delete) {
          delete rootProject.buildDir
      }
      

      gradle.build(模块:应用)

      apply plugin: 'com.android.application'
      
      android {
          compileSdkVersion 23
          buildToolsVersion "23.0.3"
      
          defaultConfig {
              applicationId "com.example.test.myapplication"
              minSdkVersion 14
              targetSdkVersion 23
              versionCode 1
              versionName "1.0"
          }
          buildTypes {
              release {
                  minifyEnabled false
                  proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
              }
          }
      }
      
      dependencies {
          compile fileTree(include: ['*.jar'], dir: 'libs')
          compile 'com.android.support:appcompat-v7:23.3.0'
      }
      

      构建后的Gradle报告

      Dependencies                  Duration
      All dependencies              14m3.43s
      :app:_releaseCompile          3m30.96s
      :app:_debugCompile            3m30.73s
      :app:_debugApk                3m30.69s
      :app:_releaseApk              3m30.62s
      :classpath                    0.428s
      :app:_debugAndroidTestCompile 0.001s
      :app:_debugAndroidTestApk     0s
      :app:_debugUnitTestApk        0s
      :app:_debugUnitTestCompile    0s
      :app:_releaseUnitTestApk      0s
      :app:_releaseUnitTestCompile  0s
      :app:releaseWearApp           0s
      :app:wearApp                  0s
      

      安装android studio 2.0稳定版后

      • 7:23:47 PM Gradle sync started ====> 8:13:21 PM Gradle sync completed

11 个答案:

答案 0 :(得分:76)

问题解决了!

经过2天的搜索,我得到了解决方案,所以我想与所有可能遇到同样问题的人分享。问题是gradle无法连接到某个国家/地区的中心存储库。当您创建新项目或导入时,默认情况下您的中心存储库为jcenter(),无论何时您想构建或同步或添加新的外部依赖项,gradle都将连接到https://bintray.com/但是它不能并且构建过程将等到连接到jcenter(),因此这个过程可能需要很长时间(+30分钟),即使你不能添加新的依赖项。

解决方案:

  1. 确保您拥有最新的稳定版本(当前2.0.0)
  2. 确保您的gradle版本在build.gradle(classpath 'com.android.tools.build:gradle:2.0.0'
  3. 中为2.0.0
  4. 最后一步,最重要的一步是将 jcenter()更改为 mavenCentral()
  5. 因此,您可以在3秒内轻松添加新的依赖项和同步项目!

    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:2.0.0'
    
            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }
    
    allprojects {
        repositories {
            mavenCentral()
        }
    }
    
    task clean(type: Delete) {
        delete rootProject.buildDir
    }
    

    玩得开心

答案 1 :(得分:4)

您可以优化gradle构建过程......

尝试将gradle置于脱机模式,强制构建而不与外部存储库建立任何连接,如下所示:

enter image description here enter image description here

这对我帮助很大,因为在我的工作中,所有连接都在代理之后,它会增加构建时间。

如果这还不够,请花时间测试Gradle上的选项>实验......一些选项可能会提高您的表现:

enter image description here

答案 2 :(得分:2)

除了@Mehdi Jahed Manesh上面的回答。

使用org.gradle.jvmargs属性,将分配给Gradle Daemon VM的内存量增加1 Gb,最小值为2 Gb:

org.gradle.jvmargs=-Xmx2048m

答案 3 :(得分:1)

初始构建完成后,尝试从gradle设置启用离线模式。因此,每个连续的构建都不会开始解析依赖关系,而是从缓存中获取。如果添加新的依赖项,它将提示您禁用脱机模式并重建它。 image of the gradle preview

答案 4 :(得分:1)

对于那些使用需要身份验证的存储库的人,可以通过将gradle配置为仅使用单个身份验证方案来解决此问题:

repositories {
    maven {
        credentials {
            username INTERNAL_REPO_USERNAME
            password INTERNAL_REPO_PASSWORD
        }
        // here comes the important part
        authentication {
            basic(BasicAuthentication)
        }
        url INTERNAL_REPO_URL
    }
}

事实证明,在针对存储库进行身份验证时,gradle会尝试使用各种方案进行身份验证。上面的配置使gradle仅使用基本身份验证。 Here是可用方案的完整列表。

答案 5 :(得分:0)

就我而言,我通过安装新版本的Java JDK解决了这个问题。 安装新JDK后,打开AS,转到文件→项目结构→SDK位置,并将JDK位置更改为新版Java JDK的位置。然后,您将被要求获得防火墙许可;检查公共并申请。让它解决问题。

答案 6 :(得分:0)

Ismail Iqbal's answer说过的那样,将gradle置于离线模式下对我来说很有效。

  1. 如果您使用的是android studio,请遵循Fabio Filho's answer

  2. 如果您像我一样使用命令行,则可以尝试

gradlew assembleReleaseStaging(your task name) --offline

答案 7 :(得分:0)

请检查此故事。它可能与gradle不相关,但是它可以加快构建速度,而无需进行过多更改:

https://android.jlelse.eu/is-your-android-studio-always-slow-heres-how-to-speed-up-immediately-326ef9238024

答案 8 :(得分:0)

停止gradle下载并单击文件->“使用Gradle文件同步项目”

答案 9 :(得分:-1)

我见过另一个问题。该解决方案可能会帮助某人

最近我在系统环境变量下设置了http_proxy和https_proxy。我不得不删除它们,然后在工作室设置中设置代理。

答案 10 :(得分:-2)

更改classpath 'com.android.tools.build:gradle:1.5.0'

classpath 'com.android.tools.build:gradle:2.0.0'

和 改变buildToolsVersion "23.0.3"

buildToolsVersion "23.0.2"

并使用android studio 2.0稳定版。 让我知道你想要更多细节,或者这个解决方案不适合你。