Impossible d'exécuter dex: plusieurs fichiers dex définissent le tableau Lcom / myapp / R $;

391

Depuis la mise à jour vers ADT14, je ne peux plus construire mon projet. C'était bien construit avant la mise à jour.

L'erreur:

[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;

Des problèmes similaires ont été signalés et j'ai essayé les suggestions y compris

  • Redémarrage Eclipse.
  • Nettoyage du projet et reconstruction - Désactivez l'option "Projet-> Générer automatiquement", puis "Nettoyer" et "Générer" le projet, puis essayez d'exécuter. réinitialiser l'option "Construire automatiquement" sur On
  • Réinstaller les Androidoutils de développement
  • Réinstallation d'Eclipse (mise à jour vers la dernière version 3.7.1)
  • Création d'un nouveau projet importé depuis le système de fichiers
  • Créé un nouveau projet à partir de subversion.
éponge
la source
travailliez-vous sur windows ou mac .. parce que j'aimerais suivre les réponses suivantes mais je ne sais pas s'ils vont travailler sur mac .. merci
McLan
si vous avez importé un projet de bibliothèque et que vous avez également importé le fichier JAR de bibliothèque dans le dossier lib, vous devez supprimer le fichier jar de votre dossier lib et également de [Build Path -> Configure Build Path]. Et ça va marcher.
Mehul
Regardez ma réponse sur le lien suivant. stackoverflow.com/a/38391449/3702595
Sattar Hummatli

Réponses:

462

J'ai eu le même problème, assez bizarre car cela ne se produisait que lors de l'utilisation d'Eclipse (mais c'était OK avec Ant). Voici comment je l'ai corrigé:

  • Clic droit sur le Project Name
  • Sélectionnez Build Path->Configure Build Path
  • Dans Java Build Path, allez dans l'ongletOrder and Export

  • Décochez votre .jarbibliothèque

Seulement parfois: dans l'onglet Commande et exportation, je n'avais pas de bibliothèque de fichiers jar, j'ai donc décoché l'élément Bibliothèques privées Android. Maintenant, mon projet est en cours d'exécution.

Marco Bonifazi
la source
Dans mon projet, j'incluais la bibliothèque de support du répertoire sdk dans mon chemin de build, et j'avais la bibliothèque de support dans le dossier "libs" pour le support de la construction de fourmis. J'en ai décoché une et cela a résolu mon problème.
Chris Feist
20
Entre la dernière construction et le lancement, une nouvelle bibliothèque est apparue mystérieusement dans mon projet: "Android Private Libraries" contenant la bibliothèque de support à laquelle je faisais déjà référence. Donc, ce mystérieux "plusieurs fichiers dex définissent ____" est apparu. Vérifier le chemin de génération Java et voir ce nouvel élément, et décocher la bibliothèque de support incluse à l'origine a résolu le problème pour moi.
Tom Pace
9
Merci beaucoup. C'est la bonne solution. Je ne sais vraiment pas pourquoi eclipse a autant de bugs. Maintenant, la situation est comme seulement 2 heures je peux coder et 6 heures je dois trouver une solution à ce genre de problèmes inutiles.
roy mathew
44
Dans l'onglet Ordre et export, je n'avais pas de bibliothèque de pots là-bas, donc j'ai un Android Private Librariesélément décoché . Maintenant, mon projet est en cours d'exécution.
Junior Mayhé
1
Dans mon cas , j'ai eu un doublon de'android-support-v4.jar'. Lorsque je l'ai supprimé , l'erreur a disparu
ymerdrengene
94

Mon problème a été résolu après avoir nettoyé certains répertoires et fichiers restants des versions précédentes des outils. ADT Rev 14 modifie l'emplacement de stockage des fichiers binaires . J'ai supprimé l'intégralité du répertoire bin, redémarré Eclipse et nettoyé la build et forcé une reconstruction. Cela semblait faire l'affaire au départ, mais le problème est revenu après la prochaine manche.

J'ai finalement découvert que mon répertoire bin était inclus dans le chemin de génération du projet. J'ai exclu bin du chemin de génération et répété les étapes ci-dessus. Cela a résolu mon problème.

