Impossible d'exécuter dex: plusieurs fichiers dex définissent


125

Je sais que cette question a été posée ici à quelques reprises auparavant. Mais je n'ai pas encore vu de solution possible. Avant de créer le projet `` Exécuter en tant qu'application Android '', si je ne le nettoie pas, je reçois l'erreur suivante et je dois redémarrer Eclipse ... et nettoyer à nouveau.

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

com.jstun.core ... fait partie de mon dossier src, bien sûr je ne peux pas le supprimer. Et même si je supprime ce package, un autre package apparaîtra comme une erreur comme:

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

J'ai vu cette erreur depuis la mise à jour vers ADT 15, j'utilise Eclipse Galileo sur Ubuntu Avez-vous une idée? Merci pour toute réponse!


J'ai essayé presque tout dans ce fil mais cela n'a pas fonctionné. J'ai résolu le problème en supprimant le projet, puis en en créant un nouveau et en copiant-collant les fichiers source de la sauvegarde.
linuxjava


Regardez ma réponse sur le lien suivant. stackoverflow.com/a/38391449/3702595
Sattar Hummatli

Réponses:


136

Il s'agit d'un problème de chemin de construction.

  • Assurez-vous que votre dossier bin n'est pas inclus dans votre chemin de construction.

  • Faites un clic droit sur votre projet -> allez dans les propriétés -> Build Path.

  • Assurez-vous que la bibliothèque Honeycomb se trouve dans votre libs/dossier et non dans votre dossier source.

  • Incluez les bibliothèques libs/individuellement dans le chemin de construction.

    BTW, vous voudrez peut-être apporter la android-support-v4bibliothèque pour obtenir le support Ice Cream Sandwich au lieu de la bibliothèque de support Honeycomb.


50
Ce problème se produisait également si plusieurs versions de bibliothèques étaient physiquement incluses dans votre chemin de génération. Supprimer les bibliothèques inutilisées du libschemin, nettoyer et enregistrer le projet, redémarrer Eclipse et le recompiler à nouveau fonctionne pour moi.
Aryo

L'exclusion du dossier bin du chemin de construction l'a résolu pour moi. Merci!
alekop

2
La cause première du problème était que l'une des bibliothèques utilisait la bibliothèque nineoldandroid comme un bocal stocké dans le répertoire ./libs, tandis qu'un autre projet utilisait nineoldandroid en le référençant
Deepika Lalra

Cela peut également se produire lorsque vous avez quelque chose comme Foo.javadans un paquet et Foo.javadans un pot danslibs/
tricknology

Cette erreur / bogue se produit chaque fois que votre dossier de projet est dans Google Drive. Je suppose que cela bogue lorsque Drive se synchronise. Au moins pour moi
ymerdrengene

58

J'ai rencontré une erreur similaire aujourd'hui et la raison était que la bibliothèque de support était référencée par deux projets de bibliothèque utilisés par mon projet d'application mais avec des versions différentes.

Plus de détails: mon application dépend de 2 projets de bibliothèque

  • FaceBookSDK 3.0 -> qui fait référence à android-support-v4
  • ActionBarSherlock -> qui fait référence à android-support-v4 mais avec une version modifiée pour prendre en charge les cartes.

Pour résoudre le problème, j'ai dû faire en sorte que la bibliothèque FaceBookSDK dépende de la bibliothèque ABS au lieu de la bibliothèque de support directement.


Oui, mon problème était similaire. Deux bibliothèques avaient la bibliothèque httpmime, alors j'en ai supprimé une et l'ai fait pointer vers l'autre projet.
Matt

10
est-ce que l'un de vous peut expliquer exactement comment vous l'avez fait?
Samih A

3
@samih dans l'exemple que j'ai mentionné, j'ai d'abord supprimé le fichier android-support-v4 du dossier de bibliothèque du projet FaceBookSDK et du chemin de construction. Ensuite, j'ai ajouté une référence au projet de bibliothèque ActionBarSherlock.
M.Sameer

pour moi, il s'avère qu'un autre développeur a ajouté une nouvelle version d'un fichier jar de bibliothèque sans supprimer l'ancien. Il y avait donc deux pots avec les mêmes classes. Ainsi l'erreur 'Plusieurs fichiers dex ...' Vous pourriez faire un grep -r 'OffendingClassName' | grep jar $ pour rechercher les fichiers jar contenant le nom de la classe.
bibstha

