Mehdi Jahed Manesh Mehdi Jahed Manesh - 2 months ago 29
Android Question

Android build gradle is too slow (Dependency Resolution)

Finally I found the solution



If you have my problem , check my answer.




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 when I want create a new project or open project or sync or import 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 run 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 the 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 dont want this way , because I want import libs or dependencies)

  2. I`ve created new file ( file name is gradle.properties ) in C:\Users\username\.gradle then wrote these lines into it

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

  3. I removed that version then installed my old version which it was ok but the problem was still there :(

  4. Disable / Enable firewall

  5. Disable / Enable AntiVirus (Nod 32)

  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 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
}


I really cant do anything , I`ve been searching for days but I could not find true answer.

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 install android studio 2.0 stable version


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



Thx for answering

Answer

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