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

问题描述 投票:54回答:9

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

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

症状:

  1. 它发生在我连接到互联网时
  2. 第一个延迟是Gradle:Resolve dependencies':app:_debugCompile'
  3. ...
  4. 建成25分钟后差不多完成了

注意:当我断开互联网连接时,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. 我用过代理

系统信息:

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

的build.gradle(项目:应用程序名称)

// 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(模块:APP)

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 Gradle sync开始====> 8:13:21 PM Gradle sync已完成
android android-studio gradle android-gradle build.gradle
9个回答
77
投票

问题已经解决了 !

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

方案:

  1. 确保你有最新的稳定版本(当前2.0.0)
  2. 确保build.gradle中的gradle版本是2.0.0(classpath 'com.android.tools.build:gradle:2.0.0'
  3. 最后一步,最重要的一步是将你的jcenter()更改为mavenCentral()

因此,您可以在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
}

玩得开心


4
投票

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

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

enter image description here enter image description here

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

如果这还不够,请花时间测试Gradle> Experimental ...上的选项。某些选项可能会提高您的性能:

enter image description here


2
投票

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

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

org.gradle.jvmargs=-Xmx2048m

1
投票

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


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是可用方案的完整列表。


0
投票

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


0
投票

就像Ismail Iqbal's answer说的那​​样,把gradle放在离线模式下对我有用。

  1. 如果你正在使用android studio,请关注Fabio Filho's answer
  2. 如果您使用像我这样的命令行,您可以尝试
gradlew assembleReleaseStaging(your task name) --offline

-1
投票

我见过另一个问题。解决方案可能对某人有所帮

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


-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稳定版。让我知道你想要更多细节,或者这个解决方案对你不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.