Wiele plików dex definiuje Landroid / support / v4 / accessibilityservice / AccessibilityServiceInfoCompat

212

Jeśli uruchomię gradle assembleDebugz 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 cleani 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'
}
xrd
źródło
1
Wypróbowałem wszystkie rozwiązania i zdarzyło się, że wszystkie nie działały. Następnie stworzyłem nowy projekt o tej samej nazwie i skopiowałem wszystkie pliki ze starego projektu. I teraz działa świetnie. Mam nadzieję, że to pomoże.
Sam003,
Miałem ten problem ze składnikiem w support-v13. Po wielu debugowaniu i wypróbowaniu wszystkich odpowiedzi bezskutecznie, dowiedziałem się, że został wprowadzony, kiedy próbowałem zintegrować kotlina z projektem, który był ekscytującym projektem Java. Usunąłem standardową bibliotekę kotlin i inne biblioteki kotlin i było w porządku. Wciąż próbowałbym rozwiązać problem z kotlinem, ale na razie muszę pracować. Każda informacja też by pomogła, naprawdę kocham kotlin.
clementiano

Odpowiedzi:

304

Uruchom gradle -q dependencies(lub gradle -q :projectName:dependencies), aby wygenerować raport zależności. Powinieneś zobaczyć, skąd r7pochodzi, na przykład:

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    |    \--- com.google.android:support-v4:r7
|    +--- com.commonsware.cwac:camera:0.5.4
|    \--- com.android.support:support-v4:18.0.+ -> 18.0.0
\--- com.android.support:support-v4:18.0.+ -> 18.0.0

Następnie użyj excludedyrektywy, aby zablokować tę zależność. W moim przypadku pochodzi z mojej biblioteki CWAC-Camera, dlatego używam:

dependencies {
    compile('com.commonsware.cwac:camera-v9:0.5.4') {
      exclude module: 'support-v4'
    }

    compile 'com.android.support:support-v4:18.0.+'
}

(gdzie drugie compilezdanie wskazuje, jakiej wersji faktycznie chcesz)

