Java terminé avec une valeur de sortie différente de zéro 2 - Android Gradle

135

J'obtiens cette erreur lors de l'exécution de mon application Android (je l'ai nettoyée puis créée, mais l'erreur est toujours présente)

  • Synchroniser: OK
  • Faire un projet: OK
  • Nettoyer: OK
  • Exécuter: erreur

Erreur: l'exécution a échoué pour la tâche ': app: dexDebug' .com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command' C: \ Program Files \ Java \ jdk1.7.0 _25 \ bin \ java.exe '' terminé avec une valeur de sortie différente de zéro 2

Mon fichier gradle:

apply plugin: 'com.android.application'

android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
    applicationId "com.rzr.rzevallosr.miappdepruebas"
    minSdkVersion 19
    targetSdkVersion 21
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

productFlavors {
}

repositories {
    mavenCentral()
    flatDir {
        dirs 'libs'
    }
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])

// This library handles authentication and authorization
compile 'com.spotify.sdk:spotify-auth:1.0.0-beta9@aar'
// This library handles music playback
compile 'com.spotify.sdk:spotify-player:1.0.0-beta9@aar'

compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.android.support:recyclerview-v7:21.0.+'

compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
compile 'com.squareup.okhttp:okhttp:2.2.0'

compile files('libs/spotify-web-api-android-master-0.1.0.jar')
compile files('libs/okio-1.3.0.jar')
}

EDIT: Je n'ai pas vu "compile fileTree (dir: 'libs', include: ['* .jar'])" il compilait deux fois mes bibliothèques, donc je viens de commenter:

//compile 'com.squareup.retrofit:retrofit:1.9.0'
//compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
//compile 'com.squareup.okhttp:okhttp:2.2.0'

//compile files('libs/spotify-web-api-android-master-0.1.0.jar')
//compile files('libs/okio-1.3.0.jar')

et cela fonctionne très bien.

Maverick.pe
la source
2
@JaredBurrows Le problème dans mon cas était que mon application compilait deux fois les bibliothèques .. une sur "compile fileTree" (compile tous vos répertoires libs) et "compile ****".
Maverick.pe
Pouvez-vous s'il vous plaît poster une réponse et la marquer comme correcte?
Jared Burrows
@JaredBurrows terminé. Merci
Maverick.pe
s'il vous plaît vérifier mon message ici stackoverflow.com/a/33387368/740372
Sanjoy Saha
J'ai la même erreur mais mon fichier gradle n'a pas autant de compilations. Veuillez aider. J'ai posté cette question: stackoverflow.com/questions/34558251/... Je suis complètement nouveau dans le développement Android.
Ayusch

Réponses:

205

Ce problème est probablement dû au dépassement de la limite de dex de 65K méthodes imposée par Android. Ce problème peut être résolu soit par le nettoyage du projet, et la suppression des bibliothèques et des méthodes non utilisées de dépendances dans build.gradle, OU en ajoutant le support multidex.

Donc, si vous devez conserver des bibliothèques et des méthodes, vous pouvez activer le support multi dex en le déclarant dans la configuration gradle.

defaultConfig {        
    // Enabling multidex support.
    multiDexEnabled true
}

Vous pouvez en savoir plus sur la prise en charge multidex et le développement d' applications avec plus de 65K méthodes ici .

Minhazur
la source
heureux cela, cela vous a aidé. @David
minhazur
2
Merci beaucoup, cela m'a aidé
Aayushi
4
Et après cela, remplacez la méthode dans la classe de démarrage: @Override protected void attachBaseContext (Context base) {super.attachBaseContext (base); MultiDex.install (ceci); }
Gent Berani
Wow, cela fonctionne très bien. Je n'ai jamais pensé que cela pourrait être le problème.
Neela
Si vous voulez voir exactement ce qui cause l'erreur, essayez de créer votre projet via le terminal gradle, comme ceci ./gradlew assembleDebug --stacktrace --debug. J'ai vu cette erreur dans mon cascom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
NecipAllef
93

