Android Studio: Gradle - niepowodzenie kompilacji - niepowodzenie wykonania zadania „: dexDebug”


82

Błąd:

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)

Struktura projektu:

wprowadź opis obrazu tutaj

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'

Jak mogę naprawić ten błąd?

Odpowiedzi:


89

Prawidłowa odpowiedź jest taka, że ​​niektóre pliki jar się nie kompilują. Powinieneś przejść do pliku build.gradle w swoim projekcie i sprawdzić zależności.

Jeśli importujesz tylko niektóre pliki jar, możesz spróbować je usunąć i dodawać pojedynczo. Pomoże Ci to określić, który z nich powoduje błąd.

W moim przypadku właśnie to zrobiłem, a kiedy importowałem ostatni, aplikacja się skompilowała. Myślę więc, że prawdziwy problem polegał na tym, że importowałem zbyt wiele na raz. Ale teraz to wszystko działa.


20
Jeśli skompilujesz za pomocą ./gradlew assemble --stacktrace --info, pozwoli ci to dokładnie wiedzieć, który plik jar jest zły
Nir Hartmann

@NirHartmann Szybkie pytanie, czy polecenie jest czymś, co powinienem umieścić w gradle kompilacji? Nie byłem pewien, gdzie powinien być umieszczony.
Fallenreaper

2
@Fallenreaper nie jestem pewien, czy rozumiem twoje pytanie, chodziło mi o to, że w głównym katalogu projektu masz plik exec gradlew, jeśli odpalisz go z terminala lub cmd tak jak powiedziałem, wiesz, gdzie jest problem i wtedy możesz go naprawić .
Nir Hartmann

@ Fallenreaper- przeszedłeś do gradle / gradle w terminalu i wejściu ./gradlew assemble --stacktrace --info, ale nie otrzymaj takiego katalogu, czy to właśnie miałeś na myśli w swojej sugestii?
dancingbush

To jest dla mnie naprawdę pomocne
bhavesh kaila

69

Nagle miałem ten sam problem, bez znaczących zmian.

Rozwiązałem to usuwając app/buildkatalog i pozwoliłem gradle zbudować cały projekt jako nowy.


2
Ten sam problem występuje w przypadku dodawania działania w celu zastąpienia działania głównego. Wykonałem czyszczenie, ale nie zadziałało. Dzięki za to rozwiązanie.
Climbatize

1
Spróbuj także wyczyścić folder aplikacji / kompilacji w projektach biblioteki, które możesz uwzględnić w swojej aplikacji
Voy

1
Dobra próba, ale to nie rozwiązało mojego problemu: /
Maxime T

1
napraw mój problem. Dziękuję
dian

1
Usunięcie folderu kompilacji jest naprawdę pomocne.
bhavesh kaila

15

Musisz sprawdzić, czy ten sam plik JAR jest ponownie importowany. W moim przypadku była klasa w słoiku, który był importowany w innym słoiku. Po prostu sprawdź, czy jakikolwiek plik lib / class jest uwzględniany dwukrotnie w całym projekcie!


1
Było to technicznie poprawne dla mnie, ale stało się, ponieważ moje zależności w pliku build.gradle miały bibliotekę obsługi Androida dwukrotnie dołączoną do dwóch różnych wersji po dodaniu nowego działania do projektu.
Josh

Nie skończyłem, kiedy to zostało rozwiązane, ale poprowadziło mnie to na moją drogę. Dzięki.
Andreas Rudolph

Rozwiązałem problem dla mnie, ale nigdy nie pomyślałbym o problemie polegającym na duplikowaniu plików JAR z komunikatu o błędzie. Importowałem Volley jako moduł na poziomie projektu, ale ponieważ chciałem mieć możliwość przełączania się między budowaniem z AS i budowaniem z Cordovą, skonfigurowałem swoje środowisko tak, aby wprowadzić Volley jako wtyczkę Cordova. Po zregenerowaniu platformy w pewnym momencie otrzymałem ten komunikat o błędzie. Twój komentarz o tym, że te same biblioteki były importowane dwukrotnie, uświadomił mi, że powinienem był usunąć ustawienia „Volley jako importowana biblioteka”, więc dziękuję.
Mark Birbeck

4

Wystąpił ten sam rodzaj błędu, gdy próbowałem skompilować jar biblioteki narzędzi w eclipse przy użyciu Java JRE 1.8 i użyć go w moim / libs / w Android Studio 1.1.0.

Mój Android Studio był ustawiony na używanie JDK1.8.0.

