Dex kann nicht ausgeführt werden: Mehrere Dex-Dateien definieren das Lcom / myapp / R $ -Array.

391

Seit dem Update auf ADT 14 kann ich mein Projekt nicht mehr erstellen. Es wurde vor dem Update gut gebaut.

Der Fehler:

[2011-10-23 16:23:29 - Dex Loader] Unable to execute dex: Multiple dex files define Lcom/myapp/R$array;
[2011-10-23 16:23:29 - myProj] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lcom/myapp/R$array;

Ähnliche Probleme wurden gemeldet und ich habe die Vorschläge dort einschließlich ausprobiert

  • Neustart Eclipse.
  • Projekt bereinigen und neu erstellen - Deaktivieren Sie die Option "Projekt-> Automatisch erstellen", dann "Bereinigen" und "Erstellen" und versuchen Sie dann, es auszuführen. Setzen Sie die Option "Automatisch erstellen" auf "Ein" zurück
  • Neuinstallation der AndroidEntwicklertools
  • Neuinstallation von Eclipse (aktualisiert auf die neueste Version 3.7.1)
  • Erstellt ein neues Projekt, das aus dem Dateisystem importiert wird
  • Erstellt ein neues Projekt aus Subversion.
Frottee
quelle
Haben Sie an Windows oder Mac gearbeitet? Weil ich den folgenden Antworten folgen möchte, aber ich bin nicht sicher, ob sie auf Mac funktionieren werden. Danke
McLan
Wenn Sie ein Bibliotheksprojekt importiert und auch eine Bibliotheks-JAR in den lib-Ordner importiert haben, müssen Sie die JAR-Datei aus Ihrem lib-Ordner und auch aus [Build Path -> Configure Build Path] entfernen. Und es wird funktioniert.
Mehul
Schauen Sie sich meine Antwort unter folgendem Link an. stackoverflow.com/a/38391449/3702595
Sattar Hummatli

Antworten:

462

Ich hatte das gleiche Problem, ziemlich seltsam, weil es nur bei Verwendung von Eclipse passierte (aber mit Ant war es in Ordnung). So habe ich es behoben:

  • Klicken Sie mit der rechten Maustaste auf Project Name
  • Wählen Sie Build Path->Configure Build Path
  • In Java Build Pathgehen Sie auf die RegisterkarteOrder and Export

  • Deaktivieren Sie Ihre .jarBibliothek

Nur manchmal: Auf der Registerkarte "Bestellen und Exportieren" hatte ich dort keine JAR-Bibliothek, daher habe ich das Kontrollkästchen "Android Private Libraries" deaktiviert. Jetzt läuft mein Projekt.

Marco Bonifazi
quelle
In meinem Projekt habe ich die Unterstützungsbibliothek aus dem sdk-Verzeichnis in meinen Erstellungspfad aufgenommen, und ich hatte die Unterstützungsbibliothek im Ordner "libs" zur Unterstützung der Ameisenerstellung. Ich habe eines deaktiviert und es hat mein Problem behoben.
Chris Feist
20
Irgendwann zwischen dem letzten Erstellen und Starten erschien auf mysteriöse Weise eine neue Bibliothek in meinem Projekt: "Android Private Libraries", die die Support-Bibliothek enthält, auf die ich bereits verwiesen habe. Also erschien diese mysteriöse "Multiple Dex-Dateien definieren ____". Das Überprüfen des Java-Erstellungspfads und das Anzeigen dieses neuen Elements sowie das Deaktivieren der ursprünglich enthaltenen Support-Bibliothek lösten das Problem für mich.
Tom Pace
9
Vielen Dank. Dies ist die richtige Lösung. Ich weiß wirklich nicht, warum Eclipse so viele Fehler hat. Jetzt sind es nur noch 2 Stunden, die ich codieren kann, und 6 Stunden, in denen ich eine Lösung für diese Art unnötiger Probleme finden muss.
Roy Mathew
44
Auf der Registerkarte "Bestellen und Exportieren" hatte ich dort keine JAR-Bibliothek, daher habe ich das Kontrollkästchen Android Private Librariesdeaktiviert. Jetzt läuft mein Projekt.
Junior Mayhé
1
In meinem Fall hatte ich eine Veröffentlichung von "android-support-v4.jar". Als ich es löschte , ging der Fehler weg
ymerdrengene
94