Pour moi, le problème était que j'avais mis un code de bibliothèque conforme inutile dans build.gradle

dependencies {
    compile 'com.google.android.gms:play-services:7.5.0'
}

ce qui causait plus de 65k méthodes, donc supprimé, synchronisation de gradle, projet nettoyé, puis réexécuté, puis cette erreur s'est arrêtée. J'avais juste besoin de cartes et de gcm alors j'ai mis ces lignes et un projet synchronisé

compile 'com.google.android.gms:play-services-gcm:7.5.0'
compile 'com.google.android.gms:play-services-location:7.5.0'

Salut les gens, j'ai de nouveau rencontré ce problème et cette fois, c'était à cause du changement de version des outils de construction et il m'a vraiment fallu activer multidex.. donc j'ai ajouté le fichier build.gradle de mon application.

defaultConfig {
    applicationId "com.am.android"
    minSdkVersion 13
    targetSdkVersion 23
    // Enabling multidex support.
    multiDexEnabled true
}

dexOptions {
    incremental true
    javaMaxHeapSize "2048M"
    jumboMode = true
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:multidex:1.0.1'
}

Et créez une classe qui étend la classe Application et incluez cette méthode dans la classe.

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

inclure également dans la méthode OnCreate

@Override
public void onCreate() {
    MultiDex.install(this);
    super.onCreate();
}
Amit Tumkur
la source
2
C'est la meilleure solution, vous ne devez inclure que les bibliothèques que vous utilisez réellement.
Roisgoen
2
travaille pour moi!! changez "compile 'com.google.android.gms: play-services: 7.5.0'" pour compiler "com.google.android.gms: play-services-identity: 8.1.0" compile "com.google.android. gms: play-services-plus: 8.1.0 "
Oscar Calderon
1
Belle, référez-vous également à: developer.google.com/android/guides/setup - fournissez une liste de différentes bibliothèques individuelles.
Ed Manners
@ edsappfactory.com j'ai fait référence à cela, utilisé et modifié.
Amit Tumkur
32

Juste au cas où quelqu'un a encore du mal avec cela et n'a aucune idée de pourquoi cela se produit et comment y remédier. En fait cette erreur

Erreur: l'exécution a échoué pour la tâche «: app: dexDebug». > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command' C: \ Program Files \ Java \ jdkx.x.x_xx \ bin \ java.exe '' terminé par valeur de sortie non nulle 2

peut avoir de nombreuses raisons, mais certainement pas quelque chose lié à votre version JDK, alors ne perdez pas votre temps dans la mauvaise direction. Ce sont deux raisons principales pour que cela se produise

  1. Vous avez la même bibliothèque ou le même fichier jar inclus plusieurs emplacements et certains d'entre eux sont en conflit les uns avec les autres.
  2. Vous êtes sur le point d'atteindre ou avez déjà dépassé la limite de 65 000 méthodes

Le premier cas peut être résolu comme suit: Découvrez les dépendances que vous avez incluses plusieurs fois. Pour ce faire, exécutez la commande suivante dans le terminal Android Studio

gradlew -q dependencies yourProjectName_usually_app:dependencies --configuration compile

cela renverra toutes les dépendances, mais les fichiers jar que vous incluez du dossier lib essaient de se débarrasser de la duplication marquée d'un astérisque (*), ce n'est pas toujours possible mais dans certains cas, vous pouvez toujours le faire, après cela essayez d'exclure les modules qui sont inclus plusieurs fois, vous pouvez le faire comme ça

compile ('com.facebook.android:facebook-android-sdk:4.0.1'){
    exclude module: 'support-v4'
}

Pour le deuxième cas, lorsque vous dépassez la limite de méthode, la suggestion est d'essayer de la minimiser en supprimant les bibliothèques incluses (la note ressemble à la première solution) si aucun moyen de le faire, ajoutez multiDexEnabled true à votre defaultConfig

