Android build gradle is too slow (Dependency Resolution)

Mehdi Jahed Manesh picture Mehdi Jahed Manesh · Apr 10, 2016 · Viewed 54.7k times · Source

I've been working with Android Studio (my current version 1.5) for 2 years. Everything was OK, but when I downloaded Canary (2.1 p5), everything went wrong. Every time I want to create a new project or open a project or sync or import a new lib or dependency, gradle is taking too long to build — nearly 20 min.

I did not do anything, I just downloaded the Canary version and ran it.

Symptoms :

  1. It happened when I connected to Internet
  2. The first delay is on Gradle: Resolve dependencies ':app:_debugCompile'
  3. ...
  4. After 25 min building almost done

Note: When I disconnect my Internet, gradle will finish as fast as possible


I tried to fix this by these ways:

  1. I changed the gradle to offline work (it worked but I don't want this way, because I want to import libs or dependencies)
  2. I've created a new file (file name is gradle.properties) in C:\Users\username\.gradle then wrote these lines into it

    org.gradle.parallel=true
    org.gradle.daemon=true
    
  3. I removed that version then installed my old version which worked OK but the problem was still there :(

  4. Disable / Enable firewall

  5. Disable / Enable AntiVirus (Nod32)

  6. Reinstall Windows OS (8.1)

  7. I've downloaded all versions (1.0.0, ..., 1.5.1, 2.0.0, 2.1)

  8. I've used a proxy


System info:

  • CPU: Intel Core i5
  • Ram: 6.00 GB
  • OS: Windows 8.1 64 bit

build.gradle(Project: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(Module: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 report after building

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

After installing android studio 2.0 stable version

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

Answer

Mehdi Jahed Manesh picture Mehdi Jahed Manesh · Apr 10, 2016

The problem is solved !

After 2 days searching , I got the solution , so I would like to share with all people who may have the same problem. The problem is gradlecan not connect to center repository in some country. When you create a new project or import , your center repository is jcenter() by default and whenever you want to build or sync or add new external dependency, gradle is going to connect to https://bintray.com/ but it can not and the building process is going to wait till connect to jcenter(), so this process might take long time ( +30 min ) , even you can not add new dependency .

Solution :

  1. Make sure you have latest stable version ( current 2.0.0 )
  2. Make sure your gradle version is 2.0.0 in build.gradle (classpath 'com.android.tools.build:gradle:2.0.0')
  3. Final step and most important one is change your jcenter() to mavenCentral()

So you can easily add new dependency and sync project under 3sec !

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
}

Have Fun