Przełączyłem Eclipse do pracy z JRE 1.7 i błąd został naprawiony. Eclipse: Okno-> Preferencje-> zakładka Java-> Kompilator -> Poziom zgodności 1.7. Najprawdopodobniej wyświetli monit o przełączenie biblioteki systemowej JRE na jdk1.7.x_x.

Może być konieczne usunięcie zaznaczenia opcji „kompresuj słoik” podczas eksportu. Nie testowałem, czy to miało wpływ, czy nie. Wątpię, żeby to było powiązane.


Dzięki! To rozwiązało mój problem z Android Studio 1.4 i Gradle Experimental-0.2.1;) Musiałem jednak powrócić do JDK 1.7.1, aby całkowicie naprawić ten problem
Stef

4

Ja też miałem ten sam problem. W moim przypadku problem zaczął się po restarcie. Zamknąłem moją aplikację, następnie zamknąłem Android Studio (w moim przypadku V1.1.0) i wreszcie normalne zamknięcie. Następnie zmodyfikowałem jeden plik java, aby dodać obiekt RadioGroup i pojawił się problem.

Rozwiązałem problem tylko zmieniając proste „0” na „1” w moim pliku konfiguracyjnym Gradle, ponieważ główna przyczyna problemu została wygenerowana w procesie wykonywania Gradle. Wcześniej miałem wersję '1.0.0', a potem zmieniłem ją na '1.1.0', jak podano na zdjęciach.

Lokalizacja konfiguracji Gradle została zmieniona Location of the Gradle configuration a changed