defaultConfig {
   ...
   ...
   multiDexEnabled true
}

cela augmente la limite de méthode, mais ce n'est pas la meilleure chose à faire en raison de problèmes de performances possibles IMPORTANT l' ajout uniquement multiDexEnabled trueà defaultConfign'est pas suffisant en fait sur tous les appareils exécutant android <5 Lollipop, cela entraînera un comportement inattendu et NoClassDefFoundError. comment le résoudre est décrit ici

Vilen
la source
18

Je ne savais pas (à ce moment-là) que "compile fileTree (dir: 'libs', include: ['* .jar'])" compile tout ce qui a l'extension jar sur le dossier libs, donc je viens de commenter (ou supprimer) ceci lignes:

//compile 'com.squareup.retrofit:retrofit:1.9.0'
//compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
//compile 'com.squareup.okhttp:okhttp:2.2.0'

//compile files('libs/spotify-web-api-android-master-0.1.0.jar')
//compile files('libs/okio-1.3.0.jar')

et cela fonctionne très bien. Merci quand même! Ma faute.

Maverick.pe
la source
5
ou l'inverse: commenter compile fileTree(dir: 'libs', include: ['*.jar'])en gradle. Cela m'a aidé.
Tomasz Mularczyk
existe-t-il une autre solution à ce problème? Je n'ai pas compilé chaque fichier jar, mais j'ai simplement utilisé cette ligne, compile fileTree(dir: 'libs', include: ['*.jar'])mais elle montre toujours la même erreur.
Kairi San
9

J'ai eu le même problème et j'ai corrigé la suppression de la bibliothèque qui n'était pas nécessaire

compile fileTree(dir: 'libs', include: ['*.jar'])

J'ai supprimé cette bibliothèque et j'ai pu exécuter le projet sans aucun problème.

Alexiscanny
la source
J'essayais d'ajouter la classe glissantMenu et la suppression de cela de mon grade principal a fonctionné pour moi. Merci! :)
Lucas Senechal
6

Le mien a été résolu en activant multiDex pour les versions de débogage.

defaultConfig {
multiDexEnabled true
}
Armin
la source
6

Je rejette le JDK intégré (en 32 bits) car le JDK intégré est de 64 bits

Cliquez avec le bouton droit sur votre projet -> Ouvrir les paramètres du module -> Emplacement du SDK -> Décochez Utiliser le JDk intégré puis définissez votre chemin JDK, par exemple dans Ubuntu / usr / lib / jvm / java-8-openjdk-i386

ugali doux
la source
1
Je pense que cela fonctionne car le JDK intégré est de 64 bits. J'ai eu le même problème sur ma machine 32 bits.
Lukas Novak
Cela a résolu le problème sur ma machine 32 bits. echo $JAVA_HOMEpour le chemin
échantillons SANBI
Oui, je savais que cela avait à voir avec ma machine 32 bits. Merci, Zacharia - m'a sauvé la journée!
Ilonpilaaja
5

Problème possible: vous avez dépassé la limite de 65 000 méthodes de dex, avez-vous peut-être ajouté une bibliothèque ou plusieurs méthodes avant que le problème ne se produise?

Artem Zinnatullin
la source
1
Pas plusieurs ... juste quelques méthodes.
Maverick.pe
Hm, essayez de construire la version précédente du projet ou supprimez la (les) bibliothèque (s) inutilisée (s) si c'est possible et faites la reconstruction
Artem Zinnatullin
J'ai juste quelques méthodes aussi
bowman han
3

Si vous avez déjà mis à jour votre SDK et que vous utilisez également les services google-play, vous devez vous occuper de la dépendance car il existe une sorte de conflit avec:

Suivez ce qui suit: compilez 'com.google.android.gms: play-services: +' Remplacez par compilez 'com.google.android.gms: play-services: 6.5.87'

Remarque: Ici, «6.5.87» est la version du service google-play. J'espère que cela aidera..