éponge
la source
42
Que diable Google. Ce problème revient sans cesse, même avec R15.
terry
2
J'ai édité la solution ci-dessus pour inclure la résolution finale. Résolu définitivement maintenant.
Terry
7
En bref, personne ne sait vraiment pourquoi le problème se produit, ce qu'il signifie et comment le résoudre (je n'ai pas de répertoire bin dans le chemin de génération Java). J'ai évité la mise à jour vers R15 pour ces raisons, en restant avec R9. Mais j'ai toujours un problème similaire , sans aucun indice en vue. Tout conseil ou aide serait grandement apprécié.
Bill The Ape
6
@BillTheApe - d'accord. C'est plus que frustrant, c'est coûteux.
Tom Redman
@TRedman J'ai finalement réussi à résoudre le problème . Sans comprendre pourquoi. Ne riez pas. LOL +1.
Bill The Ape
50

[Résolu pour moi]

Propriétés du projet Eclipse-> Chemin de génération Java-> Commande et exportation

Décochez les bibliothèques privées Android.

user802467
la source
4
N'a pas aidé dans mon cas
redux
1
MERCI BEAUCOUP m'a aidé
madhu527
46

Rien de tout cela n'a aidé. C'était finalement un problème simple.

J'avais un projet qui utilise FacebookSDK et ViewPagerIndicator comme projets de bibliothèque. Tous ont été construits sur Android API 16 et ces deux projets ont utilisé la bibliothèque de support Android vX (X n'ayant pas 16 ans!)

J'ai ajouté un JAR externe à ces deux projets et l'ai pointé sur \ extras \ android \ v4 ... Et j'ai également supprimé le bocal v4 que j'avais dans leurs dossiers de bibliothèques.

Nettoyez tous les projets et reconstruisez.

Voilla!

L'erreur exacte que je recevais : Impossible d'exécuter dex: plusieurs fichiers dex définissent Landroid / support / v4 / view / PagerAdapter; Échec de la conversion au format Dalvik: impossible d'exécuter dex: plusieurs fichiers dex définissent Landroid / support / v4 / view / PagerAdapter;

Roy Weinberg
la source
36

Ce problème m'arrivait, j'avais un .jar externe dans mon dossier libs appelé gson-2.2.2.jar mais pour une raison quelconque, il y en avait deux, gson-2.2.2.jar et gson-2.2.2.jar ( 1), j'ai simplement supprimé ce dernier et mon projet s'est à nouveau bien construit.

Tom Selleck
la source
2
J'ai eu un problème similaire quand il y avait un ancien fichier jar dans le dossier libs et que je l'ai lié à un nouveau jar dans le même espace de travail. Lorsque ADT trouve plusieurs définitions pour le même symbole, il génère une erreur comme celle-ci. La suppression de l'ancien fichier jar dans le dossier libs l'a corrigé pour moi.
phyatt
Le pot externe est l'une des causes du problème et s'est avéré être le cas dans mon cas également. Je venais d'avoir un pot restant dans mon /libsexpérience précédente, résultant à la fois en un projet de bibliothèque et le .jar qui a été généré à partir de celui-ci. La suppression de ce pot sous /libsrésout le problème. +1
ripopenid
31
  1. Fermer l'éclipse.
  2. Supprimez le dossier bin dans votre dossier de projet.
  3. Démarrez eclipse et nettoyez votre projet.
  4. Maintenant, lancez et le problème devrait avoir disparu
Mohit marwal
la source
La réponse de Mateus Viccari a résolu mon problème, j'ai supprimé les bibliothèques en double et cela fonctionne comme un charme ..
swiftBoy
Si j'ai manifest fileété supprimé par eclipse du binrépertoire, ajoutez-le manuellement et nettoyez à nouveau le projet.
Mehul Joisar
Travaille pour moi. Assurez-vous également que vous n'avez pas le même .jar à deux endroits différents (dans mon cas, je l'avais à la fois dans un projet de bibliothèque et dans un projet référençant ce projet de bibliothèque. Il semble qu'Eclipse l'a ajouté automatiquement pour une raison quelconque)
Magnus W
Pour moi, je viens de nettoyer l'intégralité de l'espace de travail. Le simple nettoyage du projet n'était pas suffisant. Je crois que mon problème était
lié
N'a pas aidé dans mon cas
redux
26

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 - y compris bin / dans votre chemin de classe est un moyen de garantir ce problème.

