Android

Dx bad class file magic (cafebabe) or version (0033.0000) with ADK14

Dx Bad class file magic (cafebabe) или версия (0033.0000) с ADK14

С момента перехода на ADK14 я не смог создать новые apk для выпуска в моей системе Windows 7.

Сборка завершается ошибкой "не удалось преобразовать в формат dalvik с ошибкой 1", в то время как консоль заполнена множеством "Dx bad class file magic (cafebabe) или версии (0033.0000)".

Полный текст исключения:

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)

Я создаю старый проект, в котором используется множество библиотек, поэтому предположительно проблема связана с этим фактом. Я уже выполнил все "Исправления свойств" / Очистку и т.д., Которые предлагаются при переходе на ADK14 (поскольку у меня, естественно, были все эти проблемы), но они не помогли с этим.

Все библиотеки находятся в одной и той же версии Android SDK и JDK / JRE, так что, похоже, проблемы нет.И в самом деле, приложение легко встраивается в debug и устанавливается на мою старую версию 1.5 HTC Magic - это происходит только тогда, когда мне нужно экспортировать подписанный пакет приложения, который выходит из строя.

[Редактировать] Это на ПК с Windows 7x64. Я заметил, что при упаковке apk на моем ноутбуке с Linux (Lucid Lynx) для точно такого же кода абсолютно никаких проблем не возникает.

Есть идеи? Очень разочарован этим.

ПРИМЕЧАНИЕ

Очевидно, это сообщение об ошибке может быть вызвано множеством различных проблем. Моя конкретная проблема не была связана с Java 6/7, поскольку я вообще никогда не устанавливал Java 7, а соответствие компилятору было установлено на Java 6 (я проверял в то время, поскольку видел, что это решение предлагалось в другом месте).

Переведено автоматически
Ответ 1

Компиляция с Java 6 вместо 7 работала у меня, но только после того, как я настроил Eclipse так, чтобы он "знал о" моем пути установки JRE6. Ранее у меня был настроен только JRE7 в Eclipse. Я мог бы установить уровень соответствия моего компилятора 1.6 или 1.5, но, очевидно, без соответствующего JRE это на самом деле не имело никакого эффекта. Я действительно не понимаю, почему это должно быть - какое отношение JRE имеет к компиляции и какое это имеет отношение к коду Android?

Ответ 2

Наконец-то я нашел решение этой проблемы.

Если вы заглянете в Proguard.bat (Android SDK\tools\ proguard\bin), вы найдете следующую строку:

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

Замените его следующим:

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

Это глупая старая проблема, которую я на самом деле понимаю, что видел раньше, теперь, когда я разобрался в ней. Очевидно, команда Android SDK до сих пор не устранила эту проблему, и она была повторно введена, когда я выполнил чистую установку Android SDK.

Ответ 3

После прочтения исходного кода инструмента dex проблема здесь заключается в том, что файл класса не соответствует версии, которую он может понять. Версия должна быть в диапазоне 45-50 (основная версия) Версия, которую вы используете здесь, равна 0033.0000 (0x33 в шестнадцатеричном формате), что равно 51 в десятичном формате (номер версии, представляющий Java 7). Это не домыслы с моей стороны, я нашел это непосредственно в исходном коде.

Ниже приведены предположения, и они решили мою проблему: я не понял, что вам нужно сделать, чтобы точно подтвердить, какую версию файла класса вы получите при компиляции с различными параметрами, но для меня проблема заключалась в том, что моя библиотека была скомпилирована с Java 7. Поскольку Android поддерживает только Java 5 или 6, я просто перекомпилировал в 6, и бум, решено.

Ответ 4

Изменение версии Eclipse java на 6 сработало для меня. В Eclipse перейдите в Windows-> Настройки-> Java-> Компилятор и установите "Уровень соответствия компилятору" на 1.6.

Странно то, что у меня был Eclipse 3.7.0, и он работал нормально, в то время как на других компьютерах был Eclipse 3.7.1, и созданные там файлы jar не работали...

2024-01-24 06:43 java android