Maddy
la source
2

Je pense que ce sont des conflits de fichier .jar dans votre projet.

J'ai supprimé android-support-v4.jar du dossier libs et son fonctionnement !!!

si votre projet donne une erreur, archivez votre fichier build.gradle

dépendances {

}

Samir Mangroliya
la source
2

Dans mon cas, le problème était que la nouvelle bibliothèque (dépendance gradle) que j'avais ajoutée reposait sur d'autres dépendances et que deux de ces dépendances sous-jacentes étaient en conflit / en conflit avec certaines dépendances d'autres bibliothèques / dépendances dans mon script de construction. Plus précisément, j'ai ajouté Apache Commons Validator(pour la validation des e-mails), et deux de ses dépendances (Apache Commons Logginget Apache Commons Collections) étaient en conflit avec celles utilisées par Robolectric (car différentes versions des mêmes bibliothèques étaient présentes dans mon chemin de construction). J'ai donc exclu ces versions en conflit des dépendances ( modules) lors de l'ajout de la nouvelle dépendance (la Validator):

compile ('commons-validator:commons-validator:1.4.1') {
    exclude module: 'commons-logging'
    exclude module: 'commons-collections'
}

Vous pouvez voir les dépendances de vos modules gradle (vous pourriez n'avoir qu'un seul module dans votre projet) à l'aide de la commande gradle suivante (j'utilise le wrapper gradle qui est créé pour vous si vous avez créé votre projet dans Android Studio / Intellij Idée). Exécutez cette commande dans le répertoire racine de votre projet:

./gradlew: VOTRE-NOM-DE-MODULE: dépendances

Après avoir ajouté ces excludedirectives et réessayer de s'exécuter, j'ai eu une duplicate fileerreur car elle NOTICE.txtest utilisée par certaines bibliothèques apache commons telles que Logging et Collections. J'ai dû exclure ce fichier texte lors de l'emballage. Dans mon build.gradle, j'ai ajouté:

packagingOptions {
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/NOTICE.txt'
}

Il s'est avéré que la nouvelle bibliothèque (la Validator) peut fonctionner avec des versions légèrement plus anciennes de ses dépendances / modules (qui sont déjà importées dans mon chemin de construction par une autre bibliothèque (Robolectric)). C'était le cas avec cette bibliothèque spécifique, mais d'autres bibliothèques peuvent utiliser la dernière API des dépendances sous-jacentes (auquel cas vous devez essayer de voir si les autres bibliothèques qui reposent sur le module / dépendance en conflit sont capables de fonctionner avec le version plus récente (en excluant l'ancienne version du module / dépendance sous les entrées de ces bibliothèques)).

Javad Sadeqzadeh
la source
1

Dans mon cas, j'ai cette erreur lorsqu'il y a 2 ou plusieurs bibliothèques en conflit (même bibliothèque mais versions différentes). Vérifiez votre application build.gradle dans le bloc de dépendances.

Phuc Tran
la source
1

Il existe deux alternatives qui fonctionneront à coup sûr:

  1. Nettoyez votre projet, puis construisez.

Si la méthode ci-dessus n'a pas fonctionné, essayez la suivante.

  1. Ajoutez ce qui suit au fichier build.gradle au niveau de l'application

    defaultConfig {   
    
    multiDexEnabled true
    
    }
Udit Kapahi
la source
J'ai essayé les deux, mais j'ai une nouvelle erreur Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'. > java.util.zip.ZipException: duplicate entry: android/support/v4/view/MotionEventCompatEclair.class, que dois-je faire ensuite?
Kairi San
cette erreur se produit en raison de paquets dupliqués / identiques dans votre projet
Udit Kapahi
1

La mise à jour de mon SDK Java vers la dernière version 1.7.0_79et la mise à jour du SDK Locationsous ont Project Structurerésolu le problème pour moi.

TheIT
la source
1

Mon problème était qu'en plus d'avoir

