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!

Tran Ngu Dang
la source
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
référez-vous celui-ci. stackoverflow.com/questions/34415101/…
Steve
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.

éponge
la source
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.

M. Sameer
la source
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 :)

akemalFirdaus
la source
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 :)

Henrique
la source
32

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

Pravin Bhosale
la source
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

Hoa Hoang
la source
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 .. !!

satya
la source
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.

Venin Fedy
la source
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

Samih A
la source
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.

chaqke
la source
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.

Ryan R
la source
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.

JaydeepW
la source
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.

kishu27
la source
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
GuyN
la source
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!

Daros
la source
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.

Limite
la source
2

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

Cüneyt
la source
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.

Gunnar Karlsson
la source
1

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

sefodu
la source
1

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

Rach
la source
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 :-)

Iman Marashi
la source
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é

Joe Plante
la source
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
Harshal Benake
la source
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.

Umer Farooq
la source
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é.

Prabakaran
la source
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à.

TimT
la source
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.

Ajith Memana
la source
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).

Brian White
la source
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.

Andrés Fg
la source
0

Si vous utilisez cordova, essayez la commande cordova clean

Merbin Joe
la source