Плохой класс файла магия или версия
Я уже знаю, что этот вопрос уже задавался очень часто и дает ответы, но ни один из найденных ответов не устранил мою проблему.
Это ошибка:
Error:Gradle: Execution failed for task ':ffcommunity:preDexDebug'.
com.android.ide.common.internal.LoggedErrorException: Failed to run command:
D:\Android SDK\sdk\build-tools\20.0.0\dx.bat --dex --output D:\Users\ReVo\Documents\IntelliJ IDEA\FFCommunity\ffcommunity\build\intermediates\pre-dexed\debug\bananaquery-2ee85432877a057e7414910b8127805535139d5d.jar D:\Users\ReVo\Documents\IntelliJ IDEA\FFCommunity\ffcommunity\libs\bananaquery.jar
Error Code:
1
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)
at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
at com.android.dx.command.dexer.Main.processClass(Main.java:665)
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
at com.android.dx.command.dexer.Main.access$600(Main.java:78)
at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572)
at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
at com.android.dx.command.dexer.Main.processOne(Main.java:596)
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
at com.android.dx.command.dexer.Main.run(Main.java:230)
at com.android.dx.command.dexer.Main.main(Main.java:199)
at com.android.dx.command.Main.main(Main.java:103)
...while parsing com/comuf/revonline/bananaquery/BananaInsert.class
1 error; aborting
Ошибка bad class file magic (cafebabe) or version (0034.0000)
,
Я собрал и запустил приложение без проблем много раз в один и тот же день, но теперь с этим сообщением происходит сбой каждый раз.
Проект SDK является Android API 19 Platform
и уровень проекта 1.7
,
CompileSDK есть 19
и buildToolsVersion - это '20.0.0'
,
Варианты компиляции:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
И в dependencies
я имею:
compile files('libs/bananaquery.jar')
Библиотека построена с SDK Android API 19 Platform
с уровнем проекта 1.7
,
мой .jar
файл внутри libs/
папка.
Я использую IntelliJ IDEA 14 Preview, это может быть причиной? С IntellIJ IDEA 13 он застревает на "Gradle Sync"
компиляция файлов может быть бесполезной, так как у меня есть compile fileTree(dir: 'libs', include: ['*.jar'])
тоже
9 ответов
Хорошо мой плохой
В разделе Project SDK при добавлении Android SDK
Вы должны предоставить Java SDK
и все мои Android SDK используют Java 8 в качестве SDK, поэтому он создает файлы классов с неверной версией, даже если уровень проекта 1.7
(я не знаю почему, я предположил, что все было выбрано на уровне проекта).
Теперь я изменил SDK (java version "1.x.0"
часть.)
и, кажется, компилируется нормально.
Причина, которая работала до сегодняшнего дня, заключалась в том, что мой SDK был 1.8
и не Android API x
Мой JAVA_HOME
переменная изменилась на Java 1.8, и я получил это сообщение об ошибке при компиляции чистого Java-модуля как зависимость моего проекта Android.
build.gradle из Java-модуля
apply plugin: 'java'
Решение № 1: быстрый грязный
Я исправил это, установив мой JAVA_HOME
вернуться к 1.7:
export JAVA_HOME=`/usr/libexec/java_home -v 1.7`
Решение № 2: изменить версию компилятора:
вернуться к 1.7 для этого конкретного модуля в его build.gradle
apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
В случае, если люди находят ответ @Marco Acierno немного неясным, решение состоит в том, чтобы убедиться, что вы работаете с Java 7, а не с более высокой версией.
Для Android Studio измените File -> Project Structure -> SDK Location -> JDK Location
в jdk1.7.x
, Для командной строки, убедитесь, что java -version
выходы java version "1.7.x"
,
Измените все версии Java вашего модуля на Java 1.7 в каждом файле build.grade.
в плагине, который является библиотека и приложение
compileOptions{
sourceCompatibility=JavaVersion.VERSION_1_7
targetCompatibility=JavaVersion.VERSION_1_7
}
и в Яве
sourceCompatibility= 1.7
targetCompatibility= 1.7
Эта проблема возникает при использовании .jar
файл, который не использует какие-либо функции Java 6 или выше, но был построен с использованием Java 6 или выше.
Если вы построили это .jar
файл, то вам не нужно ничего менять в Gradle
или же ProGuard
или же Compiler Version
, Решение очень простое, просто построить это .jar
файл снова, но с использованием Java 5 или менее.
У меня была похожая проблема, я решил ее, обновив свой Proguard. получить вашу версию Proguard с помощью этой команды
java -jar ~/android-sdks/tools/proguard/lib/proguard.jar
получите последнюю версию файла progaurd.jar здесь ( http://proguard.sourceforge.net/)
замените существующий android-sdks/tools/proguard/lib/proguard.jar новым файлом.jar.
Надеюсь, это поможет вам. Если вы используете Java 8, то вам следует перейти на Proguard 5.x, потому что Proguard 4.x не поддерживает Java 8.
У меня была похожая проблема, когда я пытался добавить самодельную библиотеку из NetBeans в Android Studio. Установка совместимости исходного и целевого в android studio и исходного / двоичного формата в netbeans (оба!) в java 1.7 решила проблему.
в андроид студии:
Структура проекта -> Модули / Приложение -> Свойства -> Исходный и целевой до 1,7
в netbeans:
Файл -> Свойства проекта -> Источники -> Исходный / двоичный формат до 1.7
затем очистите и соберите свой проект NetBeans и скопируйте.jar из "NBProj/dist" в "app/libs"
Я получил ошибку при использовании сторонней библиотеки. В соответствии с вышеупомянутым вопросом, необходимо было заменить библиотеку в соответствии с приведенным выше сообщением трассировки стека:
...
...while parsing com/comuf/revonline/bananaquery/BananaInsert.class
...
с соответствующей версией.
В соответствии с вопросом, bananaquery.jar
подлежит замене Java-совместимой версией.
Поделитесь решением проблемы, если установлена только Java8, просто установите уровень компилятора Java на 1.7, а затем пересоберите проект, и все будет в порядке.