Неверный класс или магия файла
Я уже знаю, что вопрос уже задан очень часто и отвечает, но ни один из ответов, которые я нашел, не исправил мою проблему.
Это ошибка:
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
i:
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'])
Ответы
Ответ 1
Хорошо, мой плохой.
В разделе Project SDK, когда вы добавляете Android SDK
, вы должны предоставить Java SDK
, и все мои SDK для Android используют Java 8 как SDK, поэтому он создает файлы классов с неправильной версией даже если уровень проекта 1.7
(я не знаю, почему, я предположил, что все было выбрано уровнем Project).
Теперь я изменил SDK (часть java version "1.x.0"
.)
и, похоже, компилируется отлично.
Причина, по которой работала до сегодняшнего дня, заключалась в том, что мой SDK был 1.8
, а не Android API x
Ответ 2
my 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
Ответ 3
В случае, если люди находят ответ @Marco Acierno, чтобы быть немного неясным, решение заключается в том, чтобы вы строили Java 7, а не более высокую версию.
Для Android Studio измените File -> Project Structure -> SDK Location -> JDK Location
на jdk1.7.x
. Для командной строки убедитесь, что java -version
выводит java version "1.7.x"
.
Ответ 4
Настройка JAVA_HOME назад к 1.7 работала для меня.
Ответ 5
измените всю версию java-модуля на java 1.7 в каждом файле build.grade.
в плагине, который является библиотекой и приложением
compileOptions{
sourceCompatibility=JavaVersion.VERSION_1_7
targetCompatibility=JavaVersion.VERSION_1_7
}
и в java
sourceCompatibility= 1.7
targetCompatibility= 1.7
Ответ 6
Эта проблема возникает, если вы используете файл .jar
, который не использует какие-либо функции Java 6 или выше, но был создан с использованием Java 6 или выше.
Если вы создали этот файл .jar
, вам не нужно ничего менять в Gradle
или ProGuard
или Compiler Version
. Решение очень просто, просто создайте этот .jar
файл снова, но используя Java 5 или меньше.
Подробнее.
Ответ 7
У меня была аналогичная проблема, я решил ее, обновив свою 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 coz proguard 4.x не поддерживает java 8.
Ответ 8
имел аналогичную проблему, когда я пытался добавить самодельную библиотеку из netbeans в андроид-студию. установив совместимость источника и цели в студии android и исходном/двоичном формате в netbeans (оба!), чтобы java 1.7 решила проблему.
в студии android:
Структура проекта → Модули/Приложение → Продвижения → Исходные и целевые до 1.7
в netbeans:
Файл → Свойства проекта → Источники → Исходный/двоичный формат до 1.7
затем очистите и создайте проект netbeans projekt и скопируйте файл .jar с "NBProj/dist" на "app/libs"
Ответ 9
поделиться решением дела, если только Java8 установлен, просто установите уровень компилятора Java на 1.7, а затем перестройте проект, должно быть ОК.