Pour moi, cela s'est produit lorsque j'avais ajouté android-support-v4.jar à mon dossier libs /, et en quelque sorte eclipse a ajouté une deuxième copie à bin / classes / android-support-v4.jar.

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

Vous pouvez tester cela avec

grep -r YourOffendingClassName YourApp | pot de grep

chaqke
la source
23

Pour moi, je fais juste un clic droit sur le projet -> Chemin de génération -> configurer le chemin de génération -> Bibliothèques -> supprimer la dépendance

après cela fonctionne.

sonida
la source
20

Cette erreur peut se produire si vous avez deux fichiers JAR qui contiennent les mêmes noms de classe, par exemple, j'avais deux bibliothèques: jsr311-api-1.1.1.jar et jersey-core-1.17.1.jar, toutes deux contenant la classe javax.ws .rs.ApplicationPath. J'ai supprimé jsr311-api-1.1.1.jar et cela a bien fonctionné.

Mateus Viccari
la source
1
C'est la solution parfaite pour moi. J'ai ajouté les mêmes bibliothèques deux fois. Merci.
swiftBoy
19

J'obtenais cette erreur après avoir ajouté le facebooksdk.jar à un projet qui avait déjà des dépendances sur android-support-v4.jar . Étant donné que le facebooksdk.jar comprend déjà son propre android-support-v4.jar, il y avait des conflits. La suppression de l'ancien android-support-v4.jar du projet Propriétés / Chemin de génération Java / Bibliothèques a résolu le problème pour moi.

utilisateur1293131
la source
18

Accédez à Projet / propriétés et Chemin de génération Java et décochez les bibliothèques privées Android .

C'est aussi un autre cas pour ce genre d'erreur

Terminé

Hiren Patel
la source
15

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

Modifier: ignorer cela. J'avais le même pot dans mon dossier de dépendances et de bibliothèques maven. J'ai supprimé celui du dossier lib.

Osha Mahue
la source
2
La suppression des dépendances Android du chemin de génération a interrompu mon projet. Heureusement, il était facile de restaurer en cliquant avec le bouton droit sur projet> Outils Android> Corriger les propriétés du projet.
azdev
Dans certains cas, la suppression des dépendances Android et sa régénération résolvent certains problèmes. Mais comme dans mon montage ce n'est pas le cas.
Hadi Tok
9

Vous avez probablement installé r14 , cette erreur peut être due à la mise à jour des outils de la plateforme, vous devez réinstaller votre sdk

Reno
la source
J'ai juste complètement soufflé mon SDK et l'ai installé à partir du fichier zip téléchargé, puis j'ai chargé les API Android avec le gestionnaire de SDK Android. J'avais de grands espoirs mais le problème persiste.
terry
Il y a un dossier caché .android dans Windows, vous devez également le supprimer.
Reno
le même problème existe
McLan
9

Pour moi, ce problème n'existe que tant qu'il y a des projets de bibliothèque Android impliqués dans mon projet. Donc, quand je supprime toutes les bibliothèques et fais ce que vous avez dit, je peux exécuter à nouveau mon application. S'il y a des bibliothèques impliquées, même l'astuce de suppression de bin fonctionne.

Je ne comprends pas pourquoi ce bogue est apparu aujourd'hui car j'utilise ADT 14 depuis plusieurs jours maintenant. Eh bien, il y avait d'autres bugs qui me rendaient heureux.

mephju
la source
Beaucoup de solutions ressemblent à des trucs vaudous ... :)
Jasper
8

La suppression du dossier bin n'était pas suffisante, j'ai également supprimé le dossier gen. Ensuite, après deux reconstructions, le message d'erreur dex a disparu.

Rudolf Polzer
la source
8