com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Processus 'commande' /Library/Java/JavaVirtualMachines/jdk1.X.X_XX .jdk / Contents / Home / bin / java '' terminé avec une valeur de sortie différente de zéro 2

J'avais aussi cette trace:

Erreur de traduction non interceptée: java.lang.IllegalArgumentException: déjà ajouté: Lcom / mypackage / ClassX;

Le problème était que j'ajoutais la même classe dans deux bibliothèques différentes. En supprimant le fichier class / jar de l'une des bibliothèques, le projet s'exécute correctement

mromer
la source
Exactement, j'ai eu le même problème, la même signature de classe, heureusement c'était ma classe alors je l'ai refactorisée. J'ai écrit la réponse ici: stackoverflow.com/a/35045501/3397345
Davideas
1

Pour moi, j'ajoutais toutes les dépendances du Playstore

compilez "com.google.android.gms: play-services: 8.4.0"

Mais je n'avais besoin que de google map, donc je l'ai rendu plus précis et l'erreur a été résolue.

compilez "com.google.android.gms: play-services-maps: 8.4.0"

Ajji
la source
0

dans mon cas, le problème était la version des outils de construction qui était 23.0.0 rc3 et j'ai changé en 22.0.1 et mon problème a été corrigé.

max
la source
0

Vous utilisez peut-être un câble de mauvaise qualité / câble défectueux pour connecter votre appareil au PC, j'ai remplacé le câble et cela a fonctionné pour moi.

Mushtaq Jameel
la source
0

Cette erreur est due à l'utilisation d'un plus grand nombre de bibliothèques.Dans mon cas, 'compile' com.google.android.gms: play-services-9.4.0 'a causé cette erreur.Pour éviter cette erreur, utilisez les bibliothèques nécessaires.Par exemple, si vous le souhaitez pour utiliser Maps dans votre application.Ensuite, utilisez compile 'com.google.android.gms: play-services-maps: 9.4.0'. tout en ajoutant la dépendance des services google play, spécifiez uniquement les bibliothèques nécessaires.par défaut, il inclut toutes les bibliothèques.

Rajesh.k
la source
0

Dans votre gradle.buildfichier, utilisez ceci

"compile fileTree(dir: 'libs', include: ['*.jar'])"

Et cela fonctionne très bien.

Rishabh Mahatha
la source
0

Si vous voulez voir exactement ce qui cause l'erreur, essayez de créer votre projet via le terminal gradle, comme ceci ./gradlew assembleDebug --stacktrace --debug. J'ai vu l'erreur suivante dans mon cascom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

Cela s'est produit lorsque j'essayais d'intégrer Google Maps à mon projet. Pour résoudre ce problème, j'ai simplement vérifié les bibliothèques que j'incluais

compile 'com.google.android.gms:play-services:9.8.0'

Je l'ai simplement changé en

compile 'com.google.android.gms:play-services-maps:9.8.0'

et le problème était parti

NecipAllef
la source
0

J'ai eu la même erreur après avoir converti mon projet en Kotlin. Mon problème était que mon emplacement jre a été changé pour un chemin invalide pendant le processus (je me demande pourquoi cela pourrait arriver ... m'a fait perdre du temps). Corrigé en faisant ceci:

File > Project Structure > SDK Location 

Décochez l' Use embedded JDKoption qui pointe vers une ancienne installation JDK et sélectionnez la bonne:

/home/my_user/jdk1.8.0_101

Après avoir changé cela, l'erreur a disparu

voghDev
la source
0

A travaillé pour moi :)

J'ai mis à niveau le java vers la dernière version 8 auparavant, il était 7, puis je suis allé dans OPEN MODULE SETTING en cliquant avec le bouton droit sur le projet et j'ai changé le chemin jdk en / usr / lib / jvm / java-8-oracle le nouveau java 8 installé. Et redémarrez le studio

archiver / usr / lib / jvm pour le nom du dossier java 8

J'utilise ubuntuentrez la description de l'image ici

jayant singh
la source