Java endete mit einem Exit-Wert ungleich Null 2 ​​- Android Gradle


135

Ich erhalte diesen Fehler beim Ausführen meiner Android-App (ich habe sie bereinigt und dann erstellt, aber der Fehler ist immer noch vorhanden)

  • Synchronisieren: OK
  • Projekt erstellen: OK
  • Sauber: OK
  • Ausführen: Fehler

Fehler: Ausführung für Task ': app: dexDebug' .com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Prozess 'Befehl' C: \ Programme \ Java \ jdk1.7.0 _25 \ bin \ java.exe '' beendet mit einem Exit-Wert ungleich Null 2

Meine Gradle-Datei:

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

BEARBEITEN: Ich habe nicht gesehen, dass "compile fileTree (dir: 'libs', include: ['* .jar'])" zweimal meine Bibliotheken kompiliert hat, also kommentiere ich nur:

//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')

und es funktioniert gut.


2
@JaredBurrows Das Problem in meinem Fall war, dass meine App zweimal die Bibliotheken kompilierte. Eine auf "compile fileTree" (kompiliert alle Ihre libs-Verzeichnisse) und "compile ****".
Maverick.pe

Können Sie bitte eine Antwort posten und als richtig markieren?
Jared Burrows

@ JaredBurrows fertig. Danke
Maverick.pe

Bitte überprüfen Sie meinen Beitrag hier stackoverflow.com/a/33387368/740372
Sanjoy Saha

Ich habe den gleichen Fehler, aber meine Gradle-Datei enthält nicht so viele Kompilierungen. Bitte helfen Sie. Ich habe diese Frage gestellt: stackoverflow.com/questions/34558251/… Ich bin völlig neu in der Android-Entwicklung.
Ayusch

Antworten:


205

Dieses Problem ist möglicherweise darauf zurückzuführen, dass das von Android festgelegte Dex-Limit für 65K-Methoden überschritten wurde. Dieses Problem kann nicht gelöst werden , indem das Projekt Reinigung und einige nicht genutzte Bibliotheken und Methoden von Abhängigkeiten in build.gradle entfernen, OR durch multidex Unterstützung hinzufügen.

Wenn Sie also Bibliotheken und Methoden behalten müssen, können Sie die Multi-Dex-Unterstützung aktivieren, indem Sie sie in der Gradle-Konfiguration deklarieren.

defaultConfig {        
    // Enabling multidex support.
    multiDexEnabled true
}

Weitere Informationen zur Multidex-Unterstützung und zur Entwicklung von Apps mit mehr als 65.000 Methoden finden Sie hier .


froh, dass es dir geholfen hat. @ David
Minhazur

2
Vielen Dank, es hat mir geholfen
Aayushi

4
Und danach überschreiben Sie die Methode in der Startklasse: @Override protected void attachBaseContext (Kontextbasis) {super.attachBaseContext (Basis); MultiDex.install (this); }
Gent Berani

Wow, es funktioniert großartig. Ich hätte nie gedacht, dass dies das Problem sein könnte.
Neela

Wenn Sie sehen möchten, was genau den Fehler verursacht, versuchen Sie, Ihr Projekt wie folgt über das Gradle-Terminal zu erstellen ./gradlew assembleDebug --stacktrace --debug. Ich habe diesen Fehler in meinem Fall gesehencom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
NecipAllef

93

Für mich war das Problem, dass ich einen unnötigen Complie-Bibliothekscode in build.gradle eingefügt hatte

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

Das verursachte über 65.000 Methoden, also entfernte es, synchronisierte die Synchronisierung, bereinigte das Projekt und lief dann erneut und dann hörte dieser Fehler auf. Ich brauchte nur Karten und gcm, also habe ich diese Zeilen eingefügt und das Projekt synchronisiert

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

