web-dev-qa-db-fra.com

Le niveau de construction d'Android est trop lent (résolution de dépendance).

Je travaille avec Android Studio (ma version actuelle 1.5) depuis 2 ans. Tout allait bien, mais lorsque j'ai téléchargé Canary (2.1 p5), tout s'est mal passé. Chaque fois que je veux créer un nouveau projet ou ouvrir un projet, synchroniser ou importer une nouvelle bibliothèque ou dépendance, gradle prend trop de temps à construire - presque 20 min .

Je n'ai rien fait, je viens de télécharger la version canarienne et de l'exécuter.

Symptômes :

  1. C'est arrivé quand je me suis connecté à Internet
  2. Le premier délai concerne Gradle: Résoudre les dépendances ': app: _debugCompile'
  3. ...
  4. Après 25 minutes de construction presque terminée

Remarque : Lorsque je déconnecte Internet, gradle se termine aussi vite que possible


J'ai essayé de résoudre ce problème de cette manière :

  1. J'ai changé le gradle en travail hors ligne (cela a fonctionné mais je ne veux pas de cette façon, car je veux importer des bibliothèques ou des dépendances)
  2. J'ai créé un nouveau fichier (le nom de fichier est gradle.properties) dans C:\Users\username\.gradle, puis j'ai écrit ces lignes.

    org.gradle.parallel=true
    org.gradle.daemon=true
    
  3. J'ai enlevé cette version puis installé l'ancienne version qui fonctionnait bien mais le problème était toujours là :( 

  4. Désactiver/Activer le pare-feu

  5. Désactiver/Activer AntiVirus (Nod32)

  6. Réinstallez le système d'exploitation Windows (8.1)

  7. J'ai téléchargé toutes les versions (1.0.0, ..., 1.5.1, 2.0.0, 2.1)

  8. J'ai utilisé un proxy


Information système :

  • CPU: Intel Core i5
  • RAM: 6.00 GB
  • Système d'exploitation: Windows 8.1 64 bits

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

Rapport après construction

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

Après l'installation de la version stable d'Android studio 2.0

  • 19:23:47 PM La synchronisation du dégradé a commencé ====> 20:13:21 PM La synchronisation du dégradé est terminée.
53
Mehdi Jahed Manesh

Le problème est résolu !

Après 2 jours de recherche, j'ai eu la solution, alors j'aimerais partager avec toutes les personnes qui peuvent avoir le même problème. Le problème est que gradle ne peut pas se connecter au référentiel central dans certains pays. Lorsque vous créez un nouveau projet ou une importation, le référentiel de votre centre est jcenter() par défaut et chaque fois que vous souhaitez créer, synchroniser ou ajouter une nouvelle dépendance externe, gradle va se connecter à https://bintray.com/ mais il ne peut pas et le processus de construction va attendre jusqu’à la connexion à jcenter(), ce processus peut donc prendre beaucoup de temps (+30 min), même si vous ne pouvez pas ajouter de nouvelle dépendance.

Solution :

  1. Assurez-vous d'avoir la dernière version stable (version 2.0.0 actuelle)
  2. Assurez-vous que votre version de Gradle est 2.0.0 dans build.gradle (classpath 'com.Android.tools.build:gradle:2.0.0')
  3. La dernière étape et la plus importante est de changer votre jcenter () en mavenCentral ()

Ainsi, vous pouvez facilement ajouter un nouveau projet de dépendance et de synchronisation sous 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
}

S'amuser

76
Mehdi Jahed Manesh

Vous pouvez optimiser le processus de construction de Gradle ... 

Essayez de mettre le gradle en mode hors ligne, ce qui oblige à construire sans connexion à des référentiels externes, comme ceci:

 enter image description here  enter image description here

Cela m'a beaucoup aidé, car dans mon travail, toutes les connexions sont derrière un proxy et augmentent le temps de construction.

Si cela ne vous suffit pas, prenez le temps de tester les options de Gradle> Experimental ... Certaines options peuvent améliorer vos performances:

 enter image description here

4
Fabio Filho

En plus de @Mehdi Jahed Manesh, répondez ci-dessus. 

Augmentez la quantité de mémoire allouée au démon Gradle VM de 1 Go, à un minimum de 2 Go, à l'aide de la propriété org.gradle.jvmargs suivante:

org.gradle.jvmargs=-Xmx2048m
2
ayz4sci

Pour ceux qui utilisent des référentiels nécessitant une authentification , ce problème peut être résolu en configurant gradle de manière à n'utiliser qu'un seul schéma d'authentification:

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

Il s’est avéré que lorsqu’il s’authentifiait auprès des référentiels, Gradle tentait de s’authentifier à l’aide de tout un ensemble de schémas. La configuration ci-dessus fait en sorte que Gradle n’utilise que l’authentification de base. Ici est la liste complète des régimes disponibles.

1
Balazs Banyai

Une fois la construction initiale terminée, essayez d'activer le mode hors ligne à partir des paramètres de dégradé. Pour que toutes les générations consécutives ne commencent pas à résoudre les dépendances, elles sont extraites du cache. Si vous ajoutez une nouvelle dépendance, il vous sera demandé de désactiver le mode hors connexion et de le reconstruire.  image of the gradle preview

1
Ismail Iqbal

Comme La réponse d'Ismail Iqbal a dit, mettre gradle sous le mode hors connexion fonctionne pour moi.

  1. Si vous utilisez Android Studio, suivez La réponse de Fabio Filho

  2. Si vous utilisez la ligne de commande comme moi, vous pouvez essayer 

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

Dans mon cas, je l'ai résolu en installant une nouvelle version du JDK Java . Après l'installation du nouveau JDK, ouvrez AS, accédez à Fichier → Structure du projet → Emplacement du SDK, puis modifiez l'emplacement du JDK par celui de la nouvelle version de le JDK Java. Ensuite, il vous sera demandé l'autorisation du pare-feu; Cochez Public et postulez. Laisse le résoudre.