Android Studio: Gradle - Build schlägt fehl - Ausführung für Task ': dexDebug' fehlgeschlagen

82

Error:

Gradle: Execution failed for task ':vertretungsplan:dexDebug'.
> Failed to run command:
    P:\Android-Studio\sdk\build-tools\18.0.1\dx.bat --dex --output P:\Projekte\VertretungsplanProject\vertretungsplan\build\libs\vertretungsplan-debug.dex P:\Projekte\VertretungsplanProject\vertretungsplan\build\classes\debug P:\Projekte\VertretungsplanProject\vertretungsplan\build\dependency-cache\debug P:\Android-Studio\sdk\extras\android\m2repository\com\android\support\support-v4\18.0.0\support-v4-18.0.0.jar P:\Projekte\VertretungsplanProject\vertretungsplan\libs\commons-io-2.4.jar P:\Projekte\VertretungsplanProject\vertretungsplan\build\exploded-bundles\VertretungsplanProjectLibrariesActionbarsherlockUnspecified.aar\classes.jar
Error Code:
    2
Output:
    trouble processing:
    bad class file magic (cafebabe) or version (0033.0000)
    ...while parsing de/MayerhoferSimon/Vertretungsplan/LoginActivity$2.class
    ...while processing de/MayerhoferSimon/Vertretungsplan/LoginActivity$2.class
    trouble processing:
    bad class file magic (cafebabe) or version (0033.0000)
    ...while parsing de/MayerhoferSimon/Vertretungsplan/MainActivity$1.class
    ...while processing de/MayerhoferSimon/Vertretungsplan/MainActivity$1.class
    trouble processing:
    bad class file magic (cafebabe) or version (0033.0000)
    ...while parsing de/MayerhoferSimon/Vertretungsplan/YQL/YqlVplanParser.class
    ...while processing de/MayerhoferSimon/Vertretungsplan/YQL/YqlVplanParser.class
    3 warnings
    UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dx.util.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
        at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:592)
        at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:550)
        at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:531)
        at com.android.dx.merge.DexMerger.mergeDexBuffers(DexMerger.java:168)
        at com.android.dx.merge.DexMerger.merge(DexMerger.java:186)
        at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:300)
        at com.android.dx.command.dexer.Main.run(Main.java:232)
        at com.android.dx.command.dexer.Main.main(Main.java:174)
        at com.android.dx.command.Main.main(Main.java:91)

Projektstruktur:

Geben Sie hier die Bildbeschreibung ein

build.gradle (actionbarsherlock)

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android-library'

dependencies {
    compile 'com.android.support:support-v4:18.0.0'
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 11
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            res.srcDirs = ['res']
        }
    }
}

build.gradle (vertretungsplan)

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

dependencies {
    compile files('libs/commons-io-2.4.jar')
    compile project(':libraries:actionbarsherlock')
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 11
    }
}

settings.gradle

include ':vertretungsplan', ':libraries:actionbarsherlock'

Wie kann ich diesen Fehler beheben?

maysi
quelle

Antworten:

90

Die richtige Antwort ist, dass einige Ihrer JAR-Dateien nicht kompiliert werden. Sie sollten in Ihrem Projekt in Ihre build.gradle-Datei gehen und Ihre Abhängigkeiten überprüfen.

Wenn Sie nur einige JAR-Dateien importieren, können Sie versuchen, sie zu entfernen und einzeln hinzuzufügen. Auf diese Weise können Sie feststellen, welche davon den Fehler verursacht.

In meinem Fall habe ich genau das getan, und als ich den letzten importierte, wurde die App kompiliert. Ich denke, das eigentliche Problem war, dass ich zu viele auf einmal importierte. Aber jetzt funktioniert alles.