Hallo Leute, ich bin wieder auf dieses Problem gestoßen und dieses Mal war es wegen der Änderung der Version der Build-Tools und ich musste wirklich Multidex aktivieren. Also habe ich die build.gradle-Datei meiner App hinzugefügt.

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

Erstellen Sie eine Klasse, die die Anwendungsklasse erweitert, und fügen Sie diese Methode in die Klasse ein.

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

auch in der OnCreate-Methode enthalten

@Override
public void onCreate() {
    MultiDex.install(this);
    super.onCreate();
}

2
Dies ist die beste Lösung. Sie sollten nur die Bibliotheken einschließen, die Sie tatsächlich verwenden.
Roisgoen

2
funktioniert bei mir!! Ändern Sie "compile 'com.google.android.gms: play-services: 7.5.0'" in compile "com.google.android.gms: play-services-identity: 8.1.0" compile "com.google.android. gms: play-services-plus: 8.1.0 "
Oscar Calderon

1
Nizza, siehe auch: developer.google.com/android/guides/setup - bieten eine Liste verschiedener einzelner Bibliotheken.
Ed Manners

@ edsappfactory.com Ich verwies darauf, verwendet und modifiziert.
Amit Tumkur

32

Nur für den Fall, dass jemand immer noch damit zu kämpfen hat und keine Ahnung hat, warum dies geschieht und wie es behoben werden kann. In der Tat dieser Fehler

Fehler: Ausführung für Task ': app: dexDebug' fehlgeschlagen. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Prozess 'Befehl' C: \ Programme \ Java \ jdkx.x.x_xx \ bin \ java.exe '' beendet mit Exit-Wert ungleich Null 2

Es kann viele Gründe geben, aber sicherlich nichts, was mit Ihrer JDK-Version zu tun hat. Verschwenden Sie also nicht Ihre Zeit in die falsche Richtung. Dies sind zwei Hauptgründe dafür

  1. Sie haben dieselbe Bibliothek oder JAR-Datei an mehreren Stellen, von denen einige miteinander in Konflikt stehen.
  2. Sie haben das 65k-Methodenlimit erreicht oder bereits überschritten

Der erste Fall kann wie folgt behoben werden: Finden Sie heraus, welche Abhängigkeiten Sie mehrfach aufgenommen haben. Führen Sie dazu den folgenden Befehl im Android Studio Terminal aus

gradlew -q dependencies yourProjectName_usually_app:dependencies --configuration compile

Dies gibt alle Abhängigkeiten zurück, aber JAR-Dateien, die Sie aus dem lib-Ordner einschließen, versuchen, mit einem Sternchen (*) gekennzeichnete Duplikate zu entfernen. Dies ist nicht immer möglich, aber in einigen Fällen können Sie dies trotzdem tun, nachdem Sie versucht haben, Module auszuschließen, die sind viele Male enthalten, können Sie es so machen

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

Für den zweiten Fall, wenn Sie den Vorschlag für ein Methodenlimit überschreiten, sollten Sie versuchen, ihn zu minimieren, indem Sie die enthaltenen Bibliotheken entfernen (Anmerkung klingt wie die erste Lösung), wenn dies nicht möglich ist. Fügen Sie Ihrer defaultConfig multiDexEnabled true hinzu

defaultConfig {
   ...
   ...
   multiDexEnabled true
}

Dies erhöht die Methodenbeschränkung, ist jedoch aufgrund möglicher Leistungsprobleme nicht das Beste. WICHTIG Das Hinzufügen nur multiDexEnabled truezu defaultConfigist in der Tat nicht ausreichend auf allen Geräten, auf denen Android <5 Lollipop ausgeführt wird. Dies führt zu unerwartetem Verhalten und NoClassDefFoundError. Wie man es löst, wird hier beschrieben


18

Ich wusste (bis dahin) nicht, dass "compile fileTree (dir: 'libs', include: ['* .jar'])" alles kompiliert, was die jar-Erweiterung im libs-Ordner hat, also kommentiere (oder lösche) ich dies einfach Linien:

