Dex kann nicht ausgeführt werden: Es werden mehrere Dex-Dateien definiert

125

Ich weiß, dass diese Frage hier schon einige Male gestellt wurde. Aber ich habe noch keine mögliche Lösung gesehen. Bevor ich das Projekt 'Als Android-Anwendung ausführen' mache, erhalte ich die folgende Fehlermeldung, wenn ich es nicht bereinige, und muss Eclipse neu starten ... und erneut bereinigen.

Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define
     Lcom/jstun/core/attribute/MessageAttributeInterface;

com.jstun.core ... ist ein Teil meines src-Ordners, natürlich kann ich ihn nicht entfernen. Und selbst wenn ich dieses Paket entferne, wird ein anderes Paket als Fehler angezeigt wie:

Unable to execute dex: Multiple dex files define
     Landroid/support/v4/app/ActivityCompatHoneycomb;

Ich habe diesen Fehler seit dem Update auf ADT 15 gesehen. Ich verwende Eclipse Galileo unter Ubuntu. Haben Sie eine Idee? Vielen Dank für jede Antwort!

Tran Ngu Dang
quelle
Ich habe fast alles in diesem Thread versucht, aber es hat nicht funktioniert. Ich habe das Problem behoben, indem ich das Projekt gelöscht, dann ein neues erstellt und die Quelldateien aus der Sicherung kopiert habe.
Linuxjava
verweisen Sie diese. stackoverflow.com/questions/34415101/…
Steve
Schauen Sie sich meine Antwort unter folgendem Link an. stackoverflow.com/a/38391449/3702595
Sattar Hummatli

Antworten:

136

Dies ist ein Problem mit dem Erstellungspfad.

  • Stellen Sie sicher, dass Ihr bin-Ordner nicht in Ihrem Erstellungspfad enthalten ist.

  • Klicken Sie mit der rechten Maustaste auf Ihr Projekt -> gehen Sie zu Eigenschaften -> Pfad erstellen.

  • Stellen Sie sicher, dass sich die Honeycomb-Bibliothek in Ihrem libs/Ordner und nicht in Ihrem Quellordner befindet.

  • Fügen Sie die Bibliotheken libs/einzeln in den Erstellungspfad ein.

    Übrigens möchten Sie vielleicht die android-support-v4Bibliothek mitbringen , um Ice Cream Sandwich-Unterstützung anstelle der Honeycomb-Unterstützungsbibliothek zu erhalten.

Frottee
quelle
50
Dieses Problem trat auch auf, wenn mehrere Versionen von Bibliotheken physisch in Ihrem Erstellungspfad enthalten sind. Entfernen Sie die nicht verwendeten Bibliotheken aus dem libsPfad, bereinigen und speichern Sie das Projekt, starten Sie Eclipse neu und kompilieren Sie es erneut.
Aryo
Das Ausschließen des bin-Ordners vom Erstellungspfad hat das Problem für mich gelöst. Vielen Dank!
Alekop
2
Die Hauptursache des Problems war, dass eine der Bibliotheken die Nineoldandroid-Bibliothek als JAR im ./libs-Verzeichnis verwendete, während ein anderes Projekt Nineoldandroid verwendete, indem es darauf verwies
Deepika Lalra
Dies kann auch passieren, wenn Sie so etwas wie Foo.javain einem Paket und Foo.javain einem Glas inlibs/
Tricknologie
Dieser Fehler tritt immer dann auf, wenn sich Ihr Projektordner in Google Drive befindet. Ich denke, es ist ein Fehler, wenn Drive synchronisiert wird. Zumindest für mich
ymerdrengene
58

Ich bin heute auf einen ähnlichen Fehler gestoßen, und der Grund dafür war, dass auf die Support-Bibliothek von zwei Bibliotheksprojekten verwiesen wurde, die von meinem App-Projekt verwendet wurden, jedoch unterschiedliche Versionen hatten.

Weitere Details: Meine App hängt von 2 Bibliotheksprojekten ab

  • FaceBookSDK 3.0 -> das auf android-support-v4 verweist
  • ActionBarSherlock -> das auf android-support-v4 verweist, aber eine modifizierte Version zur Unterstützung von Maps enthält.

Um das Problem zu lösen, musste ich die FaceBookSDK-Bibliothek von der ABS-Bibliothek anstelle der Support-Bibliothek direkt abhängig machen.