Similaire, mais j'avais accidentellement ajouté android-support-v4.jarà mon chemin de construction Eclipse et l' libsai ajouté manuellement au dossier que j'avais créé. En raison des références en double, je n'ai pas pu compiler (et j'ai reçu le message d'erreur que l'OP a obtenu). J'ai supprimé le libsdossier que j'ai créé stupidement et tout a fonctionné. Merci pour l'indice.
kurtzbot

47

Eh bien pour moi, j'ai supprimé le fichier dans le dossier libs appelé support android v4.jar et tout a fonctionné. Bonne chance :)


1
Pour moi, c'était un fichier support android v4.jar (1) .jar Je viens de le supprimer et de nettoyer le projet!
ymerdrengene

33

J'avais la même erreur et chaque fois que je la réparais, elle revenait après le redémarrage d'Eclipse.

Tout d'abord, comme d'autres l'ont dit, assurez-vous de ne pas avoir plusieurs copies du même fichier .jar autour de vos projets.

Dans mon cas, j'avais un projet principal qui utilisait ActionBarSherlock (parmi d'autres projets de bibliothèque). Le truc qui a fonctionné pour moi était d'entrer ActionBarSherlock --> Properties --> Java Build path --> Order of Exportet de désélectionner Android Private Libraries. Ensuite, Project -> Cleanentrez et maintenant vous devriez être en mesure de construire le projet correctement.

Maintenant, pour une raison quelconque, chaque fois que je redémarre Eclipse, cela active automatiquement cette case à cocher, je dois donc répéter ce processus.

J'espère que cela aidera une âme perdue :)


32

Accédez à Project / properties et Java Built Path et décochez les bibliothèques privées Android


1
J'ai également corrigé mon problème!
Totic du

Mais son arrêt gcm.jar pour fonctionner, comment le faire fonctionner sans cette erreur?
Narendra Singh

J'ai eu une erreur: plusieurs dex Lcom / google / android / gms / analytics / internal / Command $ 1. J'ai obtenu ceci après la mise à jour de Google Play vers 22.1.1. La désélection des bibliothèques privées dans le projet Google Play a supprimé l'erreur
eugene

Tu m'as sauvé la vie! Thx ~
Leo Hsieh

15

Pour moi, allez simplement dans Propriétés du projet >> Chemin de construction Java >> Ordre et exporter. Décochez toutes les bibliothèques externes, comme l'image ci-dessous. Ça marche pour moi. J'espère que cette aide.

Propriétés du projet


c'était un problème pour moi
Piyush-Ask Any Difference

8

J'ai également rencontré ce problème dans mon projet. AVD n'est pas en mesure de recharger les contextes de dossier assets, lib, res et etc. problème: Dex Loader] Impossible d'exécuter dex: plusieurs fichiers dex sont définis Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl.

Ensuite, j'ai créé de nouveaux projets et copiés MainActivity.java, activity_main.xml, le contexte drawable. Supprimez ensuite l'ancien projet de l'exploration du package, redémarrez votre Eclipse et AVD. Mon projet fonctionne maintenant correctement .... :) J'espère que ces étapes vous aideront un peu les gens .. !!


8

J'ai le même problème, ce que j'ai essayé est:

  1. Élément de liste
  2. Ouvrir le chemin de construction du projet,
  3. Sélectionnez l'onglet "Bibliothèques",
  4. Supprimer toutes les bibliothèques sauf la bibliothèque Android
  5. Ajout de tous les fichiers JAR requis,
  6. Et.. Voila!

Cela fonctionne pour moi, merci.


ouais, j'ai juste fait la même chose. supprimé tous les fichiers jar, ajouté de nouveau. dans l'ordre et l'exportation, décoché les dépendances et vérifié toutes les bibliothèques ajoutées à l'instant
Maulik Sheth

6

Si certains d'entre vous rencontrent ce problème avec facebook-connent-plugin pour phonegap

essayez de supprimer les fichiers dans le répertoire bin / class / com / facebook / android! -> et reconstruire


C'est la bonne réponse. L'explication est ---- Le facebook.android est inclus deux fois. Une fois dans facebookSDK.jar qui est inclus dans votre projet et une fois que les fichiers java sont directement inclus dans votre projet. le supprimer de votre projet est le moyen le plus simple de le faire. toutes les autres réponses ne sont que des contournements qui n'exporteront pas la définition ou quelque chose ...
Sandeep Taneja

6

Comme d'autres l'ont mentionné, cela se produit lorsque vous avez plusieurs copies de la même classe dans votre chemin de génération ou ailleurs dans votre configuration.

J'avais ajouté android-support-v4.jar à mon dossier libs /, et d'une manière ou d'une autre, eclipse a ajouté une deuxième copie à bin / classes / android-support-v4.jar.

Vous pouvez tester cela avec

