Неверный класс или магия файла

Я уже знаю, что вопрос уже задан очень часто и отвечает, но ни один из ответов, которые я нашел, не исправил мою проблему.

Это ошибка:

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".)

enter image description here

и, похоже, компилируется отлично.

Причина, по которой работала до сегодняшнего дня, заключалась в том, что мой 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, а затем перестройте проект, должно быть ОК.