53 votes

Fichier de classe Dx mauvaise magie (cafebabe) ou version (0033.0000) avec ADK14

Depuis son déménagement à ADK14, j'ai été incapable de construire de nouveaux apk pour mise en ligne sur mon système Windows 7.

La construction échoue avec "la conversion à dalvik format a échoué avec l'erreur 1", tandis que la console est rempli avec beaucoup de "Dx mauvais fichier de classe de la magie (cafebabe) ou version (0033.0000)".

Le plein texte de l'exception:

com.android.ide.eclipse.adt.internal.build.DexException: Conversion to Dalvik format failed with error 1
at com.android.ide.eclipse.adt.internal.build.BuildHelper.executeDx(BuildHelper.java:740)
at com.android.ide.eclipse.adt.internal.project.ExportHelper.exportReleaseApk(ExportHelper.java:204)
at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.doExport(ExportWizard.java:290)
at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.access$0(ExportWizard.java:229)
at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard$1.run(ExportWizard.java:214)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)

Je suis la construction d'un vieux projet qui utilise beaucoup de bibliothèques, ainsi sans doute que le problème est lié à ce fait. Déjà fait tout le "Fix"Propriétés/Nettoyer etc qui sont proposées lors du déplacement à ADK14 (comme je l'ai naturellement eu tous ces problèmes), mais ils n'ont pas aidé avec cela.

Toutes les bibliothèques sont sur le même SDK Android et JDK/JRE version, donc cela ne semble pas être le problème.Et en fait, l'application est facile à construire, en debug et installé sur mon ancienne version 1.5 HTC Magic - c'est seulement quand j'en ai besoin pour exporter un dossier de prêt signé que cela tombe en panne.

[Modifier] C'est sur un Windows 7x64 PC. J'observe que l'emballage de l'apk sur mon Linux ordinateur portable (Lucid Lynx) pour exactement le même code a absolument aucun problème que ce soit.

Des idées? Obtenir très frustrés par cette.

NOTE

Apparemment, ce message d'erreur peut être provoquée par une variété de problèmes différents. Mon problème n'était pas lié à Java 6/7, que je n'ai jamais installé Java 7 en premier lieu, et le compilateur de la conformité a été mis à Java 6 (j'ai vérifié à l'époque, comme j'avais vu que la solution proposé ailleurs).

37voto

John Points 321

Compiler avec Java 6 au lieu de 7 a fonctionné pour moi, mais seulement après avoir configuré Eclipse pour qu'il "connaisse" mon chemin d'installation JRE6. Auparavant, je n'avais que la JRE7 installée dans Eclipse. Je pouvais régler le niveau de conformité de mon compilateur sur 1,6 ou 1,5, mais apparemment, sans le JRE correspondant, cela n'avait aucun effet. Je ne comprends pas vraiment pourquoi cela devrait être - qu'est-ce que JRE a à faire avec la compilation, et qu'est-ce que ça a à voir avec le code Android?

27voto

Michael A. Points 1975

J'ai trouvé la solution à ce problème.

Si vous regardez dans Proguard.chauve-souris (Android SDK\tools\proguard\bin), vous trouverez la ligne suivante:

call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %*

Remplacer par le texte suivant:

call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9

C'est un stupide vieille question, que je me rends compte que j'ai vu avant, maintenant que j'ai pensé à elle. Apparemment le SDK Android de l'équipe n'ont pas encore résolu ce problème, et il a été réintroduit quand j'ai fait une nouvelle installation du SDK Android.

25voto

LadyCailin Points 365

Après la lecture de la source de l'indice dex outil, le problème ici est que le fichier de classe n'est pas dans une version qu'il peut comprendre. La version doit être entre 45-50 (version majeure) de La version que vous utilisez ici est 0033.0000 (0x33 en hexadécimal), qui est de 51 en décimal (le numéro de version du représentant de Java 7). Ce n'est pas de la spéculation de ma part, j'ai trouvé ce directement dans le code source.

La suite est de la spéculation, et ce qui a résolu mon problème: je n'ai pas trouvé ce que vous avez à faire pour solidement confirmer ce que la classe de version de fichier, vous obtiendrez lors de la compilation avec diverses options, mais pour moi le problème était que ma bibliothèque avait été compilé avec Java 7. Depuis Android ne supporte Java 5 ou 6, j'ai simplement recompilé en 6, et boom, résolu.

13voto

Silviu B Points 111

Changer la version java d'Eclipse à 6 a fonctionné pour moi. Dans Eclipse, sélectionnez Windows-> Préférences-> Java-> Compilateur et définissez "Niveau de conformité du compilateur" sur 1.6.

Chose étrange, j’avais Eclipse 3.7.0 et cela fonctionnait bien, alors que d’autres ordinateurs avaient 3.7.1 et que les fichiers jar construits à cet endroit ne fonctionnaient pas ...

12voto

zkjellberg Points 1

Si vous utilisez Android Studio, vous pouvez corriger ce problème en utilisant les conseils ci-dessus pour cibler Java 1.6 dans votre build.gradle en ajoutant les lignes suivantes:

 apply plugin: 'java'
sourceCompatibility = 1.6
targetCompatibility = 1.6
 

Découvert ce correctif à partir de cet article de blog: http://www.alonsoruibal.com/my-gradle-tips-and-tricks/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X