M.Sameer
quelle
Ja, mein Problem war ähnlich. Zwei Bibliotheken hatten die httpmime-Bibliothek, also entfernte ich eine und ließ sie auf das andere Projekt verweisen.
Matt
10
Kann jemand von euch genau erklären, wie ihr es gemacht habt?
Samih A
3
@samih In dem Beispiel, das ich erwähnt habe, habe ich zuerst android-support-v4 jar aus dem Ordner lib und dem Erstellungspfad des FaceBookSDK-Projekts lib entfernt. Dann habe ich einen Verweis auf das ActionBarSherlock-Bibliotheksprojekt hinzugefügt.
M.Sameer
Für mich stellte sich heraus, dass ein anderer Entwickler eine neue Version einer Bibliotheks-JAR-Datei hinzugefügt hat, ohne die alte zu löschen. Es gab also zwei Gläser mit den gleichen Klassen. Daher der Fehler 'Mehrere Dex-Dateien ...' Sie könnten ein grep -r 'OffendingClassName' | ausführen grep jar $, um nach JAR-Dateien zu suchen, die den Klassennamen enthalten.
Bibstha
Ähnlich, aber ich hatte versehentlich android-support-v4.jarmeinen Eclipse-Erstellungspfad hinzugefügt und ihn manuell zu dem von libsmir erstellten Ordner hinzugefügt . Aufgrund der doppelten Verweise konnte ich nicht kompilieren (und erhielt die Fehlermeldung, die das OP erhielt). Ich habe den libsOrdner gelöscht, den ich dumm erstellt habe, und alles hat funktioniert. Danke für den Tipp.
Kurtzbot
47

Nun, für mich habe ich die Datei im libs-Ordner namens android support v4.jar gelöscht und alles hat geklappt. Viel Glück :)

akemalFirdaus
quelle
1
Für mich war es die Datei Android Support v4.jar (1) .jar Ich habe es gerade entfernt und das Projekt bereinigt!
Ymerdrengene
33

Ich hatte den gleichen Fehler und jedes Mal, wenn ich ihn behoben habe, kam er nach dem Neustart von Eclipse wieder.

Stellen Sie zunächst, wie andere bereits sagten, sicher, dass Sie nicht mehrere Kopien derselben JAR-Datei in Ihren Projekten haben.

In meinem Fall hatte ich ein Hauptprojekt, das ActionBarSherlock (unter anderem Bibliotheksprojekte) verwendete. Der Trick, der für mich funktioniert hat, war, sich zu entscheiden ActionBarSherlock --> Properties --> Java Build path --> Order of Exportund die Auswahl aufzuheben Android Private Libraries. Dann gehen Sie in Project -> Cleanund jetzt sollten Sie in der Lage sein, das Projekt korrekt zu erstellen.

Aus irgendeinem Grund wird dieses Kontrollkästchen bei jedem Neustart von Eclipse automatisch aktiviert, sodass ich diesen Vorgang erneut wiederholen muss.

Hoffe das hilft einer verlorenen Seele da draußen :)

Henrique
quelle
32

Gehen Sie zu Projekt / Eigenschaften und Java Built Path und deaktivieren Sie die Android Private Libraries

Pravin Bhosale
quelle
1
Mein Problem wurde ebenfalls behoben!
Totic
Aber es stoppt gcm.jar, um zu funktionieren, wie kann es ohne diesen Fehler funktionieren?
Narendra Singh
Ich hatte einen Fehler: mehrere dex Lcom / google / android / gms / analyse / intern / Befehl $ 1. Ich habe dies nach dem Upgrade von Google Play auf 22.1.1 erhalten. Das Abwählen von privaten Bibliotheken in Google Play Project hat den Fehler
behoben
Du hast mein Leben gerettet! Thx ~
Leo Hsieh
15

Gehen Sie für mich einfach zu Projekteigenschaften >> Java-Erstellungspfad >> Bestellen und Exportieren. Deaktivieren Sie alle externen Bibliotheken, wie im Bild unten dargestellt. Es funktioniert für mich. Ich hoffe das hilft.

Projekteigenschaften

Hoa Hoang
quelle
das war ein Problem für mich
Piyush-Ask Any Difference
8

Ich habe dieses Problem auch in meinem Projekt gesehen. AVD kann keine Ordner-, lib-, res- und etc-Ordnerkontexte neu laden. Problem: Dex Loader] Dex kann nicht ausgeführt werden: Mehrere Dex-Dateien definieren Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl.