Lokalizacja, z której pobrałem właściwą wersję (Plik -> Ustawienia -> Gradle -> Experimental Location where I took the right version from (File -> Settings -> Gradle -> Experimental


zmiana na gradle toots wersja 1.1.0 działała dla mnie. dzięki!
kalan nawarathne

4

Problem NIE dotyczy Execution failed for task ':dexDebug'

jeśli spojrzysz powyżej błędu pokazanego na czerwono, zobaczysz to

enter image description here

Aby trwale rozwiązać ten problem, po prostu dodaj te linie do build.gradlepliku

android {
    dexOptions {
        jumboMode = true
    }
}

Aby uzyskać więcej informacji, sprawdź to pytanie: tutaj


3

Upewnij się, że plik AndroidManifest zawiera nazwę pakietu w węźle manifestu. Ustawienie nazwy pakietu rozwiązało ten problem.


W moim przypadku nazwa pakietu została zduplikowana w 2 podprojektach bibliotecznych.
sasha_trn,

3

Użytkownicy ANDROID STUDIO próbują tego: -

Musisz dodać następujące elementy do zależności pliku gradle:

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

Następnie dodaj poniższy wiersz (aplikacja obsługująca multidex) do applicationtagu manifestu :

android:name="android.support.multidex.MultiDexApplication"

2

Można to naprawić, dodając

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

do zależności w vertretungsplan build.gradle, skompiluj, a następnie usuń tę linię i skompiluj ponownie.

teraz działa


Dlaczego „v4: 18.0.0”? Dlaczego nie „v4: +”
IgorGanapolsky

4
@IgorGanapolsky, ponieważ wersje dynamiczne generalnie prowadzą do nieprzewidzianych rezultatów.
aga

1

Miałem ten sam problem, powinieneś zrobić:

File -> Invalidate Caches / Restart


1

Miałem ten problem, ponieważ próbowałem użyć zarówno biblioteki wsparcia, jak i appcompat:

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

Po usunięciu biblioteki wsparcia i zmianie na starszą wersję skompilowałem:

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

1

Miałem dwie niezgodne zależności.

Poniższe zależności spowodowały błąd.

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

Zmieniając zależność od sprawności na wersję 8.4.0, mogłem uruchomić aplikację.

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

0

Znalazłem bardzo interesujący problem z Android Studio i aktualizacją mircrosoft do przeglądarki internetowej. Zaktualizowałem "głupio" do najnowszej wersji ie. oczywiście Microsoft w swojej nieskończonej mądrości dokładnie wie, co zrobić z bezpieczeństwem. Kiedy próbowałem skompilować aplikację, otrzymywałem błąd Gradle - niepowodzenie kompilacji - niepowodzenie wykonania zadania. patrząc w stos zauważyłem, że nie rozpoznał ścieżki do java.exe. Wydało mi się to dziwne, ponieważ udało mi się skompilować dzień wcześniej. Dodałem JAVA_HOME do zmiennych środowiska systemu, zamknąłem Android Studio i ponownie je otworzyłem. Nisko i spójrz, jeśli ekran nagiej ściany ognia nie wyskakuje z pytaniem, czy chcę przejść przez cały plik jave.exe.

Co za gromada!


0

(Może to być niewłaściwy wątek, ponieważ Twój problem wydaje się bardziej szczegółowy, ale jest to wątek, który znalazłem podczas wyszukiwania słów kluczowych dotyczących problemu)

Mimo wszystkich dobrych podpowiedzi jedyne, co mi pomogło i którymi chciałbym się podzielić na wszelki wypadek, gdyby wszystko inne nie działało:

Usuń swój .gradle katalog w swoim katalogu domowym i jego przebudowę / ponowne pobranie przez Android Studio.

Naprawiono dla mnie wszelkiego rodzaju dziwne błędy, których nie można było naprawić przez ponowną instalację samego Androida Studio ani SDK.


0

Przyczyną mogą być zduplikowane biblioteki po zaimportowaniu z Eclipse IDE.

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

Miałem ten sam problem, po komentarzu:

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

Aplikacja nie wyświetla żadnych błędów.


Należy usunąć lokalne pliki JAR z folderu libs i polegać na repozytoriach centralnych.
WonderCsabo

0

Napotkałem ten sam problem. Rozwiązany w ten sposób. Idź do actionbarsherlock -> ustawienia modułu -> zależności. Usuń bibliotekę wsparcia v4. W lewym dolnym rogu znajduje się przycisk plus, stamtąd dodaj 1 Zależność od biblioteki (Wybierz support-v4). Niech gradle zsynchronizuje się ponownie i wyczyści projekt po zakończeniu.


0

Wiele odpowiedzi jest metodą prób i błędów, aby znaleźć zduplikowane zależności, ale jeśli przewiniesz trochę w górę od Execution failed for task ':app:dexDebug'.wiersza, da ci to wskazówkę co do duplikatów

błąd z podpowiedzią.

W moim przypadku miałem następujący błąd:

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

Wiedziałem więc, że aby naprawić ten błąd, muszę znaleźć zduplikowane zależności, które definiują parse.AbstractQueryController

W moim przypadku miałem dwa zaimportowane moduły, które ładowały się w dwóch różnych bibliotekach Parse. Mój projekt ładował tylko jeden, naprawił mój problem.


0

Wystąpił również ten błąd, gdy pakiet w jednym z moich plików klas był nieprawidłowo napisany. Wiele z tych odpowiedzi od razu przeskakuje do plików Jar, ale chciałbym też sprawdzić, czy pisownia pakietów jest poprawna.


0

po prostu dodaj build.gradle

kompiluj „com.parse.bolts: bolts-android: 1. +”

kompiluj „com.parse: parse-android: 1.11.0”

i zsynchronizuj projekt z plikami Gradle, wprowadź opis obrazu tutaj ale nie dodawaj Jar parsowania w bibliotekach :) OKK


0

Jeśli używasz również Daggerlub Butterknifepowinieneś dodać guawę jako zależność do build.gradległównego pliku, taką jak ścieżka klas:

com.google.guava:guava:20.0

Z drugiej strony, jeśli masz problemy z większą stertą dla demona Gradle, możesz zwiększyć dodawanie do radlepliku:

 dexOptions {
        javaMaxHeapSize "4g"
    } 


-1

Czyszczenie projektu za pomocą opcji Kompiluj na pasku menu działa w przypadku wielu scenariuszy błędów w Android Studio i tak jest w tym przypadku.


Czy masz jakieś informacje, dlaczego to rozwiązałoby ten problem?
Greg Bair

1
Ponieważ w żaden sposób nie można wykluczyć bibliotek w build.gradle, a zaakceptowane rozwiązanie nakazuje nam również usunięcie i dodanie plików jar, których nie można skompilować… Więc to nie te pliki jar były przyczyną problemów , działały przed pojawieniem się problemu i nadal działają po rozwiązaniu go przy użyciu metody, o której wspomniałem, więc jest to problem z kompilacją, a kod nie został skompilowany. Więc jaki jest najlepszy sposób, gdy kompilacja się nie powiedzie, wyczyścisz projekt i odbudujesz. Dziękuję Ci!
code4salvation

dla większości ludzi ta wiadomość pojawia się, jeśli zamierzają zbudować swój projekt. więc to zdecydowanie nie jest rozwiązanie
maysi

1
Mam nadzieję, że przeczytałeś odpowiedź, że jest to błąd kompilacji z powodu niekompilowanych zależności, więc pojawi się tylko podczas "budowania projektu". Aby pozostać zsynchronizowanym ze swoim Android Studio, upewnij się również, że aktualizujesz Javę do najnowszej dostępnej wersji coz to inna historia przed i po nim.
code4salvation
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.