Mehrere Dex-Dateien definieren Landroid / support / v4 / accessibilityservice / AccessibilityServiceInfoCompat

212

Wenn ich gradle assembleDebugüber die Befehlszeile laufe , wird plötzlich folgende Fehlermeldung angezeigt:

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 grep, sehe ich zwei Dateien in meinem Build-Ordner.

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

Meine Gradle-Datei enthält nur diese Unterstützungsbibliothek:

compile 'com.android.support:support-v13:19.0.0'

Ich bin ratlos darüber, wie die r7-Bibliothek irgendwie enthalten ist. Ich bin gelaufen gradle cleanund es erscheint immer dort, wenn ich assembleDebug erneut ausführe .

Wenn ich im Build-Verzeichnis nach r7 greife, sehe ich es in der Datei:

Binary file build/exploded-bundles/ComGoogleAndroidGmsPlayServices4030.aar/classes.jar matches

Wenn ich v13 nicht einbinde, werden andere Dinge nicht kompiliert.

Aber enthält v13 nicht die v4-Unterstützungsbibliothek?

Ist dies eine Inkompatibilität zwischen dem AAR-Bundle für Wiedergabedienste und der v13-Bibliothek?

Ich habe die Gradle-Datei von gradleplease.appspot.com geholt.

Das Entfernen von Spieldiensten behebt das Problem nicht. gleicher Fehler.

Meine Abhängigkeiten in 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
quelle
1
Ich habe alle Lösungen ausprobiert und es ist passiert, dass alle nicht funktioniert haben. Dann habe ich gerade ein neues Projekt mit demselben Namen erstellt und alle Dateien aus dem alten Projekt kopiert. Und es funktioniert jetzt großartig. Ich hoffe es hilft.
Sam003
Ich hatte dieses Problem mit einer Komponente in support-v13. Nachdem ich viel debuggt und alle Antworten ohne Erfolg ausprobiert hatte, fand ich heraus, dass es eingeführt wurde, als ich versuchte, Kotlin in das Projekt zu integrieren, das ein spannendes 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, wirklich lieben Kotlin.
Clementiano

Antworten:

304

Führen Sie gradle -q dependencies(oder gradle -q :projectName:dependencies) aus, um einen Abhängigkeitsbericht zu generieren. Sie sollten sehen, woher r7es kommt, 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 excludeAnweisung, um diese Abhängigkeit zu blockieren. In meinem Fall stammt es aus meiner CWAC-Kamerabibliothek und ich verwende:

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

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

(wobei die zweite compileAnweisung angibt, welche Version Sie tatsächlich möchten)