Dann habe ich erstellt neue Projekte und kopiert MainActivity.java, activity_main.xml, ziehbar Kontext. Löschen Sie dann das alte Projekt aus der Paketerkundung und starten Sie Eclipse und AVD neu. Mein Projekt funktioniert jetzt richtig .... :) Ich hoffe, diese Schritte helfen euch ein bisschen Leute .. !!

Satya
quelle
8

Ich habe das gleiche Problem, was ich versucht habe, ist:

  1. Listenpunkt
  2. Öffnen Sie den Projekterstellungspfad.
  3. Wählen Sie die Registerkarte "Bibliotheken".
  4. Entfernen Sie alle Bibliotheken außer der Android-Bibliothek
  5. Hinzufügen aller erforderlichen JARs-Dateien,
  6. Und fertig!

Es funktioniert bei mir, danke.

Fedy Venom
quelle
Ja, ich habe genau das Gleiche getan. Alle JAR-Dateien entfernt, wieder hinzugefügt. in Reihenfolge und Export, deaktivierte Abhängigkeiten und überprüfte alle gerade hinzugefügten Bibliotheken
Maulik Sheth
6

Wenn einige von Ihnen dieses Problem mit dem Facebook-Connent-Plugin für Phonegap haben

Versuche Dateien aus dem Verzeichnis bin / class / com / facebook / android zu entfernen! -> und wieder aufbauen

Samih A.
quelle
Das ist die richtige Antwort. Erklärung ist ---- Die facebook.android ist zweimal enthalten. Einmal in facebookSDK.jar, das in Ihrem Projekt enthalten ist, und einmal, wenn die Java-Dateien direkt in Ihrem Projekt enthalten sind. Das Entfernen aus Ihrem Projekt ist der saubere Weg, dies zu tun. Alle anderen Antworten sind nur Umgehungen, die die Definition oder etwas nicht exportieren ...
Sandeep Taneja
6

Wie bereits erwähnt, tritt dies auf, wenn Sie mehrere Kopien derselben Klasse in Ihrem Erstellungspfad oder an einer anderen Stelle in Ihrem Setup haben.

Ich hatte android-support-v4.jar zu meinem libs / -Ordner hinzugefügt und irgendwie hat Eclipse eine zweite Kopie zu bin / classes / android-support-v4.jar hinzugefügt.

Sie können dies mit testen

grep -r YourOffendingClassName YourApp | grep jar

Das Löschen der zusätzlichen Kopie in bin / classes löste das Problem - unsicher, warum Eclipse dort eine Kopie erstellt hat.

Chaqke
quelle
1
Ich habe alle anderen hier aufgeführten Optionen ausprobiert, aber dies war die, die es für mich gelöst hat! :) Und ja, Eclipse sollte sterben und Android Studio sollte seine Version 1.0 bekommen - die Welt wäre dann ein besserer Ort.
Johan Paul
5

Ich habe diesen Fehler aus einem anderen Grund erhalten. Ich habe mich geirrt, sowohl die v4- als auch die v13-Unterstützungsbibliothek hinzuzufügen. Dies war für mich nicht notwendig, da meine minSdkVersion 15 ist.

Ich habe es behoben, indem ich nur die v13-Unterstützungsbibliothek eingeschlossen habe. Stellen Sie außerdem sicher, dass Sie die Bibliothek in Ihrem exportierten Bibliothekserstellungspfad in Eclipse markieren. Ich habe es auch nach oben verschoben.

Ryan R.
quelle
Das hat mich auch dazu gebracht. Die v13-Unterstützungsbibliothek enthält die v4-Unterstützungsbibliothek, sodass dex die Deklarationen mehrerer Klassen anzeigt.
Kyle Falconer
4

Selbst nachdem ich mehrere Antworten durchgesehen hatte, funktionierte für mich keine Lösung.

Ich habe "Android-Abhängigkeiten" aus dem Erstellungspfad gelöscht. Alle JAR-Dateien wurden erneut zum Erstellungspfad hinzugefügt, und der Fehler wurde behoben. Irgendwie schien die Sonnenfinsternis die Dinge zwischenzuspeichern.

JaydeepW
quelle
3

Ich überlasse diese Antwort jemandem, der wie ich in dieses Szenario gerät.

Ich stolperte hier und da, bevor ich bemerkte, dass ich die JAR-Datei der Support Library fälschlicherweise in meinen src-Ordner gezogen und dort abgelegt hatte. Da ich keine Ahnung hatte, wie es passiert ist oder wann ich es dort abgelegt habe, konnte ich mir nie vorstellen, dass dort etwas nicht stimmte.