Friis1978
quelle
20
Wenn Sie mit ./gradlew assemble --stacktrace --info kompilieren, werden Sie genau wissen, welches Glas schlecht ist
Nir Hartmann
@NirHartmann Kurzfrage, ist der Befehl etwas, das ich in den Build-Gradle einfügen würde? Ich war mir nicht sicher, wo es platziert werden sollte.
Fallenreaper
2
@Fallenreaper nicht sicher, ob ich Ihre Frage verstehe. Ich meinte, dass Sie in Ihrem Stammprojektverzeichnis eine exec gradlew-Datei haben. Wenn Sie sie wie gesagt vom Terminal oder cmd auslösen, wissen Sie, wo das Problem liegt, und können es dann beheben .
Nir Hartmann
@ Fallenreaper- habe im Terminal zu Gradle / Gradle navigiert und eingegeben ./gradlew montiere --stacktrace --info, aber bekomme kein solches Verzeichnis, hast du das in deinem Vorschlag gemeint?
Dancebush
Dies ist wirklich eine volle Hilfe für mich
Bhavesh Kaila
68

Ich hatte plötzlich das gleiche Problem, ohne nennenswerte Änderungen.

Ich habe es gelöst, indem ich das app/buildVerzeichnis gelöscht habe und Gradle das gesamte Projekt neu erstellen ließ.

Eisenmaus
quelle
2
Gleiches Problem hier beim Hinzufügen einer Aktivität, um die Hauptaktivität zu ersetzen. Ich habe eine Reinigung durchgeführt, aber es hat nicht funktioniert. Danke für diese Lösung.
Climbatize
1
Versuchen Sie auch, den App- / Build-Ordner in den Bibliotheksprojekten zu bereinigen, die Sie möglicherweise in Ihre App aufnehmen
Voy
1
Guter Versuch, aber es hat mein Problem nicht behoben: /
Maxime T
1
behebe mein Problem. Vielen Dank
Dian
1
Das Löschen des Build-Ordners ist wirklich hilfreich.
Bhavesh Kaila
16

Sie müssen überprüfen, ob dieselbe JAR erneut importiert wird. In meinem Fall gab es eine Klasse in einem Glas, die in ein anderes Glas importiert wurde. Überprüfen Sie also einfach, ob die lib / class-Datei zweimal im gesamten Projekt enthalten ist!

user2899493
quelle
1
Dies war technisch korrekt für mich, geschah jedoch, weil meine Abhängigkeiten in der Datei build.gradle die Android-Unterstützungsbibliothek zweimal mit zwei verschiedenen Versionen enthielten, nachdem dem Projekt eine neue Aktivität hinzugefügt wurde.
Josh
Ich war noch nicht fertig, als dies gelöst war, aber es führte mich auf meinen Weg. Vielen Dank.
Andreas Rudolph
Ich habe ein Problem für mich gelöst, aber ich hätte nie gedacht, dass das Problem darin besteht, dass JARs aus der Fehlermeldung dupliziert werden. Ich hatte Volley als Modul auf Projektebene importiert, aber da ich zwischen dem Bauen mit AS und dem Bauen mit Cordova wechseln wollte, habe ich meine Umgebung so eingerichtet, dass Volley als Cordova-Plugin eingeführt wird. Nachdem ich die Plattform irgendwann neu generiert habe, wurde diese Fehlermeldung angezeigt. Ihr Kommentar zu denselben Bibliotheken, die zweimal importiert wurden, hat mir klar gemacht, dass ich die Einstellungen für "Volley als importierte Bibliothek" hätte entfernen sollen. Vielen Dank.
Mark Birbeck
4

Ich habe die gleiche Art von Fehler erhalten, als ich versucht habe, ein Utils-Bibliotheksglas in Eclipse mit Java JRE 1.8 zu kompilieren und es in my / libs / in Android Studio 1.1.0 zu verwenden.

Ich hatte mein Android Studio auf JDK1.8.0 eingestellt.

Ich habe meine Eclipse auf JRE 1.7 umgestellt und der Fehler wurde behoben. Eclipse: Fenster-> Einstellungen-> Java-Registerkarte-> Compiler -> Konformitätsstufe 1.7. Sie werden höchstwahrscheinlich aufgefordert, Ihre JRE-Systembibliothek auf jdk1.7.x_x umzustellen.

