it-swarm.com.de

Android Build Gradle ist zu langsam (Abhängigkeitsauflösung)

Ich arbeite seit 2 Jahren mit Android Studio (meiner aktuellen Version 1.5). Alles war in Ordnung, aber als ich Canary (2.1 p5) heruntergeladen habe, lief alles schief. Jedes Mal, wenn ich ein neues Projekt erstellen oder ein Projekt öffnen oder eine neue Bibliothek oder Abhängigkeit synchronisieren oder importieren möchte, dauert die Erstellung von gradle zu lange - fast 20 Minuten .

Ich habe nichts getan, ich habe gerade die kanarische Version heruntergeladen und ausgeführt.

Symptome:

  1. Es ist passiert, als ich mich mit dem Internet verbunden habe
  2. Die erste Verzögerung ist auf Gradle: Abhängigkeiten auflösen ': app: _debugCompile'
  3. ...
  4. Nach 25 min ist der Bau fast fertig

Hinweis : Wenn ich mein Internet trenne, wird Gradle so schnell wie möglich beendet.


Ich habe versucht, dies auf folgende Weise zu beheben :

  1. Ich habe das Diplom in die Offline-Arbeit geändert (es hat funktioniert, aber ich möchte das nicht, weil ich Bibliotheken oder Abhängigkeiten importieren möchte)
  2. Ich habe eine neue Datei (Dateiname ist gradle.properties) in C:\Users\username\.gradle erstellt und diese Zeilen in diese geschrieben

    org.gradle.parallel=true
    org.gradle.daemon=true
    
  3. Ich habe diese Version entfernt und dann meine alte Version installiert, die funktioniert hat, aber das Problem war immer noch da :( 

  4. Firewall deaktivieren/aktivieren

  5. AntiVirus deaktivieren/aktivieren (Nod32)

  6. Windows neu installieren (8.1)

  7. Ich habe alle Versionen heruntergeladen (1.0.0, ..., 1.5.1, 2.0.0, 2.1)

  8. Ich habe einen Proxy benutzt


Systeminformationen :

  • CPU: Intel Core i5
  • Ram: 6,00 GB
  • Betriebssystem: Windows 8.1 64-Bit

build.gradle (Projekt: 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 (Modul: 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-Bericht nach dem Bau

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

Nach der Installation von Android Studio 2.0 stabile Version

  • 7:23:47 PM Gradle-Synchronisierung gestartet ====> 8:13:21 PM Die Gradle-Synchronisierung ist abgeschlossen
53

Das Problem ist gelöst !

Nach 2 Tagen Suche habe ich die Lösung gefunden, also möchte ich mit allen Leuten teilen, die das gleiche Problem haben. Das Problem ist, dass gradle in keinem Land eine Verbindung zum zentralen Repository herstellen kann. Wenn Sie ein neues Projekt oder einen neuen Import erstellen, ist Ihr Center-Repository standardmäßig jcenter(). Wenn Sie neue externe Abhängigkeiten erstellen, synchronisieren oder hinzufügen möchten, stellt gradle eine Verbindung zu https://bintray.com/ but her kann nicht und der Aufbauprozess wird warten, bis eine Verbindung zu jcenter() hergestellt wird. Daher kann dieser Vorgang lange dauern (+30 min), auch wenn Sie keine neuen Abhängigkeiten hinzufügen können.

Lösung:

  1. Stellen Sie sicher, dass Sie über die neueste stabile Version (aktuelle Version 2.0.0) verfügen.
  2. Stellen Sie sicher, dass Ihre Version 2.0.0 in build.gradle (classpath 'com.Android.tools.build:gradle:2.0.0') ist.
  3. Der letzte und wichtigste Schritt ist das Ändern von jcenter () in mavenCentral ().

So können Sie problemlos neue Abhängigkeiten und Synchronisierungsprojekte unter 3 Sekunden hinzufügen!

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
}

Habe Spaß

76

Sie könnten den Gradle Build-Prozess optimieren ... 

Versuchen Sie, den Gradle in den Offline-Modus zu setzen, und erzwingen Sie den Aufbau ohne Verbindung zu externen Repositorys wie folgt:

 enter image description here  enter image description here

Das hat mir sehr geholfen, denn in meiner Arbeit liegen alle Verbindungen hinter einem Proxy und erhöhen die Build-Zeit.

Wenn dies für Sie nicht ausreicht, testen Sie die Optionen unter Gradle> Experimental ... einige Optionen können die Leistung verbessern:

 enter image description here

4
Fabio Filho

Zusätzlich zu @Mehdi Jahed Manesh antworten Sie oben. 

Erhöhen Sie den dem Gradle-Daemon VM zugewiesenen Arbeitsspeicher um mindestens 1 GB, indem Sie die org.gradle.jvmargs-Eigenschaft wie folgt verwenden:

org.gradle.jvmargs=-Xmx2048m
2
ayz4sci

Für diejenigen, die Repositorys verwenden, für die eine Authentifizierung erforderlich ist , kann dieses Problem behoben werden, indem gradle so konfiguriert wird, dass nur ein einziges Authentifizierungsschema verwendet wird:

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

Es stellte sich heraus, dass gradle bei der Authentifizierung anhand von Repositorys versucht, sich nach allen Arten von Schemata zu authentifizieren. Die obige Konfiguration bewirkt, dass gradle nur die Basisauthentifizierung verwendet. Hier ist die vollständige Liste der verfügbaren Schemata.

1
Balazs Banyai

Sobald der erste Build abgeschlossen ist, aktivieren Sie den Offline-Modus in den Gradle-Einstellungen. Damit nicht alle aufeinanderfolgenden Builds Abhängigkeiten auflösen, sondern aus dem Cache. Wenn Sie eine neue Abhängigkeit hinzufügen, werden Sie dazu aufgefordert, den Offline-Modus zu deaktivieren und neu zu erstellen.  image of the gradle preview

1
Ismail Iqbal

Wie Ismail Iqbals Antwort sagte, gradle unter Offline-Modus setzen funktioniert für mich.

  1. Wenn Sie ein Android-Studio verwenden, folgen Sie Fabio Filhos Antwort

  2. Wenn Sie die Befehlszeile wie ich verwenden, können Sie es versuchen 

gradlew assembleReleaseStaging(your task name) --offline
0
iplus26

In meinem Fall habe ich das Problem gelöst, indem Sie eine neue Version des Java-JDK installiert haben ..__ Öffnen Sie AS nach der Installation des neuen JDKs, wählen Sie Datei → Projektstruktur → SDK-Speicherort und ändern Sie den JDK-Speicherort in den der neuen Version von das Java JDK. Dann werden Sie nach der Firewall-Berechtigung gefragt. Public überprüfen und bewerben. Lass es gradle lösen.