Mein Problem wurde behoben, nachdem einige Verzeichnisse und Dateien bereinigt wurden, die von den vorherigen Versionen der Tools übrig geblieben waren. ADT Rev 14 ändert, wo Binärdateien gespeichert sind . Ich habe das gesamte bin-Verzeichnis gelöscht, Eclipse neu gestartet, den Build bereinigt und eine Neuerstellung erzwungen. Das schien anfangs der Trick zu sein, aber das Problem trat nach dem nächsten Lauf wieder auf.

Endlich stellte ich fest, dass mein bin-Verzeichnis im Projekterstellungspfad enthalten war. Ich habe bin vom Erstellungspfad ausgeschlossen und die obigen Schritte wiederholt. Dies löste mein Problem.

Frottee
quelle
42
Was zum Teufel Google. Dieses Problem tritt auch bei R15 immer wieder auf.
Terry
2
Ich habe die obige Lösung so bearbeitet, dass sie die endgültige Auflösung enthält. Jetzt dauerhaft gelöst.
Terry
7
Kurz gesagt, niemand weiß wirklich, warum das Problem auftritt, was es bedeutet und wie es behoben werden kann (ich habe kein bin-Verzeichnis im Java Build Path). Ich habe aus diesen Gründen ein Update auf R15 vermieden und bin bei R9 geblieben. Aber ich habe immer noch ein ähnliches Problem , ohne dass eine Ahnung in Sicht ist. Jeder Tipp oder jede Hilfe wäre sehr dankbar.
Bill The Ape
6
@ BillTheApe - vereinbart. Das ist mehr als frustrierend, es ist teuer.
Tom Redman
@ TRedman Ich habe es endlich geschafft , das Problem zu lösen . Ohne zu verstehen warum. Lache nicht. LOL +1.
Bill The Ape
50

[Für mich gelöst]

Eclipse-Projekteigenschaften-> Java-Erstellungspfad-> Bestellen und Exportieren

Deaktivieren Sie die Option für private Android-Bibliotheken.

user802467
quelle
4
Hat in meinem Fall nicht geholfen
Redux
1
Vielen Dank,
46

Nichts davon hat geholfen. Am Ende war es ein einfaches Problem.

Ich hatte ein Projekt, das FacebookSDK und ViewPagerIndicator als Bibliotheksprojekte verwendet. Alle wurden auf Android API 16 erstellt und diese beiden Projekte verwendeten die Android Support Library vX (X ist nicht 16!)

Ich habe diesen beiden Projekten eine externe JAR hinzugefügt und auf \ extras \ android \ v4 verwiesen ... und auch die v4-JAR entfernt, die ich in ihren libs-Ordnern hatte.

Reinigen Sie alle Projekte und erstellen Sie sie neu.

Voilla!

Der genaue Fehler, den ich erhalten habe: Dex kann nicht ausgeführt werden: Mehrere Dex-Dateien definieren Landroid / support / v4 / view / PagerAdapter; Konvertierung in das Dalvik-Format fehlgeschlagen: Dex kann nicht ausgeführt werden: Mehrere Dex-Dateien definieren Landroid / support / v4 / view / PagerAdapter;

Roy Weinberg
quelle
36

Dieses Problem trat auf, ich hatte eine externe .jar in meinem libs-Ordner namens gson-2.2.2.jar, aber aus irgendeinem Grund gab es zwei davon, gson-2.2.2.jar und gson-2.2.2.jar ( 1), ich habe letzteres einfach gelöscht und mein Projekt wieder gut gebaut.