Möglicherweise müssen Sie beim Exportieren die Option "JAR komprimieren" deaktivieren. Ich habe nicht getestet, ob es eine Wirkung hatte oder nicht. Ich bezweifle, dass es verwandt war.

RW4
quelle
Vielen Dank! Dies löste mein Problem mit Android Studio 1.4 und Gradle Experimental-0.2.1;) Ich musste auf JDK 1.7.1 zurückgreifen, um dieses Problem vollständig zu beheben
Stef
4

Ich hatte auch das gleiche Problem. In meinem Fall begann das Problem nach einem Neustart. Ich habe meine App geschlossen, dann das Android Studio (in meinem Fall V1.1.0) und schließlich ein normales Herunterfahren. Danach habe ich eine Java-Datei geändert, um ein RadioGroup-Objekt hinzuzufügen, und dann ist das Problem aufgetreten.

Ich habe mein Problem gelöst, indem ich in meiner Gradle-Konfigurationsdatei nur eine einfache '0' gegen eine '1' geändert habe, da die Hauptursache des Problems beim Gradle-Ausführungsprozess generiert wurde. Früher hatte ich die Version '1.0.0', dann habe ich sie in '1.1.0' geändert, wie auf den Bildern angegeben.

Position der Gradle-Konfiguration geändert Position der Gradle-Konfiguration geändert

Ort, an dem ich die richtige Version übernommen habe (Datei -> Einstellungen -> Gradle -> Experimentell Ort, an dem ich die richtige Version übernommen habe (Datei -> Einstellungen -> Gradle -> Experimentell

Laufräder
quelle
Der Wechsel zu Gradle Toots Version 1.1.0 hat bei mir funktioniert. Vielen Dank!
Kalan Nawarathne
4

Das Problem geht NICHT um Execution failed for task ':dexDebug'

Wenn Sie über den rot angezeigten Fehler schauen, werden Sie dies sehen

Geben Sie hier die Bildbeschreibung ein

Um dieses Problem dauerhaft zu lösen, fügen Sie diese Zeilen einfach in Ihre build.gradleDatei ein

android {
    dexOptions {
        jumboMode = true
    }
}

Für weitere Details überprüfen Sie diese Frage: hier

Sabri Meviş
quelle
3

Stellen Sie sicher, dass Ihre AndroidManifest-Datei einen Paketnamen im Manifestknoten enthält. Das Festlegen eines Paketnamens hat dieses Problem für mich behoben.

user1743999
quelle
In meinem Fall wurde der Paketname in 2 Unterprojekten der Bibliothek dupliziert.
Sasha_trn
3

ANDROID STUDIO Benutzer versuchen dies: -

Sie müssen Ihren Gradle-Dateiabhängigkeiten Folgendes hinzufügen:

compile 'com.android.support:multidex:1.0.0'

Fügen Sie dann die folgende Zeile (Multidex-Unterstützungsanwendung) zum applicationTag Ihres Manifests hinzu :

android:name="android.support.multidex.MultiDexApplication"
Kumar Kundan
quelle
2

Könnte dies durch Hinzufügen beheben

compile 'com.android.support:support-v4:18.0.0'

Kompilieren und entfernen Sie diese Zeile zu den Abhängigkeiten im vertretungsplan build.gradle, entfernen Sie sie und kompilieren Sie sie erneut.

jetzt gehts

maysi
quelle
Warum 'v4: 18.0.0'? Warum nicht 'v4: +'
IgorGanapolsky
4
@IgorGanapolsky, weil dynamische Versionen im Allgemeinen zu unvorhergesehenen Ergebnissen führen.
Aga
1

Ich hatte das gleiche Problem, das du tun solltest:

File -> Invalidate Caches / Restart

mac229
quelle
1

Ich hatte dieses Problem, weil ich versucht habe, sowohl die Support-Bibliothek als auch Appcompat zu verwenden:

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile 'com.android.support:support-v4:23.1.0'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile 'com.google.android.gms:play-services:8.3.0'
}

Nachdem ich die Support-Bibliothek gelöscht und auf eine ältere Version umgestellt hatte, wurde Folgendes kompiliert:

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    /*compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'*/
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.android.support:design:22.2.0'
    compile 'com.google.android.gms:play-services:8.3.0'
}
Denis Kutlubaev
quelle
1

