Android studio “无法修复”;ParseException:错误的类文件魔术(cafebabe)或版本(0034.0000)";

Android studio “无法修复”;ParseException:错误的类文件魔术(cafebabe)或版本(0034.0000)";,android-studio,Android Studio,我最近从AWS应用程序中导入了一个jar,其中包含我将在Android应用程序上引用的所有对象。在我的Android Studio项目中,通过Gradle连接后,错误就会出现,直到我清除导入的jar并重建所有内容,错误才会消失 我读到: 此错误可能是合法的。当Android应用程序的方法名超过65k时,就会出现这种情况。我的应用程序可能很大,但如果我导入的所有库都超过了这个数量,我会感到惊讶。。。。我不排除这种可能性,但有很多方法。据我所见,十有八九,这是一个配置错误。我读的前几篇文章说让Pro

我最近从AWS应用程序中导入了一个jar,其中包含我将在Android应用程序上引用的所有对象。在我的Android Studio项目中,通过Gradle连接后,错误就会出现,直到我清除导入的jar并重建所有内容,错误才会消失

我读到:

此错误可能是合法的。当Android应用程序的方法名超过65k时,就会出现这种情况。我的应用程序可能很大,但如果我导入的所有库都超过了这个数量,我会感到惊讶。。。。我不排除这种可能性,但有很多方法。据我所见,十有八九,这是一个配置错误。我读的前几篇文章说让Proguard能够删除所有未使用的方法,但这没有帮助

我的配置:

我已将Android Studio环境中的所有内容设置为运行Java 7:

  • 项目字节码版本:1.7
  • JDK位置:C:\Program Files\Java\jdk1.7.0\U 45
build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 20
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.example.maveric.helloworld"
        minSdkVersion 15
        targetSdkVersion 20
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.google.android.gms:play-services:4.2.42'
    compile 'com.android.support:appcompat-v7:20.0.0'
    compile 'org.apache.commons:commons-io:1.3.2'
    compile 'com.cedarsoftware:json-io:4.3.0'
}

在过去的5个小时里,我尝试了所有的解决方案,但都没有一点运气。

在尝试了6个多小时的解决方案后,Oleg在评论中链接到我的那个解决方案最终让我找到了问题的真正原因

可以找到关于该问题的简要说明,但我将尝试解释我的系统上的一切情况:

当我导入一个jar文件时,这个错误第一次出现在我身上。jar文件是我的主Java项目的一部分,托管在Eclipse中

这个错误首先会通过Messages选项卡向用户显示,Gradle会在该选项卡中遍历它的每个任务。它崩溃的任务是

:app:transformClassesWithDexForDebug
问题是Gradle Messages窗口只是说任务失败,然后给出一条非描述性的错误消息说

Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.7.0_45\bin\java.exe'' finished with non-zero exit value 1
为了获得更好的视图,您需要查看Gradle控制台视图。终端视图中的文本告诉您:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.7.0_45\bin\java.exe'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
向上滚动一点显示stacktrace运行良好,尽管此初始消息提示应该添加额外的标志以进行调试。stacktrace的顶部显示:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
但即使这样也没有多大帮助。它试图告诉您的是(我必须补充的是非常糟糕的),它正在查看的类是用不受支持的Java版本编译的。在我的例子中,version(0034)是52的十六进制表示,表示Java8。Android不支持Java8,因此它终止了构建


解决方案是返回到我的Eclipse项目,导出jar文件,并将编译器设置为1.7版,现在一切都启动并再次运行。我希望这有帮助

的可能副本有几个答案,这些答案提供了IDE为什么用JDK 8编译代码以及如何修复代码的见解。@Oleg这是我将要看的第一篇文章。我不知道用户删除并重新编译了什么文件。第二篇文章我已经完全尝试过了,但是没有运气。是的!我想对于编码人员来说,输出一条有用的错误消息,比如“Android不支持Java8”太难了!