Sélectionnez le projet dans l' Explorateur de projets , cliquez avec le bouton droit et sélectionnez Propriétés -> Chemin de génération Java -> Source -> Cochez la case Autoriser les dossiers de sortie pour les dossiers source

prasantasing
la source
N'a pas aidé mon cas.
redux
8

J'étais essentiellement confronté au même problème. J'ai supprimé le dossier BIN, puis supprimé les fichiers jar inutilisés pour la commande et l'importation d'Eclipse. Ça a marché après ça

Ahsan Zaheer
la source
7

Je suis en retard à cette fête, mais j'ajoute ma propre expérience pour que je puisse la retrouver plus tard :)

J'ai rencontré ce problème après la mise à niveau des compléments Android SDK et Eclipse. Aucune mise à niveau reste impunie!

Le problème pour moi était lié aux projets de bibliothèque, mon application fait référence à la fois aux projets Java standard et aux projets de bibliothèque Android. J'ai remarqué que les paramètres Java Build Path incluaient les dossiers de bibliothèque Android projets src et res dans la liste Source (les votes positifs pour tous ceux qui mentionnent que bin dans la source est un problème, src et res était également un problème.)

La solution était donc:

  1. Supprimez toutes les références de source et de projet des bibliothèques Android référencées de la section Java Build Path des paramètres de la liste Source et de la liste Project
  2. Assurez-vous que les dépendances java pures sont répertoriées dans la liste des projets et cochées dans l'onglet Ordre et exportation afin que les classes soient incluses dans l'apk
  3. Assurez-vous que toutes les dépendances de la bibliothèque Android sont répertoriées dans la section Android des propriétés du projet, dans la section bibliothèque sous les versions du SDK vérifiées.

C'était en voie de reconstituer tout cela des autres solutions! Phew!

Geai
la source
Bien dit! Je suis arrivé à des conclusions identiques après beaucoup de travail. Je voulais juste ajouter que si l'un de vos projets de bibliothèque inclut d'autres projets de bibliothèque ou des dépendances Java pur, ils doivent tous être ajoutés de la même manière, sinon cette erreur se produira. Si vous suivez les règles ci-dessus pour tous vos projets, vous ne devriez avoir aucun problème.
strangeluck
1
Une dernière chose ... il semble que si vous n'avez pas besoin d'exporter les bibliothèques privées Android d'un projet ou d'un projet de bibliothèque, ne le faites pas. Si plusieurs projets ou projets de bibliothèque l'exportent, vous obtiendrez l'erreur de plusieurs fichiers dex.
strangeluck
6

Je suis tombé sur cela lorsque je suis passé de adt 14 à 15 et pour le faire fonctionner, j'ai fini par supprimer le dossier .eclipse (avec mes paramètres) et réinstaller l'adt 15.

Jake1164
la source
6

Après avoir lu la réponse de Terrys sur la suppression du répertoire bin et Larrys sur l'emplacement du répertoire ANT:

J'ai déplacé les fichiers situés dans le répertoire BIN de mes projets vers le BIN / CLASSES et je suis opérationnel.

Edit 1 Puis a échoué lors de la deuxième exécution ... doh

Edit 2 Donc fermé Eclipse a déplacé les fichiers vers leur emplacement d'origine et tout fonctionne ... euh quoi? Je ne prétends pas savoir pourquoi cela a fonctionné. Mettra à jour en cas de changement.

Edit 3 J'ai noté de mes sauvegardes qu'il y avait en effet des fichiers en double dans le répertoire BIN et BIN / CLASSES.

La réponse est donc: ne pas avoir de fichiers aux deux endroits. Du moins pour moi, c'est ce qui a fonctionné.

HostMyBus
la source
Essayez de réduire les réponses à: Conclusion utile suivie de faits à l'appui . Évitez le récit historique AMAP; Les gens ont tendance à signaler cela, pensant que ce n'est "pas une réponse".
Brock Adams
bravo pour cela, toute aide pour rendre mes randonnées plus claires est appréciée
HostMyBus
6

Modifiez votre fichier eclipse.ini et définissez le paramètre de mémoire maximale sur