Tom Selleck
quelle
2
Ich hatte ein ähnliches Problem, als sich eine alte JAR-Datei im libs-Ordner befand und sie mit einer neueren JAR-Datei im selben Arbeitsbereich verknüpfte. Wenn ADT mehrere Definitionen für dasselbe Symbol findet, wird ein solcher Fehler ausgegeben. Das Löschen der alten JAR-Datei im libs-Ordner hat das Problem für mich behoben.
Phyatt
Externes Glas ist eine der Ursachen für das Problem und war es auch in meinem Fall. Ich hatte gerade ein übrig gebliebenes Glas /libsaus einem früheren Experiment in meinem , was sowohl zu einem Bibliotheksprojekt als auch zu dem daraus generierten .jar führte. Das Löschen dieses Glases unter /libslöst das Problem. +1
ripopenid
31
  1. Sonnenfinsternis schließen.
  2. Löschen Sie den Ordner bin in Ihrem Projektordner.
  3. Starten Sie Eclipse und bereinigen Sie Ihr Projekt.
  4. Jetzt laufen und das Problem sollte weg sein
Mohit Marwal
quelle
Mateus Viccaris Antwort löste mein Problem, ich entfernte doppelte Bibliotheken und es funktioniert wie ein Zauber.
SwiftBoy
Hat bei mir funktioniert. Wenn manifest fileEclipse aus dem binVerzeichnis entfernt wird, fügen Sie es manuell hinzu und bereinigen Sie das Projekt erneut.
Mehul Joisar
Funktioniert bei mir. Stellen Sie außerdem sicher, dass Sie nicht dieselbe .jar an zwei verschiedenen Stellen haben (in meinem Fall hatte ich sie sowohl in einem Bibliotheksprojekt als auch in einem Projekt, das auf dieses Bibliotheksprojekt verweist. Eclipse hat sie anscheinend aus irgendeinem Grund automatisch hinzugefügt)
Magnus W.
Für mich habe ich gerade den GESAMTEN Arbeitsbereich gereinigt. Nur das Projekt zu reinigen war nicht genug. Ich glaube, mein Problem hatte damit zu tun, dass eines der Projekte mitten in einer sauberen Operation auf "Bibliothek" umgestellt wurde
Tricknologie
Hat in meinem Fall nicht geholfen
Redux
26

Wie andere bereits erwähnt haben, tritt dies auf, wenn Sie mehrere Kopien derselben Klasse in Ihrem Erstellungspfad haben - einschließlich bin / in Ihrem Klassenpfad ist eine Möglichkeit, dieses Problem zu gewährleisten.

Für mich trat dies auf, als ich android-support-v4.jar zu meinem libs / -Ordner hinzugefügt hatte und Eclipse irgendwie eine zweite Kopie zu bin / classes / android-support-v4.jar hinzufügte.

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

Sie können dies mit testen

grep -r YourOffendingClassName YourApp | grep jar

Chaqke
quelle
23

Für mich klicke ich einfach mit der rechten Maustaste auf Projekt -> Erstellungspfad -> Konfigurationspfad konfigurieren -> Bibliotheken -> Abhängigkeit entfernen

nachdem es funktioniert.

Sonida
quelle
20

Dieser Fehler kann auftreten, wenn Sie zwei Jars haben, die dieselben Klassennamen enthalten, z. B. zwei Bibliotheken: jsr311-api-1.1.1.jar und jersey-core-1.17.1.jar, die beide die Klasse javax.ws enthalten .rs.ApplicationPath. Ich habe jsr311-api-1.1.1.jar entfernt und es hat gut funktioniert.

Mateus Viccari
quelle
1
Dies ist die perfekte Lösung für mich. Ich habe zweimal die gleichen Bibliotheken hinzugefügt. Vielen Dank.
SwiftBoy
19

Ich habe diesen Fehler erhalten, nachdem ich die Datei facebooksdk.jar zu einem Projekt hinzugefügt habe, das bereits Abhängigkeiten von android-support-v4.jar hatte . Da die facebooksdk.jar bereits eine eigene android-support-v4.jar enthält, gab es Konflikte. Das Entfernen des früheren android-support-v4.jar aus den Projekten Properties / Java Build Path / Libraries hat das Problem für mich behoben.

Benutzer1293131
quelle
18

Gehen Sie zu Projekt / Eigenschaften und Java- Erstellungspfad und deaktivieren Sie die privaten Android-Bibliotheken .

Dies ist auch ein weiterer Fall für diese Art von Fehler