Ich bekam den gleichen Fehler, fand das Problem nach einiger Zeit und entfernte es. Das Projekt funktioniert jetzt einwandfrei.

kishu27
quelle
3

Die Lösung für mich bestand darin, nur Folgendes zu tun:

  1. -> lib-Verzeichnis in Ihrem Projekt und löschen Sie mehrere Elemente.
  2. Projekt-> Eigenschaften-> Java-Erstellungspfad und Löschen einer Abhängigkeitsbibliothek wurden automatisch und nicht von Ihnen hinzugefügt! -> Übernehmen
  3. Starten Sie die Eclipse-IDE neu
  4. Reinigen Sie nun das Projekt.
  5. Führen Sie das Projekt auf dem Gerät / Emulator aus / debuggen Sie es ... Viel Glück
GuyN
quelle
Das Problem besteht weiterhin
Akhil Jain
2

Mein Problem war zunächst:

Dex: java.nio.BufferOverflowException kann nicht ausgeführt werden. Überprüfen Sie das Eclipse-Protokoll auf Stapelverfolgung.

1) Ich klicke mit der rechten Maustaste auf mein Projekt -> Android-Tools -> Support-Bibliothek hinzufügen (Führe meine App aus ... Hat nicht funktioniert, also mache ich weiter ...) 2) Klicken Sie erneut mit der rechten Maustaste auf mein Projekt -> Eigenschaften -> Android -> Überprüfen Sie Android 4.1.2 (16) auf Project Build Target (Führen Sie die App erneut aus ... und holen Sie sich Folgendes:

Dex kann nicht ausgeführt werden: Mehrere Dex-Dateien definieren Landroid / support / v4 / app / BackStackState.

3) Also ging ich in den Ordner "lib" meines Projekts und löschte die "alte" Android.support.library.jar (App ausführen und Daumen drücken und ...)

ES KLAPPT!

Hoffe es hilft jemandem ... Danke Leute!

Daros
quelle
2

Ich hatte dieses Problem und das bedeutet nicht, dass dieselbe Bibliothek viele Male geladen wird, aber das System versucht, eine Klasse mit demselben Namen und möglicherweise demselben Paketnamen gleichzeitig zu laden, d. H.

  • com.pack1.deund Class Geometryvonlibrary1.jar

und ein anderer

  • com.pack1.deund Class Geometryvonlibrary2.jar.

Wie solltest du dich nähern? Sie sollten analysieren, welche Methoden verwendet werden, eine Methode von library1.jar oder library2.

Es gibt 2 Lösungen,

  1. Benennen Sie einen Paketnamen um und dalvik interpretiert dann, dass es sich um unterschiedliche Klassen handelt
  2. Oder wenn Sie ein Risiko eingehen möchten, löschen Sie die Klasse, die nicht die Methode enthält, die wir wirklich verwenden.

Ich hoffe, das hat diese oft gestellte Frage geklärt.

Tiefes Ende
quelle
2

Ich habe Android-Abhängigkeiten aus dem Erstellungspfad entfernt und es hat funktioniert.

Cüneyt
quelle
1

Dieser Fehler ist mir passiert, als ich im Projekt meiner App auf ein Bibliotheksprojekt in meinem Eclipse-Arbeitsbereich (in meinem Fall das Facebook SDK) verwiesen und gleichzeitig das Facebook SDK als JAR in den Ordner libs aufgenommen habe. Durch Entfernen der Bibliotheksreferenz, aber Beibehalten des JAR im libs-Ordner wurde der Fehler behoben.

Gunnar Karlsson
quelle
1

Ich hatte das gleiche Problem. Ich musste die .apkDatei löschen und dann funktionierte es.

Sefodu
quelle
1

Für mich habe ich android-support-v4.jar aus dem lib-Ordner gelöscht und auch aus dem Build-Pfad entfernt.

Rach
quelle
Hallo Rach, willkommen bei Stackoverflow. Ihre Antwort wurde aufgrund ihrer Länge und ihres Inhalts als minderwertig gekennzeichnet. Geben Sie bei der Beantwortung von Fragen eine zusätzliche Beschreibung zur Lösung des Problems an. Es wird anderen helfen und dir einen guten Ruf einbringen :)
Superheld
1
  • Klicken Sie mit der rechten Maustaste auf Projekt und gehen Sie zu build Path>configuration build path
  • Wählen Sie die Registerkarte Bibliothek und klicken Sie auf support-v4 libraryund klicken Sie auf Entfernen
  • Klicken Sie auf OK