grep -r YourOffendingClassName YourApp | bocal grep

La suppression de la copie supplémentaire dans bin / classes a résolu le problème - je ne sais pas pourquoi Eclipse en a fait une copie.


1
J'ai essayé toutes les autres options énumérées ici, mais c'est celle qui a résolu le problème pour moi! :) Et oui, Eclipse devrait mourir et Android Studio devrait avoir sa version 1.0 - le monde serait alors un meilleur endroit.
Johan Paul

5

J'ai eu cette erreur pour une autre raison. Je me trompais en ajoutant à la fois la bibliothèque de support v4 ET v13. Ce n'était pas nécessaire pour moi puisque ma minSdkVersion est de 15.

Je l'ai réparé par incluant uniquement la bibliothèque de support v13. Assurez-vous également de cocher la bibliothèque dans le chemin de construction de votre bibliothèque exportée dans eclipse. Je l'ai également déplacé vers le haut.


C'est aussi ce qui m'a attiré. La bibliothèque de support v13 inclut la bibliothèque de support v4, donc dex montrait les déclarations de classes multiples.
Kyle Falconer

4

Même après avoir traversé plusieurs réponses, aucune solution n'a fonctionné pour moi.

J'ai supprimé "Android Dependencies" du chemin de compilation. Ajout de tous les fichiers jar au chemin de construction et l'erreur a disparu. D'une manière ou d'une autre, l'éclipse semblait cacher les choses.


3

Je laisse cette réponse à quelqu'un qui entre dans ce scénario comme je l'ai fait.

J'ai trébuché ici et là avant de remarquer que j'avais par erreur glissé et déposé le fichier JAR de la bibliothèque de support dans mon dossier src et qu'il se trouvait là. Comme je n'avais aucune idée de comment cela s'était passé ou quand je l'ai laissé tomber là-bas, je ne pourrais jamais imaginer que quelque chose n'allait pas là-bas.

J'obtenais la même erreur, j'ai trouvé le problème après un certain temps et je l'ai supprimé. Le projet fonctionne maintenant correctement.


3

La solution pour moi était simplement de faire les choses suivantes:

  1. -> répertoire lib dans votre projet et supprimez plusieurs éléments.
  2. Projet-> Propriétés-> Chemin de construction Java et supprimer toute bibliothèque de dépendances a été ajouté automatiquement et non par vous! -> Appliquer
  3. Redémarrez Eclipse IDE
  4. Nettoyez maintenant le projet.
  5. Exécuter / Déboguer sur le périphérique / émulateur le projet ... Bonne chance

le problème persiste
Akhil Jain

2

Mon problème au début était:

Impossible d'exécuter dex: java.nio.BufferOverflowException. Vérifiez le journal Eclipse pour la trace de la pile.

1) J'ai fait un clic droit sur mon projet -> Outils Android -> Ajouter une bibliothèque de support (Exécutez mon application ... Cela n'a pas fonctionné donc je continue ...) 2) Cliquez à nouveau avec le bouton droit sur mon projet -> Propriétés -> Android -> Vérifiez Android 4.1.2 (16) sur Project Build Target (exécutez à nouveau l'application ... et obtenez ceci:

Impossible d'exécuter dex: plusieurs fichiers dex définissent Landroid / support / v4 / app / BackStackState;

3) Je suis donc allé au dossier « lib » sur mon projet et supprimer le « vieux » Android.support.library.jar (Exécuter l'application et croiser les doigts et ...)

ÇA MARCHE!

J'espère que cela aide quelqu'un ... Merci les gens!


2

J'ai eu ce problème et cela ne signifie pas que la même bibliothèque est chargée plusieurs fois mais que le système essaie de charger une classe avec le même nom et peut-être le même nom de package simultanément, c'est-à-dire

  • com.pack1.deet Class Geometrydelibrary1.jar

et un autre

  • com.pack1.deet Class Geometrydelibrary2.jar.

Comment devriez-vous aborder? Vous devez analyser quelles méthodes sont utilisées, une méthode de library1.jar ou library2.

Il existe 2 solutions,

  1. Renommez un nom de paquet, puis dalvik interprète, qu'il s'agit de classes distinctes
  2. Ou si vous voulez prendre des risques, purgez la classe, qui ne contient pas la méthode, que nous utilisons vraiment.

J'espère que cela a clarifié cette question souvent posée.


2

J'ai supprimé les dépendances Android du chemin de construction et cela a fonctionné.


1

Cette erreur m'est arrivée lorsque, dans le projet de mon application, j'ai référencé un projet de bibliothèque dans mon espace de travail Eclipse (dans mon cas, le SDK Facebook) et en même temps inclus le SDK Facebook en tant que fichier jar dans le dossier libs. La suppression de la référence à la bibliothèque mais le maintien du fichier jar dans le dossier libs ont supprimé l'erreur.


1

J'ai eu le même problème. J'ai dû supprimer le .apkfichier et cela a fonctionné.


1

Pour moi, j'ai supprimé android-support-v4.jar du dossier lib et également supprimé du chemin de construction.


Bonjour Rach, bienvenue sur Stackoverflow. Votre réponse a été signalée comme étant de mauvaise qualité en raison de sa longueur et de son contenu. Lorsque vous répondez aux questions, veuillez fournir une description supplémentaire sur la façon de résoudre le problème. Cela aidera les autres et vous fera gagner de la réputation :)
super

