Jeśli uruchomię gradle assembleDebug
z wiersza poleceń, nagle pojawia się ten błąd:
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)
Jeśli grep dla v4, widzę dwa pliki w folderze kompilacji.
Binary file build/pre-dexed/debug/support-v4-19.0.0-2ba5fdd60a6c3836b3104a863fe42897da1fa9d1.jar matches
Binary file build/pre-dexed/debug/support-v4-r7-227d905d79b23b20866531d4f700446c040a2ccb.jar matches
Mój plik ocen zawiera tylko tę bibliotekę wsparcia:
compile 'com.android.support:support-v13:19.0.0'
Jestem zaskoczony, jak w jakiś sposób włączono bibliotekę r7. Uruchomiłem gradle clean
i zawsze pojawia się tam po ponownym uruchomieniu assembleDebug.
Jeśli grepuję dla r7 w katalogu kompilacji, widzę go w pliku:
Binary file build/exploded-bundles/ComGoogleAndroidGmsPlayServices4030.aar/classes.jar matches
Jeśli nie dołączę wersji 13, inne rzeczy się nie kompilują.
Ale czy wersja 13 nie zawiera biblioteki obsługi wersji 4?
Czy jest to niezgodność między pakietem AAR usług Play a biblioteką v13?
Pobrałem plik gradle z gradleplease.appspot.com.
Usunięcie usług odtwarzania nie naprawia tego; ten sam błąd.
Moje zależności w build.gradle:
dependencies {
// Google Play Services
//compile 'com.google.android.gms:play-services:4.0.30'
// Support Libraries
//compile 'com.android.support:support-v4:19.0.0'
///compile 'com.android.support:appcompat-v7:19.0.0'
//compile 'com.android.support:gridlayout-v7:19.0.0'
compile 'com.android.support:support-v13:19.0.0'
compile 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5'
compile 'commons-codec:commons-codec:1.9'
compile 'com.madgag:markdownj-core:0.4.1'
compile 'com.wu-man:android-oauth-client:0.0.2'
compile 'com.google.http-client:google-http-client-jackson2:1.17.0-rc'
compile 'org.apache.commons:commons-lang3:3.2'
compile 'com.google.code.gson:gson:2.2.4'
}
Odpowiedzi:
Uruchom
gradle -q dependencies
(lubgradle -q :projectName:dependencies
), aby wygenerować raport zależności. Powinieneś zobaczyć, skądr7
pochodzi, na przykład:Następnie użyj
exclude
dyrektywy, aby zablokować tę zależność. W moim przypadku pochodzi z mojej biblioteki CWAC-Camera, dlatego używam:(gdzie drugie
compile
zdanie wskazuje, jakiej wersji faktycznie chcesz)To powinno wyjaśnić sprawy, ponieważ zobaczysz, czy ponownie uruchomisz raport zależności:
źródło
gradle dependencies
wydaje się nie zgłaszać zależności dodanych docompile files('libs/example.jar')
libs/*.jar
zależności ze wspólnym modułem, żadna nie jest dostępna jako artefakt. W jakikolwiek sposób przeprowadzić podobną kontrolę zależności / wykluczenie klasy?compile project(':foo')
INTOcompile(project(':foo')) { exclude module: 'support-v4' }
. Zwróć uwagę na nawias.Rozwiązałem podobny błąd, dodając następujący fragment kodu do mojego pliku build.gradle w bloku Androida.
źródło
Ponieważ obraz jest wart tysiąca słów
Aby ułatwić i przyspieszyć wykonanie tego zadania dla początkujących, takich jak ja. to zrzuty ekranu pokazujące odpowiedź wysłaną przez @ edsappfactory.com, która działała dla mnie:
Najpierw otwórz widok Gradle po prawej stronie Androidstudio, w elemencie aplikacji przejdź do,
Tasks
aAndroid
następnie kliknij prawym przyciskiem myszyandroidDependencies
i wybierzRun
:Po drugie zobaczysz coś takiego:
Głównym powodem, dla którego to opublikowałem, było to, że nie było łatwo wiedzieć, gdzie wykonać
gradle
zadanie lub polecenia opublikowane powyżej. Więc tutaj też ich ekscytujesz.SO, aby wykonać polecenie gradle:
Pierwszy:
Druga:
Proste jak to jest.
Otóż to.
Dziękuję Ci.
źródło
Pamiętaj również, że możesz zobaczyć swoje zależności Androida, przechodząc do widoku Gradient Android Studio i wybierając docelowy „androidDependencies”.
Jeszcze jedna wskazówka: miałem ten problem, dopóki nie usunąłem biblioteki wsparcia v4 z folderu libs zarówno w projekcie, jak i w powiązanych projektach modułów / bibliotek.
źródło
Ten błąd pojawił się podczas aktualizacji do ButterKnife 8.5.1. Żadna z pozostałych odpowiedzi tutaj nie działała dla mnie.
Widziałem
gradle -q :app:dependencies
drzewo, a potem przeglądałem pliki jar, aż znalazłem konflikt. Konflikt polegał na tym, że zależność maślankicom.android.support:support-compat:25.1.0
zawiera wersję klasy dostępności, acom.android.support:support-v4:23.1.1
także zawiera klasę.Rozwiązałem to, zmieniając moją zależność od tego:
do tego:
Jak dotąd nie wpływa to na działanie ButterKnife.
Edycja: istnieje lepsze rozwiązanie, które polegało na uaktualnieniu moich bibliotek obsługi Androida, tak aby pasowały do ButterKnife:
źródło
Jeśli ktoś odkryje, że odpowiedzi z CommonsWare nie można zastosować do projektu biblioteki Androida, oto fragment do naprawienia
compile (project (': yourAndroidLibrary')) {wyklucz moduł: 'support-v13'}
Znajdziesz problemy
jeśli używasz projektu kompilacji (': yourAndroidLibrary') {wyklucz moduł: 'support-v13'}
Różnice dotyczą bransoletki „(” i „)” przed „projektem” .
źródło
Nie działałoby dla mnie w zależności od projektu, jedynym sposobem, w jaki mogłem go uruchomić, była następująca składnia:
Gdzie: Android-SDK to nazwa twojego projektu.
źródło
Miałem ten sam problem i wygląda na to, że moja aplikacja miała zbyt wiele metod z powodu bibliotek: http://developer.android.com/tools/building/multidex.html
Rozwiązano to za pomocą:
Więcej tutaj Błąd: Wykonanie nie powiodło się dla zadania „: app: dexDebug”. > komenda zakończona niezerową wartością wyjścia 2
źródło
Miałem ten sam błąd, ale dlatego, że ostatnio zmieniłem z używania v4 na v13. Więc wszystko, co musiałem zrobić, to oczyścić projekt.
źródło
Miałem ten sam błąd w starszym projekcie. Moja wina polegała na tym, że biblioteka obsługi była dwukrotnie dołączana: w bibliotece usług Google Play, a inna jako samodzielna.
Tak to naprawiłem:
ZŁY build.gradle:
DOBRA build.gradle:
Mam nadzieję, że to komuś pomoże :-)
źródło
Używam
com.google.android.gms:play-services-analytics:8.3.0
iandroid-support-v13.jar
nie mógł dostaćexclude module: 'support-v4'
się do pracy.Dla mnie zadziałało użycie
android-support-v13
artefaktu zamiastandroid-support-v13.jar
pliku.Tj. Zamiast
}
użyłem
}
źródło
W moim przypadku problem był spowodowany niespójnością wersji :
Rozwiązanie było proste: uczyń wszystko wersją 25
źródło
Podobny sposób rozwiązano problem Dex
gradle.build zawierał:
Problem został rozwiązany po usunięciu
Moja ocena wygląda teraz następująco:
Było redundancja w pliku JAR i skompilowany Gradle projekt
Dlatego uważnie szukaj plików zależności i jar zawierających te same klasy.
I usuń nadmiarowość.
To zadziałało dla mnie.
źródło
Jeśli zaimportowałeś projekt z Eclipse .
Scenariusz, z którym miałem do czynienia po zaimportowaniu projektu Eclipse do studia Android.
Mam nadzieję że to pomoże..
źródło
Jest to irytujący problem, który może zająć trochę czasu, aby znaleźć przypadek źródłowy. Sposób, w jaki powinieneś postępować, to odpowiedź @CommonsWare.
Ostatnio napotkałem ten problem i trudno mi było go rozwiązać.
Mój problem polegał na tym, że dołączałem bibliotekę w wersji „+” do build.gradle. Najnowsza wersja biblioteki zawierała starszą wersję Dex i Bang.
Wróciłem do starszej wersji biblioteki i rozwiązałem ją.
Dobrze jest uruchomić AndroidDependencies i zobaczyć, co się naprawdę dzieje. Dobrze jest również wyszukiwać w folderze kompilacji.
Przede wszystkim Android Studio 2.2 udostępnia funkcje kompilacji do śledzenia tego problemu.
Happy Coding Guys
źródło
W Android Studio przejdź do swojego build.gradle (sprawdź pliki build.gradle projektu i modułów) i wyszukaj duplikaty zależności.
Usuń te, których twój projekt nie potrzebuje.
źródło
Usunięcie wszystkich plików z pamięci podręcznej Gradle rozwiązało mój problem.
w systemie Linux:
źródło
W zależnościach usunąłem kompilację „com.android.support:support-v4:18.0.+” i to działa
źródło
Byłem w stanie rozwiązać problem w moim reagującym rodzimym projekcie, po prostu dodając
na końcu mojego pliku android \ app \ build.gradle
źródło
Wreszcie rozwiązałem to, modyfikując te atrybuty w pliku ocen modułu
źródło
Miałem ten sam problem podczas dodawania
react-native-palette
do mojego projektu, oto moje drzewo zależności:Próbowałem wielu rozwiązań i nie mogłem tego naprawić, dopóki nie zmienię
com.android.support:appcompat
wersjiandroid/app/build.gradle
, chciałbym, aby to pomogło:wydaje się, że wiele wpisów nie jest dużym problemem, niedopasowanie wersji jest
źródło
compile file('...')
Sprawił, że zadziałał w przypadku konfliktu, zwiększając minSdkVersion do 21 i włączając multidex. Nie jestem pewien, czy to najlepsze rozwiązanie, ale jedyny sposób, w jaki mogę sprawić, by działało w moim przypadku.Uwaga:
compile file('...')
ponieważ wydaje się, że nie można wstawićexclude
klauzuli, więc ta opcja nie była dostępna.źródło
Miałem ten sam problem, a moim rozwiązaniem jest zmiana wersji pomocy technicznej „27. +” (27.1.0) na „27 .0.1”
źródło
Miałem ten sam problem. W moim projekcie miałem następujące zależności:
Z wcześniejszych powodów appcompat został pobrany z repozytorium Google Maven, podczas gdy wsparcie dla Androida to lokalny plik .jar.
Kiedy to rozgryzłem i zastąpiłem to lokalne odniesienie do maven, po prostu rozwiązałem mój problem z kompilacją.
Oto różnica mojej aplikacji / build.gradle:
źródło
Rozwiązałem wszystkie moje problemy, dodając to do projektu.properties
źródło
Otrzymano następujący błąd
Wykonanie nie powiodło się dla zadania „: app: transformDexArchiveWithDexMergerForDebug”.
Poprawka: przejdź do Build -> Clean Project
źródło