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

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

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

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.


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.


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'

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" .


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.


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


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.


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


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

}}


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


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.


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..


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


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.


2

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

unter Linux:

rm -rf ~/.gradle/caches/*

1

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


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


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:+'

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


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.


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.


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


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

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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.