und dann bereinige dein Projekt und starte es wird funktionieren :-)

Iman Marashi
quelle
0

Für den Fall, dass jemand anderes wie ich gerade den Kopf in dieses Thema schlägt:

Mein Fall betraf eine Kette von Bibliotheksprojekten. Durch einfaches Reinigen aller Bibliotheken wurde alles behoben

Joe Plante
quelle
0

Ich habe unten Lösung in Eclipse gefunden ... hoffe es funktioniert für dich :)

Right click on the Project Name

Select Java Build Path, go to the tab Order and Export

Unchecked your .jar library's
Harshal Benake
quelle
0

Dieses Problem tritt auf, wenn dieselbe Bibliothek mehrmals zu Ihrem Projekt hinzugefügt wird. Wenn Sie die Bibliothek nicht mehrmals absichtlich hinzugefügt haben, überprüfen Sie die Abhängigkeits- / Privatbibliotheken der Bibliotheken, die Sie in Ihrem Projekt hinzugefügt haben. Höchstwahrscheinlich haben sie bereits eine Bibliothek enthalten, die diesen Konflikt verursacht.

Umer Farooq
quelle
0

Ich hatte auch Probleme, dieses Problem zu finden. In meinem Fall geschah dies beim Kopieren der apk in eine E-Mail (Drag & Drop) - versehentlich wurde die apk in einem der Pakete in den Ordner src eingefügt. Nach dem Entfernen der apk aus dem Quellordner hat es gut funktioniert.

Prabakaran
quelle
0

Ich hatte dieses Problem in Intellij und es lag daran, dass die ActionBarSherlock-Bibliothek, die ich meinem Projekt hinzugefügt habe, die android-support-v4.jar als Kompilierungsabhängigkeit definiert hat und diese JAR bereits in meinem Projekt enthalten war, sodass mehrere Kopien / Versionen von DEX unter vorhanden waren Kompilierzeit.

Die Lösung bestand darin, die Abhängigkeit des ActionBarSherlock-Moduls für dieses JAR so zu ändern, dass es Runtime statt Compile ist, da mein Projekt es bereits bereitstellte.

TimT
quelle
0

Für mich war das Problem, dass ich früher ein lib-Projekt (autobahn lib) hinzugefügt und später die Jar-Datei derselben Bibliothek geändert hatte. Obwohl ich Verweise auf das ältere Bibliotheksprojekt entfernt hatte, bekam ich diesen Fehler. Nach all den Antworten hier habe ich den Erstellungspfad usw. überprüft. Aber ich habe diese Bibliotheken nicht hinzugefügt, um den Erstellungspfad manuell zu erstellen. Ich hatte also nichts zu entfernen. Endlich stieß ich auf diesen Ordner.

bin / dexedLibs

Ich bemerkte, dass es zwei JAR-Dateien mit demselben Namen gab, die der Autobahn Android entsprachen und den Konflikt verursachten. Also habe ich alle JAR-Dateien im Ordner dexedLibs gelöscht und das Projekt neu erstellt. Damit war das Problem behoben.

Ajith Memana
quelle
0

Um die unzähligen anderen potenziellen Quellen hinzuzufügen ... Ich hatte alle Bibliotheken im libOrdner meines Projekts aktualisiert, aber dann hat Eclipse alle Originalbibliotheken "hilfreich" neu installiert. In Eclipse gab es keinen Verweis mehr auf diese Bibliotheken, aber das externe Dex-Maker-Programm hat einfach alle Dateien im libVerzeichnis abgerufen und somit zwei Versionen mehrerer Bibliotheksdateien erhalten .jar.

git statusidentifizierte die neuen Dateien und entfernte git clean -fsie für mich (obwohl ich manchmal warten oder Eclipse unter Windows neu starten musste, weil die Dateien noch von der Kopie geöffnet waren).

Brian White
quelle
0

ULTRA einfache Lösung und feinste:

Entfernen Sie alles im Ordner "Hauptklick" des Hauptprojekts -> Eigenschaften -> Java-Erstellungspfad mit Ausnahme von Android XY (wobei XY die Version in Android ist). Reinigen und bauen. Getan!

Stellen Sie vorher sicher, dass Sie eine einzige android-support-v4.jar haben.

Andrés Fg
quelle
0

Wenn Sie Cordova verwenden, versuchen Sie den Befehl cordova clean

Merbin Joe
quelle