Das sollte die Sache klären, denn Sie werden sehen, ob 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
CommonsWare
quelle
3
Gibt es eine Methode zum Überprüfen / Ausschließen von Modulen aus .jar-Abhängigkeiten, die für Maven nicht verfügbar sind? gradle dependenciesscheint keine Abhängigkeiten zu melden, die mitcompile files('libs/example.jar')
dbro
3
Angenommen, ich habe zwei libs/*.jarAbhängigkeiten mit einem Modul gemeinsam, von denen keine als Artefakt verfügbar ist. Gibt es eine Möglichkeit, eine ähnliche Abhängigkeitsprüfung / einen ähnlichen Klassenausschluss durchzuführen?
dbro
2
@dbro: Nicht dass ich es wüsste, aber andererseits habe ich diesen Punkt nicht untersucht. IMHO fühlen sich eine oder beide dieser JAR-Dateien falsch verpackt an, da das gemeinsame Modul in seine eigene JAR zerlegt werden sollte.
CommonsWare
12
./gradlew -q: Projektname: Abhängigkeiten arbeiteten für mich
Defuera
15
Schneller Tipp für diejenigen, die ein Modul aus einer Modulabhängigkeit entfernen: Sie müssen Ihr compile project(':foo')in verwandeln compile(project(':foo')) { exclude module: 'support-v4' }. Beachten Sie die Klammer.
Espinchi
122

Ich habe einen ähnlichen Fehler behoben, indem ich meiner build.gradle- Datei im Android-Block folgenden Code hinzugefügt habe .

android {
    dexOptions {
        preDexLibraries = false
    }
}
mike.tihonchik
quelle
4
Hat für mich gearbeitet! Gibt es irgendwelche Nachteile, wenn man es so macht?
Barrie Galitzky
@BarrieGalitzky Ich bin bisher auf keine Probleme
gestoßen
3
Danke Mann, das hat perfekt funktioniert, um das Problem zu lösen! Wie auch immer, ich denke, dass es einige Nebenwirkungen hat. Die AssembleDebug-Aufgabe wurde dreimal langsamer!
Marino
dexOptions nicht gefunden.
Oliver Dixon
10
Nachdem ich dies hinzugefügt habe, wurde der Fehler "Übersetzung wurde unterbrochen" angezeigt. Ich denke, ich muss die CommonsWare-Methode ausprobieren.
DroidHeaven
36

Denn 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 von @ edsappfactory.com zeigen , die für mich funktioniert hat:

Zunächst öffnen Sie die Gradle Ansicht auf der rechten Seite von Android Studio, in Artikel gehen Ihrer App auf Tasksdann Androidanschließend mit der rechten Maustaste androidDependenciesund wählen Sie Run:

Schritt 1

Zweitens sehen Sie so etwas:

Schritt 2

Der Hauptgrund, warum ich dies gepostet habe, war, dass es nicht einfach war zu wissen, wo eine gradleAufgabe oder die oben angegebenen Befehle ausgeführt werden sollten. Hier können Sie sie also auch entschuldigen.

SO, um den Gradle-Befehl auszuführen:

Zuerst:

zuerst

Zweite:

zweite

So einfach ist das.

Das ist es.

Danke dir.

MBH
quelle
33

Beachten Sie auch, dass Sie Ihre Android-Abhängigkeiten anzeigen können, indem Sie in Ihrer Android Studio Gradle-Ansicht 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 den zugehörigen Modul- / Bibliotheksprojekten entfernt habe.

Ed Manners
quelle
3
Spezifischere Anweisung? "AndroidDependencies" kann nicht gefunden werden. Thx
CopperCash
Gehen Sie zur Gradle-Ansicht, suchen Sie die Überschrift Alle Aufgaben, gehen Sie auf den Namen Ihrer App und dann auf ": app", dort finden Sie "androidDependencies".
AutoM8R
2
Wo ist die Gradle-Ansicht?
Paul Beusterien
4
@PaulBeusterien Wenn Sie zur rechten Seite des Fensters schauen, gibt es eine seitliche Registerkarte mit der Bezeichnung Gradle. Klicken Sie darauf, um eine angeheftete Ansicht zu öffnen. Die androidDependencies ist eigentlich eine Gradle-Aufgabe
JCricket
Danke Mann, ich habe Screenshots gepostet, in denen deine Antwort erklärt wird, um es einfacher zu machen.
MBH
11

Beim Upgrade auf ButterKnife 8.5.1 wurde dieser Fehler angezeigt. Keine der anderen Antworten hier hat bei mir funktioniert.

Früher gradle -q :app:dependencieshabe ich den Baum gesehen und dann die JAR-Dateien durchgesehen, bis ich den Konflikt gefunden habe. Der Konflikt bestand darin, dass die Abhängigkeit von Butterknife von com.android.support:support-compat:25.1.0eine Version der Eingabehilfenklasse und com.android.support:support-v4:23.1.1auch die Klasse enthält.

Ich habe es gelöst, indem ich meine Abhängigkeit davon geändert habe:

compile 'com.jakewharton:butterknife:8.5.1'

dazu:

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

Dies scheint den Betrieb von ButterKnife bisher nicht zu beeinträchtigen.

Bearbeiten: Es gibt eine bessere Lösung, nämlich meine Android-Support-Bibliotheken so zu aktualisieren, dass sie mit denen von ButterKnife übereinstimmen:

compile('com.android.support:appcompat-v7:25.2.0')
compile('com.android.support:design:25.2.0')
compile 'com.jakewharton:butterknife:8.5.1'
user3562927
quelle
Die Support-Version gleich zu halten ist eine einfache Lösung und das Ausschlussmodul funktioniert bei mir nicht.
Jay
Ich habe auch mit der zweiten Lösung gelöst! Gleicher Konflikt, jedoch mit Butter Knife Version 8.8.1 Beispiel: Implementierung ('com.jakewharton: butterknife: 8.8.1') {Modul ausschließen: 'support-compatible'} annotationProcessor 'com.jakewharton: butterknife-compiler: 8.8.1'
GFPF
9

Falls jemand herausfindet, dass die Antwort von CommonsWare nicht auf ein Android-Bibliotheksprojekt angewendet werden kann, finden Sie hier das zu behebende Snippet

compile (project (': yourAndroidLibrary')) {Modul ausschließen: 'support-v13'}

Sie werden Probleme finden

Nicht unterstützte Gradle DSL-Methode gefunden: 'exclude ()'

Wenn Sie ein Kompilierungsprojekt verwenden (': yourAndroidLibrary') {Modul ausschließen: 'support-v13'}

Die Unterschiede sind das Armband "(" und ")" vor "Projekt" .

Tony Thompson
quelle
Danke, es fehlte eine doppelte Klammer!
Marko
8
exclude module: 'support-v4'

Würde für mich mit einer Projektabhängigkeit nicht funktionieren, konnte ich es nur über die folgende Syntax zum Laufen bringen:

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

Wo: Android-SDK ist Ihr Projektname.

Pellet
quelle
8

Ich hatte das gleiche Problem und es scheint, dass meine App aufgrund der Bibliotheken zu viele Methoden hatte: http://developer.android.com/tools/building/multidex.html

Es wurde gelöst mit:

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

Mehr hier Fehler: Ausführung für Aufgabe ': app: dexDebug' fehlgeschlagen. > Befehl mit Exit-Wert 2 ungleich Null beendet

Giannis P.
quelle
1
Multidexing kann den Start Ihrer App verlangsamen. Verwenden Sie es nur, wenn Sie es wirklich müssen.
James Goodwin
6

Ich hatte den gleichen Fehler, aber das lag daran, dass ich kürzlich von v4 auf v13 gewechselt hatte. Also musste ich nur das Projekt reinigen.

Ashishduh
quelle
1
Hatte den gleichen Fehler nach dem Upgrade von Intellij, das Problem wurde durch Bereinigen des Projekts behoben.
Vlad Spreys
5

Ich hatte den gleichen Fehler bei einem Legacy-Projekt. Mein Fehler war, dass die Support-Bibliothek zweimal enthalten war: Einmal in der Google-Play-Services-Bibliothek und einmal als eigenständige.

So habe ich es behoben:

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

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

Hoffe es hilft jemandem :-)

voghDev
quelle
3

Ich benutze com.google.android.gms:play-services-analytics:8.3.0und android-support-v13.jarund konnte nicht exclude module: 'support-v4'zur Arbeit kommen.

Was für mich funktionierte, war die Verwendung des android-support-v13Artefakts anstelle der android-support-v13.jarDatei.

Dh statt

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

}}

ich benutzte

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

}}

Barry
quelle
3

In meinem Fall wurde das Problem durch Versionsinkonsistenz verursacht :

Build tools 25
compileSdk 24
targetSdk 24
Support library 24

Die Lösung war einfach: Machen Sie alles Version 25

Windreiter
quelle
3

Ein ähnliches Dex-Problem wurde behoben

gradle.build enthielt:

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'

Das Problem wurde behoben, als ich entfernte

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

Mein Gradle sieht jetzt so aus:

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

Es gab eine Redundanz in der JAR - Datei und das kompilierte gradle Projekt

Suchen Sie daher sorgfältig nach Abhängigkeits- und JAR-Dateien mit denselben Klassen.

Und entfernen Sie Redundanz.
Das hat bei mir funktioniert.

glänzend vn
quelle
2

Wenn Sie Ihr Projekt aus Eclipse importiert haben .

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

Das Szenario, mit dem ich nach dem Importieren des Eclipse-Projekts in Android Studio konfrontiert war.

Hoffe das hilft..

MobileEvangelist
quelle
2

Dies ist ein ärgerliches Problem, das einige Zeit in Anspruch nehmen kann, um den Grundfall herauszufinden. Die Vorgehensweise ist @CommonsWare Antwort.

Ich war kürzlich mit diesem Problem konfrontiert und fand es schwierig, es zu lösen.

Mein Problem war, dass ich eine Bibliothek mit der Version "+" in build.gradle aufgenommen habe. Die neueste Version der Bibliothek enthielt einen älteren Dex und Bang.

Ich kehrte zu einer älteren Version der Bibliothek zurück und löste sie.

Es ist gut, Ihre androidDependencies auszuführen und zu sehen, was wirklich passiert. Es ist auch gut, in Ihrem Build-Ordner zu suchen.

Vor allem Android Studio 2.2 bietet integrierte Funktionen, um dieses Problem zu verfolgen.

Happy Coding Guys

Arun C.
quelle
2

Wechseln Sie in Android Studio zu Ihrem build.gradle (überprüfen Sie die build.gradle-Dateien für Projekte und Module) und suchen Sie nach doppelten Abhängigkeiten.

Löschen Sie diejenigen, die Ihr Projekt nicht benötigt.

KadoLakatt
quelle
2

Das Löschen aller Dateien aus dem Gradle-Cache hat mein Problem behoben.

unter Linux:

rm -rf ~/.gradle/caches/*
Yuliia Ashomok
quelle
1

Ich habe die Kompilierung 'com.android.support:support-v4:18.0.+' in Abhängigkeiten entfernt und es funktioniert

albert
quelle
2
Dies sollte ein Kommentar sein oder Sie sollten ihn besser erklären.
Anirudh Sharma
1

Ich konnte das Problem in meinem reaktiven nativen Projekt durch einfaches Hinzufügen lösen

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

am Ende meiner android \ app \ build.gradle Datei

Yusuf Khan
quelle
0

Schließlich habe ich es gelöst, indem ich diese Attribute in der Modul-Gradle-Datei geändert habe

  1. compileSdkVersion 25
  2. targetSdkVersion 25
  3. kompiliere 'com.android.support:appcompat-v7:+'
  4. kompiliere 'com.android.support:recyclerview-v7:+'
Val Martinez
quelle
0

Ich hatte das gleiche Problem beim Hinzufügen react-native-palettezu meinem Projekt. Hier ist mein Abhängigkeitsbaum:

./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 (*)

Ich habe viele Lösungen ausprobiert und konnte sie nicht beheben, bis ich die com.android.support:appcompatVersion geändert habe. android/app/build.gradleIch wünschte, dies könnte helfen:

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:+"
}

Es scheint, dass mehrere Einträge kein großes Problem sind, Versionsinkongruenz ist

Matrixer
quelle
0

Es hat für einen compile file('...')Konflikt funktioniert, indem minSdkVersion auf 21 erhöht und Multidex aktiviert wurde. Ich bin mir nicht sicher, ob dies die beste Lösung ist, aber die einzige Möglichkeit, sie in meinem Fall zum Laufen zu bringen.

Hinweis: compile file('...')Es scheint, dass Sie keine excludeKlausel einfügen können, sodass diese Option nicht verfügbar war.

Ben Kleywegt
quelle
0

Ich hatte das gleiche Problem und meine Lösung besteht darin, die Support-Version '27. + '(27.1.0) in '27 .0.1' zu ändern.

Mingyong Gu
quelle
0

Ich hatte das gleiche Problem. In meinem Projekt hatte ich folgende Abhängigkeiten:

  • appcompat-v7
  • android-support-v13

Aus alten Gründen wurde der Appcompat aus dem Google Maven-Repo abgerufen, während die Android-Unterstützung eine lokale .jar-Datei war.

Als ich dies herausfand und diese lokale Referenz durch eine Maven-Referenz ersetzte, löste dies nur mein Build-Problem.

Hier ist der Unterschied zu meiner App / build.gradle:

Geben Sie hier die Bildbeschreibung ein

kall2sollies
quelle
0

Ich habe alle meine Probleme gelöst, indem ich dies zu project.properties hinzugefügt habe

cordova.system.library.7=com.android.support:appcompat-v7:27.1.0
eatmeimadanish
quelle
0

Erhielt den folgenden Fehler

Ausführung für Task ': app: transformDexArchiveWithDexMergerForDebug' fehlgeschlagen.

com.android.build.api.transform.TransformException: com.android.dex.DexException: Mehrere Dex-Dateien definieren Landroid / support / Constraint / ConstraintSet $ ​​1

Fix: Gehen Sie zu Build -> Clean Project

Ragunath CR
quelle
Hallo, willkommen bei Stack Overflow. Aber bitte wiederholen Sie die Antworten nicht. Abgesehen davon, dass Sie bereits 24 Antworten haben, wurde das Reinigen des Gebäudes bereits als Antwort von Ashishduh bereitgestellt. Vielen Dank!
Elletlar