web-dev-qa-db-fra.com

Plusieurs fichiers dex - La conversion au format Dalvik a échoué - Impossible d'exécuter dex

J'ai 2 versions d'application - pro et lite. Ils sont tous deux déjà sur le marché à la v1.01. J'essaie de publier la v1.1 pour les deux. Cette mise à jour comprend l'intégration de SwawrmConnect afin d'utiliser leurs classements mondiaux.

Je devrais commencer par dire que je sais que je ne gère pas correctement mon code. J'ai 2 applications complètement séparées et qui partagent probablement 90% de leur code. Je les maintiens séparément car après une semaine ou 2 ou 3 de ne pas comprendre comment faire une bibliothèque et partager du code, j'ai abandonné et je suis allé comme ça avec.

SwarmConnect est le premier pot que j'ai utilisé et j'ai dû créer une bibliothèque pour deux applications (voir capture d'écran de la structure des fichiers ci-dessous).

À l'heure actuelle, ma version lite fonctionne et est prête à être publiée. J'essaie maintenant de mettre ma version pro là où elle doit être pour la sortie. Je suis pratiquement certain que tous les fichiers Java/xml sont à jour et prêts. Lorsque je suis allé exécuter la version pro dans l'émulateur, j'obtiens l'erreur ci-dessous:

[2013-04-18 11:24:41 - Dex Loader] Unable to execute dex: Multiple dex files define Lcom/swarmconnect/loopj/Android/http/AsyncHttpResponseHandler;
[2013-04-18 11:24:41 - BibleTriviaPro] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lcom/swarmconnect/loopj/Android/http/AsyncHttpResponseHandler;

Ce que j'ai essayé:

  • Nettoyer/reconstruire
  • Mettre à jour Eclipse
  • Supprimer les dossiers bin et gen
  • Redémarrez Eclipse
  • Et quelques autres trucs

Ma structure de fichiers:

enter image description here

Le problème pourrait-il être que j'essaie d'utiliser SwarmConnect comme bibliothèque pour 2 projets (Lite et Pro)?

ÉDITER:

Vous trouverez ci-dessous la structure des fichiers de la version lite qui fonctionne parfaitement. Compile et s'exécute sur l'émulateur.

enter image description here

18
Matt

Par coïncidence, j'ai rencontré le même problème avant-hier. Voici ce que je vous suggère de faire.

Assurez-vous d'abord et avant tout que vous disposez d'une sauvegarde de tous les fichiers JAR résidant actuellement dans le dossier "Android Dependencies"/"libs".

Maintenant, fixons d'abord la version lite en suivant ces étapes.

  1. Supprimez tous les fichiers jar sauf Android-support-v4.jar depuis le dossier 'Android Dependencies' sous Project Explorer dans Eclipse.

  2. De même, supprimez tous les fichiers Jar sauf Android-support-v4.jar à partir du dossier libs sous Explorateur de projets dans Eclipse.

  3. Maintenant, faites un clic droit sur votre projet-> Sélectionnez Propriétés-> Sélectionnez Java Build Path-> Sélectionnez Ajouter des fichiers JAR externes. Ajoutez tous les fichiers jar nécessaires (assurez-vous simplement d'ajouter un fichier jar particulier une seule fois).

Enfin, nettoyez le projet et construisez-le. Appliquez maintenant la même séquence d'étapes à la version pro. Ça devrait le faire.

MISE À JOUR: - Au cas où vous voyez Eclipse cribbing sur certaines erreurs de temps de compilation après avoir fait tout cela, tout ce que vous pourriez avoir à faire est de simplement corriger ces erreurs de temps de compilation en faisant les importations nécessaires en appuyant sur Ctrl+Shift+O.

[Je suppose qu'il n'y a pas de lien entre les versions pro et lite du projet en termes de dépendances de source, etc. ce que je veux dire en gros, elles sont totalement indépendantes.]

J'espère que cela t'aides.

37
Sriram

Je soupçonne fortement que c'est votre problème

  1. Faites un clic droit sur votre projet
  2. Regardez sous l'option "Android"
  3. Dans le volet inférieur, regardez si "Swarm Connect" est présent
  4. Sinon, ajoutez-le (même si je soupçonne vraiment qu'il existe déjà)
  5. Supprimer Swarm.jar de votre répertoire libs

la raison étant: lorsque vous ajoutez un projet de bibliothèque à un projet Android dans Eclipse, il n'apparaît pas dans votre répertoire libs. J'ai en fait essayé d'ajouter uniquement le fichier .jar à un projet et on m'a dit que ce n'était pas la bonne approche (au moins jusqu'à l'API 14, je pense).

Je suppose que, dans votre version "non-pro", vous ne l'avez pas lié dans les options du projet et donc il compile toujours correctement. Néanmoins, vous devez le lier comme je viens de le décrire pour éviter les problèmes lorsque la bibliothèque essaie d'accéder à ses propres ressources.

2
DigCamara

La solution ci-dessus n'a pas fonctionné pour moi, tout ce que j'avais à faire était d'ajouter les pots dans le dossier libs en externe et de décocher Android bibliothèques privées sous l'onglet commande et exportation.

 right click--
             Java build path--
                               order and export tab ->Uncheck Android private libraries 
                                   and add jars in the libs folder externally.

suivez les étapes ci-dessus. Je ne sais pas pourquoi cela se produit.

2
war_Hero

J'ai essayé la réponse de @ Sriram ci-dessus. Ça n'a pas marché.

Ensuite, j'ai dû supprimer les bibliothèques du projet-> Propriétés-> Chemin de génération Java-> Bibliothèques et ajouter le pot réel (j'avais besoin à la fois d'Android-support-v4.jar et d'Android-support-v13.jar) dans le dossier libs de mon projet. Ensuite, cela a fonctionné:

final structure

(notez qu'il n'y a pas de dossier "Bibliothèques référencées")

0
alexey