//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')

und es funktioniert gut. Danke trotzdem! Mein Fehler.


5
oder umgekehrt: Kommentar compile fileTree(dir: 'libs', include: ['*.jar'])in Gradle. Es hat mir geholfen.
Tomasz Mularczyk

Gibt es eine andere Lösung für dieses Problem? Ich habe nicht jede JAR-Datei kompiliert, sondern nur diese Zeile verwendet, compile fileTree(dir: 'libs', include: ['*.jar'])aber es wird immer noch der gleiche Fehler angezeigt.
Kairi San

9

Ich hatte das gleiche Problem und habe das Entfernen der Bibliothek behoben, die nicht notwendig waren

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

Ich habe diese Bibliothek entfernt und konnte das Projekt problemlos ausführen.


Ich habe versucht, die SlidingMenu-Klasse hinzuzufügen, und das Entfernen von meiner Hauptklasse hat für mich funktioniert. Vielen Dank! :)
Lucas Senechal

6

Meins wurde gelöst, indem multiDex für Debug-Builds aktiviert wurde.

defaultConfig {
multiDexEnabled true
}

6

Ich lehne eingebettetes JDK (in 32 Bit) ab, da eingebettetes JDK 64 Bit ist

Rechtsklicken Sie Ihr Projekt -> Modul öffnen Einstellung -> SDK Location -> Deaktivieren Sie die Option Embedded JDK dann stellen Sie Ihre JDK - Pfad, zum Beispiel in Ubuntu / usr / lib / jvm / java-8-openjdk-i386


1
Ich denke, das funktioniert, weil Embedded JDK 64bit ist. Ich hatte das gleiche Problem auf meinem 32-Bit-Computer.
Lukas Novak

Dies hat das Problem auf meinem 32-Bit-Computer behoben. echo $JAVA_HOMEfür den Weg
SANBI Samples

Ja, ich wusste, dass es damit zu tun hat, dass mein Computer 32-Bit ist. Danke, Zacharia - hat meinen Tag gerettet!
Ilonpilaaja

5

Mögliches Problem: Sie haben das Limit für Dex 65k-Methoden überschritten. Haben Sie möglicherweise eine Bibliothek oder mehrere Methoden hinzugefügt, bevor das Problem aufgetreten ist?


1
Nicht mehrere ... nur ein paar Methoden.
Maverick.pe

Hm, versuchen Sie, eine frühere Version des Projekts zu erstellen oder nicht verwendete Bibliotheken zu entfernen, wenn dies möglich ist, und
erstellen

Ich habe auch nur ein paar Methoden
Bowman Han

3

Wenn Sie Ihr SDK bereits aktualisiert haben und auch Google-Play-Dienste verwenden, müssen Sie sich um die Abhängigkeit kümmern, da es einige Konflikte gibt mit:

Befolgen Sie die nachstehenden Anweisungen: Kompilieren Sie 'com.google.android.gms: Wiedergabedienste: +' Durch Kompilieren ersetzen 'com.google.android.gms: Wiedergabedienste: 6.5.87'

Hinweis: Hier ist '6.5.87' die Google-Play-Service-Version. Ich hoffe es wird helfen ..


2

Ich denke, es sind Konflikte der .jar-Datei in Ihrem Projekt.

Ich habe android-support-v4.jar aus dem libs-Ordner entfernt und es funktioniert !!!

Wenn Ihr Projekt einen Fehler enthält, überprüfen Sie Ihre build.gradle-Datei

Abhängigkeiten {

}}


2