-Xmx1024m

Redémarrez ensuite votre ordinateur.

Ça a marché pour moi.

Truncarlos
la source
1
Rien de lié, donner plus de mémoire ne résout pas les problèmes de dépendance
Sierisimo
6

trouvé une solution je crois ??

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

Où il est dit: "Lcom / coremedia / iso / AbstractBoxParser $ 1" qui se trouve être l'emplacement de la bibliothèque que j'ai importée à l'origine du problème. J'ai recherché com.codemedia.iso.AbstractBoxParser $ 1.class et .AbstractBoxParser.class .... a pris ce pot, l'a déballé, a supprimé ces deux fichiers, puis reconditionné en tant que .zip, ajouté à la bibliothèque, nettoyé et travaillé! plus de conflit pour moi! (également pas de mises à jour ou de téléchargements supplémentaires)

jp093121
la source
6

J'avais deux versions différentes des fichiers .jar de Cordova dans mon dossier libs, j'ai supprimé celui que je n'utilisais même pas et cela a fonctionné tout de suite. Bizarre parce que je ne l'avais pas remarqué avant et ça a fonctionné avant et puis soudainement arrêté de travailler ...

Dédié
la source
5

La mise à jour ADT R14 modifie l'emplacement des classes dans le répertoire bin / classes (voir http://tools.android.com/recent/buildchangesinrevision14 ). Si vous utilisez ANT, vous devez modifier le chemin d'accès de vos classes de bin à bin / classes. Cela a fonctionné pour moi.

Larry Borsato
la source
J'utilise Eclipse. Savez-vous où vous modifiez le chemin d'accès aux classes dans Eclipse?
terry
5

Solution pour moi:

  1. SAUVEGARDEZ VOTRE CODE!
  2. Accédez à votre espace de travail de projet (pas à votre projet) et exécutez les commandes suivantes:

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

  3. Accédez à votre répertoire Eclipse et tapez cette commande:

    dev1: eclipse $ ./eclipse clear

  4. Eclipse commencera avec un espace de travail vide - ne vous inquiétez pas, vos projets sont toujours là. Créez simplement un nouveau projet à partir de ressources existantes et les choses devraient être de la sauce.

L'erreur exacte que je recevais : [2012-02-07 14:15:53 ​​- Dex Loader] Impossible d'exécuter dex: plusieurs fichiers dex définissent Landroid / support / v4 / view / PagerAdapter; [2012-02-07 14:15:53 ​​- ProjectCloud] La conversion au format Dalvik a échoué: Impossible d'exécuter dex: plusieurs fichiers dex définissent Landroid / support / v4 / view / PagerAdapter;

Cookster
la source
5

J'ai plusieurs projets de bibliothèque avec le même nom de package spécifié dans le AndroidManifest (donc aucun nom de champ en double n'est généré par R.java). J'ai dû supprimer toutes les autorisations et activités du fichier AndroidManifest.xml pour tous les projets de bibliothèque pour supprimer l'erreur afin que Manifest.java ne soit pas créé plusieurs fois. J'espère que cela peut aider quelqu'un.

Jared Rummler
la source
4

Après avoir essayé toutes les autres suggestions sans succès, j'ai supprimé tout le contenu du répertoire 'bin' de mes projets, puis j'ai à nouveau exécuté eclipse et cela a fonctionné.

JPB
la source
4

J'ai converti un projet non-bibliothèque en projet de bibliothèque, mais il y avait un fichier jar précédemment construit dans le dossier libs. La suppression de ce fichier jar a provoqué la disparition de cette erreur.

PacificSky
la source
4

J'étais confronté au même problème, puis j'ai vu en poussant mon application des fichiers jar qui ont été chargés deux fois, d'où plusieurs erreurs dex. Allez simplement dans les propriétés de votre projet -> Java Build Path et essayez de décocher le pot qui est chargé deux fois.

Navi
la source
4

[Résolu pour moi]

en supprimant la bibliothèque en double "fichier JAR" puis supprimez le fichier BuildConfig.java, le projet Clean et son travail.

AbuQauod
la source