Mehrere dex-Dateien definieren Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat
Lesezeit: 8 Minuten
xrd
Wenn ich laufe gradle assembleDebug Über die Befehlszeile erhalte ich plötzlich diesen Fehler:
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)
Wenn ich nach v4 suche, sehe ich zwei Dateien in meinem Build-Ordner.
Meine Gradle-Datei enthält nur diese Support-Bibliothek:
compile 'com.android.support:support-v13:19.0.0'
Ich bin ratlos, wie die r7-Bibliothek irgendwie enthalten ist. Ich bin gelaufen gradle clean und es erscheint immer dort, wenn ich AssembleDebug erneut ausführe.
Wenn ich im Build-Verzeichnis nach r7 suche, sehe ich es in der Datei:
Ich habe alle Lösungen ausprobiert, und es ist passiert, dass alle nicht funktioniert haben. Dann habe ich einfach ein neues Projekt mit demselben Namen erstellt und alle Dateien aus dem alten Projekt kopiert. Und es funktioniert jetzt super. Ich hoffe es hilft.
– Sam003
25. März 2015 um 20:01 Uhr
Ich hatte dieses Problem mit einer Komponente in support-v13. Nach langem Debuggen und vergeblichem Ausprobieren aller Antworten fand ich heraus, dass es eingeführt wurde, als ich versuchte, Kotlin in das Projekt zu integrieren, das ein vorhandenes Java-Projekt war. Ich habe die Kotlin-Standardbibliothek und andere Kotlin-Bibliotheken entfernt und es war in Ordnung. Ich würde immer noch versuchen, das Problem mit Kotlin zu beheben, aber jetzt muss ich arbeiten. Jede Info würde auch helfen, liebe Kotlin wirklich.
– Clementiano
27. März 2018 um 15:11 Uhr
CommonsWare
Laufen gradle -q dependencies (oder gradle -q :projectName:dependencies), um einen Abhängigkeitsbericht zu generieren. Sie sollten sehen, wo r7 kommt aus, wie zum Beispiel:
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
Verwenden Sie dann die exclude Anweisung zum Blockieren dieser Abhängigkeit. In meinem Fall kommt es aus meiner CWAC-Kamerabibliothek, und so verwende ich:
(Wo die zweite compile Aussage gibt an, welche Version Sie eigentlich wollen)
Das sollte die Sache klären, wie Sie sehen werden, wenn Sie den Abhängigkeitsbericht erneut ausführen:
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
Gibt es eine Methode zum Überprüfen/Ausschließen von Modulen aus .jar-Abhängigkeiten, die auf Maven nicht verfügbar sind? gradle dependencies scheint keine hinzugefügten Abhängigkeiten zu melden compile files('libs/example.jar')
– dbro
21. Januar 2014 um 20:47 Uhr
Nehmen wir an, ich habe zwei libs/*.jar Abhängigkeiten mit einem gemeinsamen Modul, beide sind nicht als Artefakt verfügbar. Gibt es eine Möglichkeit, eine ähnliche Abhängigkeitsprüfung / Klassenausschluss durchzuführen?
– dbro
21. Januar 2014 um 20:59 Uhr
@dbro: Nicht, dass ich mir dessen bewusst wäre, aber andererseits habe ich diesen Punkt nicht recherchiert. IMHO, aus dem Stegreif, eine oder beide dieser JAR-Dateien fühlen sich falsch verpackt an, da das gemeinsame Modul in ein eigenes JAR ausgelagert werden sollte.
– CommonsWare
21. Januar 2014 um 21:15 Uhr
./gradlew -q :projectName:dependencies hat bei mir funktioniert
– Defuera
17. November 2014 um 16:28 Uhr
Kurzer Tipp für diejenigen, die ein Modul aus einer Modulabhängigkeit ausschließen: Sie müssen Ihre drehen compile project(':foo') hinein compile(project(':foo')) { exclude module: 'support-v4' }. Beachten Sie die Klammer.
– Espinchi
22. November 2014 um 17:28 Uhr
mike.tihonchik
Ich habe einen ähnlichen Fehler behoben, indem ich den folgenden Code zu meinem hinzugefügt habe build.gradle Datei innerhalb des Android-Blocks.
Hat für mich funktioniert! Gibt es irgendwelche Nachteile, wenn man es so macht?
– Barrie Galitzky
23. Juli 2014 um 5:00 Uhr
@BarrieGalitzky Ich bin bisher auf keine Probleme gestoßen
– mike.tihonchik
23. Juli 2014 um 13:13 Uhr
Danke Mann, das hat perfekt funktioniert, um das Problem zu lösen! Wie auch immer, ich denke, dass es einige Nebenwirkungen hat. Die Aufgabe AssembleDebug wurde dreimal langsamer!
– Marino
23. Oktober 2014 um 0:40 Uhr
dexOptions nicht gefunden.
– Oliver Dixon
31. Januar 2015 um 4:32 Uhr
Nachdem ich dies hinzugefügt hatte, erhielt ich den Fehler „Die Übersetzung wurde unterbrochen“. Ich schätze, ich muss die CommonsWare-Methode ausprobieren.
– Droidenhimmel
20. Mai 2017 um 9:26 Uhr
MBH
Seit Ein Bild sagt mehr als tausend Worte
Um es einfacher und schneller zu machen, diese Aufgabe mit Anfängern wie mir zu erledigen. Dies sind die Screenshots, die die Antwort zeigen, die von gepostet wurde @edsappfactory.com das hat bei mir funktioniert:
Zuerst Öffnen Sie die Gradle-Ansicht auf der rechten Seite von Androidstudio, gehen Sie im Element Ihrer App zu Tasks dann Android dann Rechtsklick androidDependencies dann wähle Run:
Sekunde Sie werden so etwas sehen:
Der Hauptgrund, warum ich dies gepostet habe, war, dass es nicht einfach war zu wissen, wo eine ausgeführt werden sollte gradle Aufgabe oder die oben geposteten Befehle. Hier können sie also auch hingerichtet werden.
SO, um den Gradle-Befehl auszuführen:
Zuerst:
Sekunde:
Einfach wie es ist.
Das ist es.
Danke.
Beachten Sie auch, dass Sie Ihre Android-Abhängigkeiten sehen können, indem Sie zu Ihrer Android Studio Gradle-Ansicht gehen und das Ziel „androidDependencies“ auswählen.
Noch ein Tipp: Ich hatte dieses Problem, bis ich die v4-Unterstützungsbibliothek aus dem libs-Ordner sowohl im Projekt als auch in meinen zugehörigen Modul-/Bibliotheksprojekten entfernt habe.
Stevey
Ich habe diesen Fehler beim Upgrade auf ButterKnife 8.5.1 erhalten. Keine der anderen Antworten hier hat bei mir funktioniert.
ich benutzte gradle -q :app:dependencies um den Baum zu sehen, und habe dann JAR-Dateien durchgesehen, bis ich den Konflikt gefunden habe. Der Konflikt war die Abhängigkeit dieses Buttermessers com.android.support:support-compat:25.1.0 enthält eine Version der Barrierefreiheitsklasse und com.android.support:support-v4:23.1.1 enthält auch die Klasse.
Ich habe es gelöst, indem ich meine Abhängigkeit von diesem geändert habe:
Bisher scheint es keinen Einfluss auf den Betrieb von ButterKnife zu haben.
Bearbeiten: Es gibt eine bessere Lösung, die darin bestand, meine Android-Unterstützungsbibliotheken so zu aktualisieren, dass sie mit denen von ButterKnife übereinstimmen:
Die Support-Version beibehalten, ist eine einfache Lösung, und das Ausschlussmodul funktioniert bei mir nicht.
– Jay
16. März 2017 um 9:19 Uhr
Ich habe auch mit der zweiten Lösung gelöst! Gleicher Konflikt, aber mit Butter Knife Version 8.8.1 Beispiel: implementierung (‘com.jakewharton:butterknife:8.8.1’) {exclude module: ‘support-compat’ } annotationProcessor ‘com.jakewharton:butterknife-compiler:8.8.1’
– GFPF
25. Juni 2018 um 19:23 Uhr
Gemeinschaft
Falls jemand herausfindet, dass die Antwort von CommonsWare nicht auf das Android-Bibliotheksprojekt angewendet werden konnte, finden Sie hier das zu behebende Snippet
kompilieren (Projekt(‘:yourAndroidLibrary’)){ Modul ausschließen: ‘support-v13’ }
Sie werden Probleme finden
Nicht unterstützte Gradle-DSL-Methode gefunden: ‘exclude()’
wenn Sie kompilieren project(‘:yourAndroidLibrary’){ Modul ausschließen: ‘support-v13’ }
Die Unterschiede sind das Armband “(“ und “)” Vor “Projekt”.
Die Support-Version beibehalten, ist eine einfache Lösung, und das Ausschlussmodul funktioniert bei mir nicht.
– Jay
16. März 2017 um 9:19 Uhr
Ich habe auch mit der zweiten Lösung gelöst! Gleicher Konflikt, aber mit Butter Knife Version 8.8.1 Beispiel: implementierung (‘com.jakewharton:butterknife:8.8.1’) {exclude module: ‘support-compat’ } annotationProcessor ‘com.jakewharton:butterknife-compiler:8.8.1’
– GFPF
25. Juni 2018 um 19:23 Uhr
Pellet
exclude module: 'support-v4'
Würde bei mir mit einer Projektabhängigkeit nicht funktionieren, ich konnte es nur über die folgende Syntax zum Laufen bringen:
Ich habe alle Lösungen ausprobiert, und es ist passiert, dass alle nicht funktioniert haben. Dann habe ich einfach ein neues Projekt mit demselben Namen erstellt und alle Dateien aus dem alten Projekt kopiert. Und es funktioniert jetzt super. Ich hoffe es hilft.
– Sam003
25. März 2015 um 20:01 Uhr
Ich hatte dieses Problem mit einer Komponente in support-v13. Nach langem Debuggen und vergeblichem Ausprobieren aller Antworten fand ich heraus, dass es eingeführt wurde, als ich versuchte, Kotlin in das Projekt zu integrieren, das ein vorhandenes Java-Projekt war. Ich habe die Kotlin-Standardbibliothek und andere Kotlin-Bibliotheken entfernt und es war in Ordnung. Ich würde immer noch versuchen, das Problem mit Kotlin zu beheben, aber jetzt muss ich arbeiten. Jede Info würde auch helfen, liebe Kotlin wirklich.
– Clementiano
27. März 2018 um 15:11 Uhr