Erledigt

Hiren Patel
quelle
15

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

Bearbeiten: ignoriere das. Ich hatte das gleiche Glas in meinem Ordner für Maven-Abhängigkeiten und Bibliotheken. Ich habe den im lib-Ordner entfernt.

Osha Mahue
quelle
2
Das Entfernen von Android-Abhängigkeiten aus dem Erstellungspfad hat mein Projekt beschädigt. Glücklicherweise war die Wiederherstellung einfach, indem Sie mit der rechten Maustaste auf Projekt> Android-Tools> Projekteigenschaften korrigieren klicken.
Azdev
In einigen Fällen werden einige Probleme behoben, indem Android-Abhängigkeiten entfernt und neu generiert werden. Aber wie in meiner Bearbeitung ist das nicht der Fall.
Hadi Tok
9

Sie haben wahrscheinlich r14 installiert . Dieser Fehler wurde möglicherweise durch das Update der Plattform-Tools verursacht. Sie müssen Ihr SDK neu installieren

Reno
quelle
Ich habe mein SDK einfach komplett weggeblasen und es frisch aus der heruntergeladenen Zip-Datei installiert und dann die Android-APIs mit dem Android SDK Manager geladen. Ich hatte große Hoffnungen, aber das Problem bleibt bestehen.
Terry
Es gibt einen versteckten .android-Ordner in Windows, den Sie auch löschen sollten.
Reno
Das gleiche Problem besteht
McLan
9

Für mich besteht dieses Problem nur, solange Android-Bibliotheksprojekte an meinem Projekt beteiligt sind. Wenn ich also alle Bibliotheken entferne und das tue, was Sie gesagt haben, kann ich meine App erneut ausführen. Wenn es sich um Bibliotheken handelt, hat sogar der Trick zum Entfernen von Behältern funktioniert.

Ich verstehe nicht, warum dieser Fehler heute zum ersten Mal aufgetreten ist, da ich ADT 14 seit mehreren Tagen verwende. Nun, es gab andere Fehler, die mich glücklich gemacht haben.

Mephju
quelle
Viele der Lösungen sehen aus wie Voodoo ... :)
Jasper
8

Das Löschen des bin-Ordners war nicht genug, ich habe auch den gen-Ordner gelöscht. Nach zwei Neuerstellungen war die Dex-Fehlermeldung verschwunden.

Rudolf Polzer
quelle
8

Wählen Sie das Projekt im Projektexplorer aus , klicken Sie mit der rechten Maustaste und wählen Sie Eigenschaften -> Java-Erstellungspfad -> Quelle -> Aktivieren Sie das Kontrollkästchen für Ausgabeordner Quellordner zulassen

prasantasing
quelle
Hat meinem Fall nicht geholfen.
Redux
8

Ich hatte im Grunde das gleiche Problem. Ich habe den BIN-Ordner gelöscht und dann nicht verwendete JAR-Dateien für Order and Import aus Eclipse entfernt. Danach hat es funktioniert

Ahsan Zaheer
quelle
7

Ich bin zu spät zu dieser Party, füge aber meine eigenen Erfahrungen hinzu, damit ich sie später wiederfinden kann :)

Ich bin auf dieses Problem gestoßen, nachdem ich die Android SDK- und Eclipse-Ad-Ins aktualisiert habe. Kein Upgrade bleibt ungestraft!

Das Problem war für mich mit Bibliotheksprojekten verbunden. Meine App verweist sowohl auf Standard-Java-Projekte als auch auf Android-Bibliotheksprojekte. Ich habe festgestellt, dass die Java Build Path-Einstellungen die Ordner src und res der Android-Bibliotheksprojekte in die Quellliste aufgenommen haben (Upvotes für alle, die erwähnen, dass bin in source ein Problem darstellt, src und res waren ebenfalls ein Problem.)

