错误的类文件魔术或版本

我已经知道,这个问题已经被问了很多次,也得到了很多答案,但是没有一个答案能够解决我的问题。

这是个错误:

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')

该库使用 SDKAndroid API 19 Platform和项目级 1.7构建。

我的 .jar文件在 libs/文件夹中。

我使用 IntelliJ IDEA 14预览版,这可能是原因吗?智能 IJ IDEA 13仍然停留在“分级同步”

编译文件可能是无用的,因为我有 compile fileTree(dir: 'libs', include: ['*.jar'])

64679 次浏览

Ok, my bad.

In the Project SDK section, when you add an Android SDK you should provide the Java SDK and all my Android SDKs uses Java 8 as SDK so it create the class files with the wrong version even if the Project level is 1.7 (i don't know why, i supposed that everything was choosed by Project level).

Now i changed the SDK (the java version "1.x.0" part.)

enter image description here

and it seems to compile fine.

The reason that worked before today was because my SDK was 1.8 and not Android API x

In case people find @Marco Acierno's answer to be a bit unclear, the solution is to ensure you're building with Java 7 and not a higher version.

For Android Studio, change File -> Project Structure -> SDK Location -> JDK Location to jdk1.7.x. For the command line, ensure java -version outputs java version "1.7.x".

my JAVA_HOME variable changed to Java 1.8 and I got this error message when compiling a pure java module as a dependency of my android project.

build.gradle of the java module

apply plugin: 'java'

Solution #1: Quick an dirty

I fixed it by setting my JAVA_HOME back to 1.7:

export JAVA_HOME=`/usr/libexec/java_home -v 1.7`

Solution #2: change compiler version:

change back to 1.7 for this specific module in its build.gradle

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

I had a similar issue, i solved it by upgrading my proguard. get your proguard version by this command

java -jar ~/android-sdks/tools/proguard/lib/proguard.jar

get the latest progaurd.jar file from here (http://proguard.sourceforge.net)

replace the existing android-sdks/tools/proguard/lib/proguard.jar with new .jar file.

Hopefully this should help you. If u using java 8 then you should upgrade to proguard 5.x coz proguard 4.x does not support java 8.

This problem occurs when you use a .jar file that is not using any feature of Java 6 or higher but was built using Java 6 or higher.

If you built that .jar file then you don't need to change anything in Gradle or ProGuardor Compiler Version. The solution is very simple, just build that .jar file again but using Java 5 or less.

More details.

Setting JAVA_HOME back to 1.7 worked for me.

change all your module java version to java 1.7 in every build.grade file.

in plugin which is library and application

compileOptions{
sourceCompatibility=JavaVersion.VERSION_1_7
targetCompatibility=JavaVersion.VERSION_1_7
}

and in java

sourceCompatibility= 1.7
targetCompatibility= 1.7

had a similar issue when i tried to add a self made library from netbeans to android studio. setting the source- and target compatibility in android studio and source/binary format in netbeans (both!) to java 1.7 solved the problem.

in android studio:

Project Structure -> Modules/App -> Propreties -> Source- and Target to 1.7

in netbeans:

File -> Project Properties -> Sources -> Source/Binary Format to 1.7

then clean and build your netbeans projekt and copy the .jar from "NBProj/dist" to "app/libs"

share the solution of the case if only Java8 installed, just set Java compiler level to 1.7 and then rebuild the project should be OK.

I got the error when using a third party library. In accordance with the above-mentioned question, it was necessary to replace the library according to the above stack trace message:

        ...
...while parsing com/comuf/revonline/bananaquery/BananaInsert.class
...

with the appropriate version.

Corresponding to the question, bananaquery.jar is to be replaced by the Java-compatible version.