1
  • Faites un clic droit sur le projet et allez à build Path>configuration build path
  • Sélectionnez l'onglet bibliothèque et cliquez sur support-v4 library et cliquez sur supprimer
  • Cliquez sur OK

puis nettoyez votre projet et exécutez-le fonctionnera :-)


0

Au cas où quelqu'un d'autre se cogne la tête sur ce problème comme je viens de le faire:

Mon cas impliquait une chaîne de projets de bibliothèques. Le simple fait de nettoyer un projet sur toutes les bibliothèques a tout corrigé


0

J'ai trouvé la solution ci-dessous dans eclipse ... j'espère que cela fonctionne pour vous :)

Right click on the Project Name

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

Unchecked your .jar library's

0

Ce problème se produit lorsqu'une même bibliothèque est ajoutée à plusieurs reprises dans votre projet. Si vous n'avez pas ajouté la bibliothèque plusieurs fois intentionnellement, vérifiez les dépendances / bibliothèques privées des bibliothèques que vous avez ajoutées dans votre projet, très probablement elles ont déjà inclus une bibliothèque qui est à l'origine de ce conflit.


0

J'avais également du mal à trouver que c'était un problème. Dans mon cas, ce qui s'est passé, c'est lors de la copie de l'apk vers un e-mail (glisser-déposer) - par erreur, l'apk a été collé dans le dossier src de l'un des packages. Après avoir supprimé l'apk du dossier source, cela a bien fonctionné.


0

J'ai eu ce problème dans Intellij et c'était parce que la bibliothèque ActionBarSherlock que j'ai ajoutée à mon projet définissait le android-support-v4.jar comme une dépendance de compilation et ce fichier était déjà inclus dans mon projet, il y avait donc plusieurs copies / version de DEX à temps de compilation.

La solution était de changer la dépendance du module ActionBarSherlock pour ce jar en Runtime au lieu de compiler, car mon projet le fournissait déjà.


0

Pour moi, le problème était que j'avais ajouté un projet lib (autobahn lib) plus tôt et plus tard, j'ai basculé le fichier en Jar de la même bibliothèque.Bien que j'aie supprimé les références à l'ancien projet de bibliothèque, j'obtenais cette erreur. Après toutes les réponses ici, j'ai vérifié le chemin de construction, etc. Mais je n'ai pas ajouté ces bibliothèques pour construire le chemin manuellement. Donc je n'avais rien à enlever. Enfin tombé sur ce dossier.

bin / dexedLibs

J'ai remarqué qu'il y avait deux fichiers jar avec le même nom correspondant à autoroute Android qui causaient le conflit. J'ai donc supprimé tous les fichiers jar dans le dossier dexedLibs et reconstruit le projet. Cela a résolu le problème.


0

Pour ajouter la myriade d'autres sources potentielles ... J'avais mis à jour toutes les bibliothèques dans le libdossier de mon projet, mais Eclipse a réinstallé "utilement" toutes les bibliothèques d'origine. Il n'y avait plus de référence à l'intérieur d'Eclipse à ces bibliothèques mais le programme externe dex-maker a juste saisi tous les fichiers du librépertoire et ainsi obtenu deux versions de plusieurs .jarfichiers de bibliothèque .

git statusidentifié les nouveaux fichiers et s'en git clean -fest débarrassé pour moi (même si j'ai parfois dû attendre ou redémarrer Eclipse sous Windows car il y avait toujours les fichiers ouverts à partir de la copie).


0

Solution ULTRA simple et la plus fine:

Supprimez tout dans le dossier du projet principal de clic droit -> Propriétés -> Chemin de construction Java sauf Android XY (où XY est la version sous Android). Nettoyez et construisez. Terminé!

Assurez-vous avant cela d'avoir un seul android-support-v4.jar.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.