In meinem Fall bestand das Problem darin, dass die neue Bibliothek (Gradle-Abhängigkeit), die ich hinzugefügt hatte, auf einigen anderen Abhängigkeiten beruhte und zwei dieser zugrunde liegenden Abhängigkeiten mit einigen Abhängigkeiten anderer Bibliotheken / Abhängigkeiten in meinem Build-Skript in Konflikt standen / kollidierten. Insbesondere habe ich Apache Commons hinzugefügt Validator(zur E-Mail-Validierung), und zwei seiner Abhängigkeiten (Apache Commons Loggingund Apache Commons Collections) standen im Widerspruch zu denen, die von Robolectric verwendet wurden (da in meinem Erstellungspfad verschiedene Versionen derselben Bibliotheken vorhanden waren). Daher habe ich diese widersprüchlichen Versionen von dependencies ( modules) beim Hinzufügen der neuen Abhängigkeit (the Validator) ausgeschlossen:

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

Sie können die Abhängigkeiten Ihrer Gradle-Module (möglicherweise haben Sie nur ein Modul in Ihrem Projekt) mit dem folgenden Gradle-Befehl anzeigen (ich verwende den Gradle-Wrapper, der für Sie erstellt wird, wenn Sie Ihr Projekt in Android Studio / Intellij erstellt haben Idee). Führen Sie diesen Befehl im Stammverzeichnis Ihres Projekts aus:

./gradlew: IHR MODULNAME: Abhängigkeiten

Nachdem ich diese excludeAnweisungen hinzugefügt und erneut versucht hatte, sie auszuführen, wurde ein duplicate fileFehler angezeigt, NOTICE.txtder von einigen Apache-Commons-Bibliotheken wie Protokollierung und Sammlungen verwendet wird. Ich musste diese Textdatei beim Verpacken ausschließen. In meinem build.gradle habe ich hinzugefügt:

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

Es stellte sich heraus, dass die neue Bibliothek (die Validator) mit etwas älteren Versionen ihrer Abhängigkeiten / Module arbeiten kann (die bereits von einer anderen Bibliothek (Robolectric) in meinen Erstellungspfad importiert wurden). Dies war bei dieser spezifischen Bibliothek der Fall, aber andere Bibliotheken verwenden möglicherweise die neueste API der zugrunde liegenden Abhängigkeiten (in diesem Fall müssen Sie versuchen, festzustellen, ob die anderen Bibliotheken, die sich auf das in Konflikt stehende Modul / die in Konflikt stehende Abhängigkeit stützen, mit der Bibliothek arbeiten können neuere Version (durch Ausschließen der älteren Version des Moduls / der Abhängigkeit unter den Einträgen dieser Bibliotheken)).


1

In meinem Fall wurde dieser Fehler angezeigt, wenn zwei oder mehr Bibliotheken in Konflikt stehen (gleiche Bibliothek, aber unterschiedliche Versionen). Überprüfen Sie Ihre App build.gradle im Abhängigkeitsblock.


1

Es gibt zwei Alternativen, die sicher funktionieren:

  1. Bereinigen Sie Ihr Projekt und erstellen Sie es dann.

Wenn die oben beschriebene Methode nicht funktioniert hat, versuchen Sie es mit der nächsten.

  1. Fügen Sie der Datei build.gradle auf App-Ebene Folgendes hinzu

    defaultConfig {   
    
    multiDexEnabled true
    
    }

Ich habe beide ausprobiert, aber ich habe einen neuen Fehler Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'. > java.util.zip.ZipException: duplicate entry: android/support/v4/view/MotionEventCompatEclair.class. Was soll ich als nächstes tun?
Kairi San


Dieser Fehler tritt aufgrund doppelter / gleicher Pakete in Ihrem Projekt auf
Udit Kapahi

1

Das Aktualisieren meines Java SDK auf die neueste Version 1.7.0_79und das Aktualisieren des SDK LocationUnter haben Project Structuredas Problem für mich gelöst.


1

Mein Problem war, dass abgesehen davon

com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Prozess 'Befehl' /Library/Java/JavaVirtualMachines/jdk1.X.X_XX .jdk / Contents / Home / bin / java '' beendet mit einem Exit-Wert ungleich Null 2

