Подтвердить что ты не робот

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

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

Ошибка построения с ошибкой "преобразование в формат dalvik с ошибкой 1", в то время как консоль заполнена множеством "Dx bad file 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, поэтому это не похоже на проблему. И на самом деле приложение легко встроено в отладочную версию и установлено на моей старой версии 1.5. HTC Magic - это только тогда, когда мне нужно экспортировать подписанный пакет приложений, который это разрушает.

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

Любые идеи? Это очень расстраивается.

Примечание

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

4b9b3361

Ответ 1

Я нашел решение этой проблемы, наконец.

Если вы посмотрите в 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.

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

Если вы используете Android Studio, это можно устранить, используя приведенную выше рекомендацию для таргетинга Java 1.6 в build.gradle, добавив следующие строки:

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

Обнаружено это исправление из этого сообщения в блоге: http://www.alonsoruibal.com/my-gradle-tips-and-tricks/

Ответ 6

Я исправил эту проблему, щелкнув правой кнопкой мыши Java Project- > Build Path- > Configure Build Path Перейдите на вкладку "Библиотеки", выберите "JavaSE-1.7- > ​​нажмите" Изменить ", затем выберите" JavaSE-1.6 ". Нажмите "Готово", затем "ОК".

Перейдите в Android-проект, щелкните правой кнопкой мыши Project- > Build Path- > Configure Build Path Перейдите на вкладку "Заказ и экспорт", установите флажок рядом с проектом java и другими включенными вами библиотеками. Нажмите ОК. В вашем проекте Android удалите "gen" и "bin". затем вскоре после того, как эти две папки будут восстановлены. (Если это не так, убедитесь, что вы запустили ваше затмение как администратор.)

попробуйте запустить Android-проект на своем телефоне. Wala работает:)

Ответ 7

Я решил эту проблему в Eclipse, перейдя в Windows --> Preferences Java --> Compiler в правом окне, выберите Compiler compliance level - 1.6, нажмите Apply и Ok.

И Clean Build все проекты, которые должны решить проблему

Ответ 8

В интересах любого, у кого может быть такая же проблема:

Удаление proguard позволило экспортировать apk для работы. Однако Proguard работает в Linux, но не в Windows, однако остается загадкой.

Теперь об этом сообщается о проекте Android: http://code.google.com/p/android/issues/detail?id=21170&can=4&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars

Если вы столкнулись с одной и той же проблемой, пожалуйста, запустите ее.

Ответ 9

У меня было такое же сообщение об ошибке, что dexing не работал "Dx bad file file magic (cafebabe) или версия (0033.0000)".

У меня был JDK1.7, Eclipse Kepler, AndroidSDK-19 (Android 4.4). Наконец, запустите файл android-sdk-windows/SDK Manager.exe, если есть какие-либо обновления. Оказывается, у меня был уровень 19 sdk, но Tools/Android SDK Build-tools составлял 18.1.1. Установленные сборщики 19.0.3 и компиляция начали нормально работать.

Ответ 10

Я попробовал все, начиная с нескольких других решений. то, что помогло мне, было загрузить самую последнюю версию ProGuard и скопировать ее с помощью android-sdk/tools/proguard/bin и lib.

Ответ 11

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

Если вы создаете с помощью ant, вы можете сделать это, добавив в свой javac-тег следующие атрибуты:

<javac
    ...
    source="1.6" target="1.6"
    ...
    >

Если вы вызываете javac напрямую, используйте:

javac -source 1.6 -target 1.6 ...

Ответ 12

Dx плохой класс файла магия (cafebabe) или версия (0033.0000)

Это проверка из инструментов сборки

  • Является ли это файлом класса java. (Файлы классов Java имеют "cafebabe" в начале)
  • Это неподдерживаемая версия. В этом сообщении говорится, что 0033.0000 (Java SE 1.7) не поддерживается

В этом конкретном сообщении говорится:

Чтение этого файла класса (у него есть "cafebabe" магия), я запутался в версии JVM 1.7

Инструменты Java и инструменты построения поддерживаются Oracle, а инструменты dex/dalvik/Android Runtime (ART) поддерживаются google/android. Поэтому, когда оракул генерирует новую java, существует период времени, когда java, сгенерированный последним sdk, несовместим с java, поддерживаемым инструментами построения.

wikipedia: файл класса Java содержит таблицу, показывающую версии java и их номер версии

+------------+-----------+
|Java SE 1.9 | 0035.0000 |
|Java SE 1.8 | 0034.0000 |
|Java SE 1.7 | 0033.0000 |
|Java SE 1.6 | 0032.0000 |
+------------+-----------+

Итак, в этом случае "плохая версия" - 1,7. Последняя (май 2016) инструментальная цепочка поддерживает 1,6 и 1,7, но не 1,8.

Как разрешить

Существует два механизма, которые могут быть использованы для решения этой проблемы.

  • Измените совместимость
  • Измените SDK

Измените совместимость

При компиляции на java вы можете сообщить компилятору о таргетинге на более ранний SDK. С Android-студией на данный момент (2.0), это делается путем изменения.

File/Project Structure

Нажмите на каждый модуль и установите Source Compatibility в требуемую версию java.

В raw gradle это означает вставка в build.gradle что-то вроде: -

android {
   ...
   compileOptions {
      sourceCompatibility JavaVersion.VERSION_1_6
      targetCompatibility JavaVersion.VERSION_1_6
    }

Для проекта java для build.gradle требуется

sourceCompatibility= 1.6
targetCompatibility= 1.6

Измените SDK

sdk для более ранних java-сборок может быть загружен, и вы можете загрузить и установить предыдущий SDK. Это ограниченное время. Oracle постоянно совершенствует Java, удаляет ошибки, а старые SDK не обновляются.

SDK обновляется путем изменения SDK с левой стороны project structure

Ответ 13

Вы можете легко обойти эту ошибку с помощью плагина Maven компилятора, имея только JDK 1.7. Отметьте мой пост в блоге о том, как это сделать.

Ответ 14

Я столкнулся с этим сообщением об ошибке во время преобразования jar → dex. Проблема была в поврежденном файле jar.

Ответ 15

Для меня эта проблема возникла при установке слишком старой версии инструментов сборки (инструменты сборки были за инструментами платформы и версиями sdk, которые я использовал). Так что я сделал, чтобы исправить ошибку:

  • Я загрузил последнюю версию инструментов сборки из Android SDK manager
  • Я использую ADT. Тем не менее, последняя версия инструментов сборки не использовалась и эта ошибка сохранялась. Поэтому я добавил строку sdk.buildtools=22.0.1 в файлы project.properties во всех моих проектах и ​​библиотеках. Теперь ошибка исчезла.

PS: Единственным недостатком является то, что я жестко запрограммировал версию и будущие обновления, я не буду автоматически ее использовать.

Ответ 16

Эта ошибка возникает, если вы используете файл .jar, который не использует какие-либо функции Java 6 или выше, но был построен с использованием Java 6 или выше, в соответствии с informIT.com. По-видимому, Google не включает JDK 7 в системные требования Android.

Итак, решение, которое сработало для меня, очень просто. Создайте файл .jar, используя Java 5 или меньше.

Ответ 17

У меня была такая же проблема при использовании build-tools 18.0.1, но все отлично работает, когда я перехожу к использованию 19.0.1. Возможно, лучше оставить комментарий после ответа "Кто", но репутация низкая.

Ответ 18

В моем случае проблема не в JDK, а в уровне соответствия компилятора 1.6 Речь шла о моих инструментах SDK, которые были "18.1.1" . Я обновляю встроенные инструменты до "21.1.2" , и ошибки исчезли.