Ich hatte zwei inkompatible Abhängigkeiten.

Die folgenden Abhängigkeiten haben den Fehler verursacht.

compile 'com.google.android.gms:play-services-fitness:8.3.0'
compile 'com.google.android.gms:play-services-wearable:8.4.0'

Durch Ändern der Fitnessabhängigkeit auf Version 8.4.0 konnte ich die App ausführen.

compile 'com.google.android.gms:play-services-fitness:8.4.0'
compile 'com.google.android.gms:play-services-wearable:8.4.0'
bradley4
quelle
0

Ich fand ein sehr interessantes Problem mit Android Studio und dem mircrosoft-Upgrade auf den Webbrowser. Ich habe "dumm" auf die neueste Version von dh aktualisiert. Natürlich weiß Microsoft in ihrer unendlichen Weisheit genau, was mit Sicherheit zu tun ist. Als ich versuchte, meine App zu kompilieren, wurde immer wieder der Fehler angezeigt. Gradle - Build schlägt fehl - Ausführung für Aufgabe fehlgeschlagen. Als ich in den Stapel schaute, sah ich, dass der Pfad zu java.exe nicht erkannt wurde. Ich fand das seltsam, da ich erst am Tag zuvor kompilieren konnte. Ich habe JAVA_HOME zu den env-Variablen für das System hinzugefügt, Android Studio geschlossen und es erneut geöffnet. Niedrig und siehe da, wenn der Feuerwand-Nörgelbildschirm nicht platzte und fragte, ob ich alle jave.exe durchmachen wollte.

Was für ein Cluster!

user3763372
quelle
0

(Dies ist möglicherweise der falsche Thread, da Ihr Problem spezifischer zu sein scheint, aber es ist der Thread, den ich bei der Suche nach den Schlüsselwörtern des Problems gefunden habe.)

Trotz aller guten Hinweise das einzige, was mir geholfen hat und das ich nur für den Fall teilen möchte, wenn alles andere nicht funktioniert:

Entfernen Sie Ihr .gradle- Verzeichnis in Ihrem Home-Verzeichnis und lassen Sie es von Android Studio für Sie neu erstellen / herunterladen.

Es wurden alle Arten von seltsamen Fehlern für mich behoben, die weder durch Neuinstallation von Android Studio selbst noch des SDK behoben werden konnten.

user2400553
quelle
0

Ein Grund können doppelte Bibliotheken nach dem Import aus der Eclipse-IDE sein.

dependencies {
compile 'com.github.japgolly.android:svg-android:2.0.5'
compile 'com.google.android.gms:play-services:+'
compile 'com.android.support:appcompat-v7:21.0.3'
compile files('libs/androidannotations-api-2.7.1.jar')
compile files('libs/androidasync-2.1.2.jar')
//compile files('libs/google-play-services.jar')
compile files('libs/universal-image-loader-1.8.2.jar')}

Ich hatte das gleiche Problem nach dem Kommentar:

//compile files('libs/google-play-services.jar')

Die App bekommt keine Fehler.

bheatcoker
quelle
Sie sollten die lokalen Jars aus dem Ordner libs entfernen und von zentralen Repositorys abhängig sein.
WonderCsabo
0

Ich hatte das gleiche Problem. Auf diese Weise gelöst. Gehen Sie zu actionbarsherlock -> Moduleinstellungen -> Abhängigkeiten. Entfernen Sie die Support v4-Bibliothek. Unten links befindet sich eine Plus-Schaltfläche, von der aus Sie 1 Bibliotheksabhängigkeit hinzufügen (Wählen Sie support-v4 aus). Lassen Sie das Gradle-Projekt erneut synchronisieren und bereinigen, sobald es fertig ist.