Ich hatte auch diese Spur:

Nicht erfasster Übersetzungsfehler: java.lang.IllegalArgumentException: bereits hinzugefügt: Lcom / mypackage / ClassX;

Das Problem war, dass ich dieselbe Klasse in zwei verschiedenen Bibliotheken hinzufügte. Wenn Sie die Klassen- / JAR-Datei aus einer der Bibliotheken entfernen, wird das Projekt ordnungsgemäß ausgeführt


Genau, ich habe das gleiche Problem, die gleiche Klassensignatur, zum Glück war es meine Klasse, also habe ich sie überarbeitet. Ich schrieb Antwort hier: stackoverflow.com/a/35045501/3397345
Davideas

1

Für mich habe ich die gesamten Playstore-Abhängigkeiten hinzugefügt

kompiliere 'com.google.android.gms: play-services: 8.4.0'

Aber ich brauchte nur Google Map, also habe ich es spezifischer gemacht und der Fehler wurde behoben.

kompiliere 'com.google.android.gms: play-services-maps: 8.4.0'


0

In meinem Fall war das Problem die Build Tools Version, die 23.0.0 rc3 war und ich wechselte zu 22.0.1 und mein Problem wurde behoben.


0

Möglicherweise verwenden Sie ein Kabel von geringer Qualität / ein defektes Kabel, um Ihr Gerät an den PC anzuschließen. Ich habe das Kabel ausgetauscht und es hat bei mir funktioniert.


0

Dieser Fehler ist auf die Verwendung einer größeren Anzahl von Bibliotheken zurückzuführen. In meinem Fall hat 'compile' com.google.android.gms: play-services-9.4.0 'diesen Fehler verursacht. Um diesen Fehler zu vermeiden, verwenden Sie beispielsweise die erforderlichen Bibliotheken Verwenden Sie dann die Kompilierung 'com.google.android.gms: play-services-maps: 9.4.0'. Geben Sie beim Hinzufügen der Abhängigkeit von google play services nur die erforderlichen Bibliotheken an. Standardmäßig enthält sie alle Bibliotheken.


0

gradle.buildVerwenden Sie dies in Ihrer Datei

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

Und es funktioniert gut.


0

Wenn Sie sehen möchten, was genau den Fehler verursacht, versuchen Sie, Ihr Projekt wie folgt über das Gradle-Terminal zu erstellen ./gradlew assembleDebug --stacktrace --debug. Ich habe in meinem Fall den folgenden Fehler gesehencom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

Dies geschah, als ich versuchte, Google Maps in mein Projekt zu integrieren. Um das Problem zu beheben, habe ich einfach die Bibliotheken überprüft, die ich aufgenommen habe

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

Ich habe es einfach geändert

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

und das Problem war weg


0

Ich hatte den gleichen Fehler nach der Konvertierung meines Projekts in Kotlin. Mein Problem war, dass mein jre-Standort während des Vorgangs in einen ungültigen Pfad geändert wurde (ich frage mich, warum dies passieren konnte ... ich habe Zeit verschwendet). Es wurde dadurch behoben:

File > Project Structure > SDK Location 

Deaktivierte die Use embedded JDKOption, die auf eine alte JDK-Installation zeigte, und wählte die richtige aus:

/home/my_user/jdk1.8.0_101

Nachdem dies geändert wurde, verschwand der Fehler


0

Für mich gearbeitet :)

Ich habe das Java auf die neueste Version 8 aktualisiert, bevor es 7 war. Dann gehe ich zu OPEN MODULE SETTING, klicke mit der rechten Maustaste auf das Projekt und ändere den JDK-Pfad in / usr / lib / jvm / java-8-oracle das neu installierte Java 8. Und starten Sie das Studio neu

Überprüfen Sie in / usr / lib / jvm den Namen des Java 8-Ordners

Ich benutze UbuntuGeben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.