Плохой класс файла магия или версия

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

Это ошибка:

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_HOME обратно на 1,7 работала для меня.

Измените все версии 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, а затем пересоберите проект, и все будет в порядке.

Другие вопросы по тегам