Starksky
quelle
0

Viele der Antworten hier sind Versuch und Irrtum, um doppelte Abhängigkeiten zu finden. Wenn Sie jedoch nur ein wenig von der Execution failed for task ':app:dexDebug'.Zeile nach oben scrollen , erhalten Sie einen Hinweis auf die Duplikate

Fehler mit einem Hinweis.

In meinem Fall hatte ich folgenden Fehler:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define L/com/parse/AbstractQueryController$1;
...
...
...
Execution failed for task ':app:dexDebug'.

Ich wusste also, dass ich zur Behebung dieses Fehlers die doppelten Abhängigkeiten finden musste, die definiert wurden parse.AbstractQueryController

In meinem Fall hatte ich zwei importierte Module, die in zwei verschiedene Parse-Bibliotheken geladen wurden. Durch das Laden eines Projekts wurde nur ein Problem behoben.

Max Worg
quelle
0

Ich bin auch auf diesen Fehler gestoßen, als das Paket in einer meiner Klassendateien falsch geschrieben wurde. Viele dieser Antworten springen sofort zu den Jar-Dateien, aber ich würde auch überprüfen, ob Ihre Pakete richtig geschrieben sind.

nbroeking
quelle
0

Fügen Sie einfach build.gradle hinzu

kompiliere 'com.parse.bolts: bolts-android: 1. +'

kompiliere 'com.parse: parse-android: 1.11.0'

und synchronisiere das Projekt mit Gradle-Dateien, Geben Sie hier die Bildbeschreibung ein aber füge das Analyse-Jar nicht in libs hinzu :) OKK

Mourad MAMASSI
quelle
0

Wenn Sie auch verwenden Daggeroder Butterknifesollten Sie Guave als Abhängigkeit zu Ihrer build.gradleHauptdatei wie Klassenpfad hinzufügen :

com.google.guava:guava:20.0

Wenn Sie jedoch Probleme mit einem größeren Heap für den Gradle-Daemon haben, können Sie das Hinzufügen zu Ihrer radleDatei erhöhen :

 dexOptions {
        javaMaxHeapSize "4g"
    } 
Francisco Durdin Garcia
quelle
0

In meinem Fall habe ich es getan Build > Clean Projectund es hat funktioniert!

Chintan Shah
quelle
-1

Das Bereinigen des Projekts mithilfe der Menüleiste "Erstellen" funktioniert in Android Studio für viele Fehlerszenarien. In diesem Fall ist dies auch der Fall.

code4salvation
quelle
Haben Sie Informationen darüber, warum dies dieses Problem lösen würde?
Greg Bair
1
Coz auf welche Weise Sie die Bibliotheken in build.gradle nicht ausschließen können und die akzeptierte Lösung fordert uns auch auf, die JAR-Dateien zu entfernen und hinzuzufügen, die nicht kompiliert werden konnten. Es waren also nicht diese JAR-Dateien, die Probleme verursachten Sie haben gearbeitet, bevor das Problem aufgetreten ist, und funktionieren immer noch, nachdem ich es mit der von mir genannten Methode behoben habe. Es handelt sich also um ein Build-Problem, und der Code wurde nicht kompiliert. Was ist der beste Weg, wenn ein Build fehlschlägt? Sie bereinigen das Projekt und erstellen es neu. Danke dir!
Code4salvation
Für die meisten Leute erscheint diese Meldung, wenn sie ihr Projekt erstellen wollen.
Also
1
Ich hoffe, Sie lesen die Antwort, da es sich um einen Build-Fehler handelt, da Abhängigkeiten nicht kompiliert werden. Sie wird daher angezeigt, wenn Sie nur "das Projekt erstellen". Um mit Ihrem Android Studio synchron zu bleiben, müssen Sie Java auf die neueste verfügbare Version coz aktualisieren Es ist eine andere Geschichte davor und danach.
Code4salvation