To powinno wyjaśnić sprawy, ponieważ zobaczysz, czy ponownie uruchomisz raport zależności:

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    \--- com.commonsware.cwac:camera:0.5.4
\--- com.android.support:support-v4:18.0.+ -> 18.0.0
CommonsWare
źródło
3
Czy istnieje metoda sprawdzania / wykluczania modułów z zależności .jar, niedostępna w Maven? gradle dependencieswydaje się nie zgłaszać zależności dodanych docompile files('libs/example.jar')
dbro
3
Powiedzmy, że mam dwie libs/*.jarzależ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?
dbro
2
@dbro: Nie jestem tego świadomy, ale z drugiej strony nie badałem tego punktu. IMHO, poza mankietem, jeden lub oba z tych plików JAR wydają się źle spakowane, ponieważ wspólny moduł powinien być rozłożony na własne JAR.
CommonsWare
12
./gradlew -q: nazwa projektu: zależności zadziałały dla mnie
Defuera,
15
Szybka porada dla tych exlucing moduł z zależnością modułu: Musisz włączyć compile project(':foo')INTO compile(project(':foo')) { exclude module: 'support-v4' }. Zwróć uwagę na nawias.
espinchi
122

Rozwiązałem podobny błąd, dodając następujący fragment kodu do mojego pliku build.gradle w bloku Androida.

android {
    dexOptions {
        preDexLibraries = false
    }
}
mike.tihonchik
źródło
4
Pracował dla mnie! Czy ma to jakieś wady?
Barrie Galitzky
@BarrieGalitzky Do tej pory nie napotkałem żadnych problemów
mike.tihonchik
3
Dzięki człowieku, to zadziałało idealnie, aby rozwiązać problem! W każdym razie myślę, że ma pewne skutki uboczne. Zadanie assembleDebug stało się 3 razy wolniejsze!
Marino
dexOptions nie znaleziono.
Oliver Dixon
10
Po dodaniu tego pojawia się błąd „Tłumaczenie zostało przerwane”. Chyba muszę spróbować metody CommonsWare.
DroidHeaven
36

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, Tasksa Androidnastępnie kliknij prawym przyciskiem myszy androidDependenciesi wybierz Run:

krok 1

Po drugie zobaczysz coś takiego:

Krok 2

Głównym powodem, dla którego to opublikowałem, było to, że nie było łatwo wiedzieć, gdzie wykonać gradlezadanie lub polecenia opublikowane powyżej. Więc tutaj też ich ekscytujesz.

SO, aby wykonać polecenie gradle:

Pierwszy:

pierwszy

Druga:

druga

Proste jak to jest.

Otóż ​​to.

Dziękuję Ci.

MBH
źródło
33

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.

Ed Manners
źródło
3
Bardziej szczegółowe instrukcje? Nie można znaleźć „androidDependencies”. Thx
CopperCash
Przejdź do widoku Gradle, a następnie znajdź nagłówek Wszystkie zadania, przejdź do nazwy swojej aplikacji, a następnie przejdź do „: app”, znajdziesz tam „androidDependencies”.
AutoM8R,
2
Gdzie jest widok Gradle?
Paul Beusterien
4
@PaulBeusterien Jeśli spojrzysz na prawą stronę okna, zobaczysz boczną zakładkę oznaczoną Gradle. Kliknij, aby otworzyć przypięty widok. AndroidDependencies to tak naprawdę zadanie
stopniowe
dziękuję człowieku, wysłałem zrzuty ekranu wyjaśniające twoją odpowiedź, aby to ułatwić.
MBH
11

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:dependenciesdrzewo, a potem przeglądałem pliki jar, aż znalazłem konflikt. Konflikt polegał na tym, że zależność maślanki com.android.support:support-compat:25.1.0zawiera wersję klasy dostępności, a com.android.support:support-v4:23.1.1także zawiera klasę.

Rozwiązałem to, zmieniając moją zależność od tego:

compile 'com.jakewharton:butterknife:8.5.1'

do tego:

compile('com.jakewharton:butterknife:8.5.1') {
    exclude module: 'support-compat'
}

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:

compile('com.android.support:appcompat-v7:25.2.0')
compile('com.android.support:design:25.2.0')
compile 'com.jakewharton:butterknife:8.5.1'
użytkownik3562927
źródło
utrzymywanie wersji wsparcia takiej samej jest proste rozwiązanie i moduł wykluczania nie działa dla mnie.
Jay
Rozwiązałem również z drugim rozwiązaniem! Ten sam konflikt, ale z Butter Knife w wersji 8.8.1 Przykład: implementacja ('com.jakewharton: butterknife: 8.8.1') {wyklucz moduł: 'support-kompatybil'} adnotacja procesor 'com.jakewharton: butterknife-kompilator: 8.8.1'
GFPF,
9

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

Znaleziono nieobsługiwaną metodę Gradle DSL: „exclude ()”

jeśli używasz projektu kompilacji (': yourAndroidLibrary') {wyklucz moduł: 'support-v13'}

Różnice dotyczą bransoletki „(” i „)” przed „projektem” .

Tony Thompson
źródło
Dzięki, brakowało podwójnego nawiasu!
Marko,
8
exclude module: 'support-v4'

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:

configurations {
    dependencies {
        compile(project(':Android-SDK')) {
            compile.exclude module: 'support-v4'
        }
    }
}

Gdzie: Android-SDK to nazwa twojego projektu.

Śrut
źródło
8

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ą:

android {
   defaultConfig {
   ...
   multiDexEnabled = true
   }
}

Więcej tutaj Błąd: Wykonanie nie powiodło się dla zadania „: app: dexDebug”. > komenda zakończona niezerową wartością wyjścia 2

Giannis P.
źródło
1
Multidexing może spowolnić uruchamianie aplikacji, używaj go tylko wtedy, gdy naprawdę musisz.
James Goodwin,
6

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.

Ashishduh
źródło
1
Miał ten sam błąd po aktualizacji Intellij, czyszczenie projektu rozwiązało problem.
Vlad Spreys,
5

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:

dependencies {
   compile files('libs/android-support-v4.jar') 
   compile files('libs/core-2.2.jar')
   compile files('libs/universal-image-loader-1.8.5-with-sources.jar')
   compile 'com.google.android.gms:play-services:3.2.65'
}

DOBRA build.gradle:

dependencies {
   // compile files('libs/android-support-v4.jar')  // not needed 
   compile files('libs/core-2.2.jar')
   compile files('libs/universal-image-loader-1.8.5-with-sources.jar')
   compile 'com.google.android.gms:play-services:3.2.65'
}

Mam nadzieję, że to komuś pomoże :-)

voghDev
źródło
3

Używam com.google.android.gms:play-services-analytics:8.3.0i android-support-v13.jarnie mógł dostać exclude module: 'support-v4'się do pracy.

Dla mnie zadziałało użycie android-support-v13artefaktu zamiast android-support-v13.jarpliku.

Tj. Zamiast

dependencies {
compile ('com.google.android.gms:play-services-analytics:8.3.0')
compile files('libs/android-support-v13.jar')

}

użyłem

dependencies {
compile ('com.google.android.gms:play-services-analytics:8.3.0')
compile ('com.google.android:android-support-v13')

}

Barry
źródło
3

W moim przypadku problem był spowodowany niespójnością wersji :

Build tools 25
compileSdk 24
targetSdk 24
Support library 24

Rozwiązanie było proste: uczyń wszystko wersją 25

Powietrzny jeźdźca
źródło
3

Podobny sposób rozwiązano problem Dex

gradle.build zawierał:

compile files('libs/httpclient-4.2.1.jar')
compile 'org.apache.httpcomponents:httpclient:4.5'
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'

Problem został rozwiązany po usunięciu

compile files('libs/httpclient-4.2.1.jar') 

Moja ocena wygląda teraz następująco:

apply plugin: 'com.android.application'

android {

compileSdkVersion 24
buildToolsVersion "24.0.3"

defaultConfig {
    applicationId "com.mmm.ll"
    minSdkVersion 16
    targetSdkVersion 24
    useLibrary  'org.apache.http.legacy'
}

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}
}

dependencies {

compile 'com.google.android.gms:play-services:6.1.+'
compile files('libs/PayPalAndroidSDK.jar')
compile files('libs/ksoap2-android-assembly-3.0.0-RC.4-jar-with-dependencies.jar')
compile files('libs/picasso-2.1.1.jar')
compile files('libs/gcm.jar')
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'org.apache.httpcomponents:httpclient:4.5'
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
}

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.

błyszczący vn
źródło
2

Jeśli zaimportowałeś projekt z Eclipse .

1. The select project 
2. Go to File -> **Project Structure**
3. Select app in **module** section on left hand panel
4. Select **Dependency** tab
5. Your able to see jars you have added in eclipse project for v4 and v13.
6. Remove that jar by clicking on minus sign at bottom after selection
7. Click on Plus sign select **Library Dependency** 
8. Choose V4 and V13 if added
9. Press Ok and Clean and Rebuild your project

Scenariusz, z którym miałem do czynienia po zaimportowaniu projektu Eclipse do studia Android.

Mam nadzieję że to pomoże..

MobileEvangelist
źródło
2

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

Arun C.
źródło
2

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.

KadoLakatt
źródło
2

Usunięcie wszystkich plików z pamięci podręcznej Gradle rozwiązało mój problem.

w systemie Linux:

rm -rf ~/.gradle/caches/*
Julia Ashomok
źródło
1

W zależnościach usunąłem kompilację „com.android.support:support-v4:18.0.+” i to działa

Albert
źródło
2
powinien to być komentarz, albo lepiej wyjaśnij to.
Anirudh Sharma,
1

Byłem w stanie rozwiązać problem w moim reagującym rodzimym projekcie, po prostu dodając

configurations {
        all*.exclude group: 'com.android.support', module: 'support-compat'
        all*.exclude group: 'com.android.support', module: 'support-core-ui'
    }

na końcu mojego pliku android \ app \ build.gradle

Yusuf Khan
źródło
0

Wreszcie rozwiązałem to, modyfikując te atrybuty w pliku ocen modułu

  1. compileSdkVersion 25
  2. targetSdkVersion 25
  3. skompiluj „com.android.support:appcompat-v7:+”
  4. skompiluj „com.android.support:recyclerview-v7:+”
Val Martinez
źródło
0

Miałem ten sam problem podczas dodawania react-native-palettedo mojego projektu, oto moje drzewo zależności:

./gradlew app:dependencies
+--- project :react-native-palette
|    +--- com.facebook.react:react-native:0.20.+ -> 0.44.2
|    |    +--- javax.inject:javax.inject:1
|    |    +--- com.android.support:appcompat-v7:23.0.1
|    |    |    \--- com.android.support:support-v4:23.0.1
|    |    |         \--- com.android.support:support-annotations:23.0.1 -> 24.2.1
...
|    \--- com.android.support:palette-v7:24.+ -> 24.2.1
|         +--- com.android.support:support-compat:24.2.1
|         |    \--- com.android.support:support-annotations:24.2.1
|         \--- com.android.support:support-core-utils:24.2.1
|              \--- com.android.support:support-compat:24.2.1 (*)
+--- com.android.support:appcompat-v7:23.0.1 (*)
\--- com.facebook.react:react-native:+ -> 0.44.2 (*)

Próbowałem wielu rozwiązań i nie mogłem tego naprawić, dopóki nie zmienię com.android.support:appcompatwersji android/app/build.gradle, chciałbym, aby to pomogło:

dependencies {
    compile project(':react-native-palette')
    compile project(':react-native-image-picker')
    compile project(':react-native-camera')
    compile fileTree(dir: "libs", include: ["*.jar"])
    // compile "com.android.support:appcompat-v7:23.0.1"
    compile "com.android.support:appcompat-v7:24.2.1"
    compile "com.facebook.react:react-native:+"
}

wydaje się, że wiele wpisów nie jest dużym problemem, niedopasowanie wersji jest

matryca
źródło
0

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ć excludeklauzuli, więc ta opcja nie była dostępna.

Ben Kleywegt
źródło
0

Miałem ten sam problem, a moim rozwiązaniem jest zmiana wersji pomocy technicznej „27. +” (27.1.0) na „27 .0.1”

Mingyong Gu
źródło
0

Miałem ten sam problem. W moim projekcie miałem następujące zależności:

  • appcompat-v7
  • Android-support-v13

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:

wprowadź opis zdjęcia tutaj

kall2sollies
źródło
0

Rozwiązałem wszystkie moje problemy, dodając to do projektu.properties

cordova.system.library.7=com.android.support:appcompat-v7:27.1.0
eatmeimadanish
źródło
0

Otrzymano następujący błąd

Wykonanie nie powiodło się dla zadania „: app: transformDexArchiveWithDexMergerForDebug”.

com.android.build.api.transform.TransformException: com.android.dex.DexException: Wiele plików dex definiuje Landroid / support / constraint / ConstraintSet 1 USD

Poprawka: przejdź do Build -> Clean Project

Ragunath CR
źródło
Witaj Witaj w przepełnieniu stosu. Ale proszę, nie powtarzaj odpowiedzi, oprócz tego, że masz już 24 odpowiedzi, budynek czysty został już dostarczony jako odpowiedź przez Ashishduh. Dzięki!
Elletlar,