Die Lösung war also:

  1. Entfernen Sie alle referenzierten Quell- und Projektreferenzen für Android-Bibliotheken aus dem Abschnitt Java Build Path der Einstellungen in der Quellenliste und in der Projektliste
  2. Stellen Sie sicher, dass reine Java-Abhängigkeiten in der Projektliste aufgeführt und auf der Registerkarte Reihenfolge und Export aktiviert sind, damit die Klassen in der apk enthalten sind
  3. Stellen Sie sicher, dass alle Android-Bibliotheksabhängigkeiten im Android-Abschnitt der Projekteigenschaften im Bibliotheksabschnitt unter den überprüften SDK-Versionen aufgeführt sind.

Es war auf dem Weg, all das aus den anderen Lösungen zusammenzusetzen! Puh!

Jay
quelle
Gut gesagt! Nach viel Arbeit bin ich zu identischen Ergebnissen gekommen. Ich wollte nur hinzufügen, dass, wenn eines Ihrer Bibliotheksprojekte andere Bibliotheksprojekte oder reine Java-Abhängigkeiten enthält, diese alle auf die gleiche Weise hinzugefügt werden müssen, da sonst dieser Fehler auftritt. Wenn Sie die oben genannten Regeln für alle Ihre Projekte befolgen, sollten Sie keine Probleme haben.
Strangeluck
1
Eine weitere Sache ... es scheint, dass Sie dies nicht tun müssen, wenn Sie die privaten Android-Bibliotheken eines Projekts oder Bibliotheksprojekts nicht exportieren müssen. Wenn mehr als ein Projekt oder Bibliotheksprojekt es exportiert, wird der Fehler "Mehrere Dex-Dateien" angezeigt.
Strangeluck
6

Ich bin darauf gestoßen, als ich von ADT 14 auf 15 aktualisiert habe. Um es zum Laufen zu bringen, habe ich einfach den .eclipse-Ordner (zusammen mit meinen Einstellungen) gelöscht und ADT 15 neu installiert.

Jake1164
quelle
6

Nachdem Sie Terrys Antwort zum Löschen des bin-Verzeichnisses und Larrys zum Speicherort des ANT-Verzeichnisses gelesen haben:

Ich habe die Dateien im BIN-Verzeichnis meines Projekts in die BIN / CLASSES verschoben und bin betriebsbereit.

Bearbeiten 1 Dann beim zweiten Lauf fehlgeschlagen ... doh

Bearbeiten 2 Also geschlossen Eclipse hat Dateien zurück an den ursprünglichen Speicherort verschoben und alles funktioniert ... ähm was? Ich gebe nicht vor zu wissen, warum das funktioniert hat. Wird aktualisiert, wenn sich Änderungen ergeben.

Bearbeiten 3 Ich habe aus meinen Backups festgestellt, dass sich tatsächlich doppelte Dateien im BIN-Verzeichnis und in BIN / CLASSES befanden.

So lautet die Antwort: Sie haben keine Dateien in beiden Orten. Zumindest für mich hat das funktioniert.

HostMyBus
quelle
Versuchen Sie, die Antworten auf folgende Punkte zu reduzieren: Hilfreiche Schlussfolgerungen, gefolgt von unterstützenden Fakten . Vermeiden Sie Geschichtserzählungen AMAP; Die Leute neigen dazu, dies zu kennzeichnen und denken, es sei "keine Antwort".
Brock Adams
Prost
6

Ändern Sie Ihre Datei eclipse.ini und setzen Sie den maximalen Speicherparameter auf

-Xmx1024m

Starten Sie dann Ihren Computer neu.

Es hat bei mir funktioniert.

Truncarlos
quelle
1
Nichts verwandtes, mehr Speicherplatz zu geben, löst die Abhängigkeitsprobleme nicht
Sierisimo
6

fand eine Lösung, glaube ich?

    [2013-04-28 23:56:09 - Dex Loader] Unable to execute dex: Multiple dex files define Lcom/coremedia/iso/AbstractBoxParser$1;

Wo steht: "Lcom / coremedia / iso / AbstractBoxParser $ 1", das ist zufällig der Speicherort der Bibliothek, die ich importiert habe und die das Problem verursacht hat. Gesucht nach com.codemedia.iso.AbstractBoxParser $ 1.class und .AbstractBoxParser.class .... nahm das Glas, entpackte es, entfernte beide Dateien, packte es als .zip neu, fügte es der Bibliothek hinzu, bereinigte und arbeitete! kein Konflikt mehr für mich! (auch keine Updates oder zusätzliche Downloads)

jp093121
quelle
6

Ich hatte zwei verschiedene Versionen von Cordova .jar-Dateien in meinem libs-Ordner, ich habe die gelöscht, die ich nicht einmal verwendet habe, und es hat sofort funktioniert. Seltsam, weil ich das vorher nicht bemerkt habe und es vorher funktioniert hat und dann plötzlich aufgehört hat zu arbeiten ...

Dediqated
quelle
5

Das ADT R14-Update ändert, wo die Klassen in das Verzeichnis bin / classes verschoben werden (siehe http://tools.android.com/recent/buildchangesinrevision14 ). Wenn Sie ANT verwenden, sollten Sie den Pfad für Ihre Klassen von bin zu bin / classes ändern. Das hat bei mir funktioniert.

Larry Borsato
quelle
Ich benutze Eclipse. Wissen Sie, wo Sie den Klassenpfad in Eclipse ändern?
Terry
5

Lösung für mich:

  1. SICHERN SIE IHREN CODE!
  2. Navigieren Sie zu Ihrem Projektarbeitsbereich (nicht zu Ihrem Projekt) und führen Sie die folgenden Befehle aus:

    dev1: Arbeitsbereich $ cd ~ / Documents / workspace / .metadata / .plugins / dev1: Arbeitsbereich $ rm -rf org.eclipse.core.resources

  3. Navigieren Sie zu Ihrem Eclipse-Verzeichnis und geben Sie den folgenden Befehl ein:

    dev1: eclipse $ ./eclipse clear

  4. Eclipse beginnt mit einem leeren Arbeitsbereich - keine Sorge, Ihre Projekte sind noch vorhanden. Einfach neues Projekt aus vorhandenen Ressourcen erstellen und Dinge sollten Sauce sein.

Der genaue Fehler, den ich erhalten habe: [2012-02-07 14:15:53 ​​- Dex Loader] Dex kann nicht ausgeführt werden: Mehrere Dex-Dateien definieren Landroid / support / v4 / view / PagerAdapter; [2012-02-07 14:15:53 ​​- ProjectCloud] Konvertierung in das Dalvik-Format fehlgeschlagen: Dex kann nicht ausgeführt werden: Mehrere Dex-Dateien definieren Landroid / support / v4 / view / PagerAdapter;

Kocher
quelle
5

Ich habe mehrere Bibliotheksprojekte mit demselben Paketnamen, die im AndroidManifest angegeben sind (daher werden von R.java keine doppelten Feldnamen generiert). Ich musste alle Berechtigungen und Aktivitäten aus der AndroidManifest.xml für alle Bibliotheksprojekte entfernen, um den Fehler zu beheben, damit Manifest.java nicht mehrmals erstellt wurde. Hoffentlich kann das jemandem helfen.

Jared Rummler
quelle
4

Nachdem ich alle anderen Vorschläge ohne Glück ausprobiert hatte, löschte ich den gesamten Inhalt meines Projektverzeichnisses 'bin', führte dann Eclipse erneut aus und es funktionierte.

JPB
quelle
4

Ich habe ein Nicht-Bibliotheksprojekt in ein Bibliotheksprojekt konvertiert, aber es hatte eine zuvor erstellte JAR-Datei im libs-Ordner. Durch das Entfernen dieser JAR-Datei wurde dieser Fehler behoben.

PacificSky
quelle
4

Ich hatte das gleiche Problem, als ich beim Pushen meiner App einige JAR-Dateien sah, die zweimal geladen wurden, daher mehrere Dex-Fehler. Gehen Sie einfach zu Ihren Projekteigenschaften -> Java Build Path und deaktivieren Sie das JAR, das zweimal geladen wird.

Navi
quelle
4

[Für mich gelöst]

Durch Entfernen der doppelten Bibliothek "JAR-Datei" entfernen Sie dann die Datei BuildConfig.java, das Projekt bereinigen und seine Arbeit.

Abu Qauod
quelle