【问题标题】:Unable to fix "ParseException: bad class file magic (cafebabe) or version (0034.0000)"无法修复“ParseException:错误的类文件魔法(cafebabe)或版本(0034.0000)”
【发布时间】:2016-01-10 07:18:37
【问题描述】:

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

我读到的:

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

我的配置:

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

  • 项目字节码版本:1.7
  • JDK 位置:C:\Program Files\Java\jdk1.7.0_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 个小时里,我在 SO 上尝试了每一个解决方案,但其中任何一个都没有运气。

【问题讨论】:

标签: android-studio


【解决方案1】:

经过 6 个多小时的尝试解决方案,在 cmets 中与我联系的 Oleg 终于让我找到了问题的真正原因。

可以在HERE 找到该问题的简要说明,但我将尝试解释我的系统上的所有内容:

当我导入一个 jar 文件时首次出现此错误,该 jar 文件是我的主要 Java 项目的一部分,该项目托管在 Eclipse 中。

此错误首先向用户提示的方式是通过“消息”选项卡,Gradle 会在该选项卡中遍历其每个任务。它崩溃的任务是

:app:transformClassesWithDexForDebug

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

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.

向上滚动一点显示堆栈跟踪很好,尽管此初始消息暗示应该添加额外的标志用于调试。堆栈跟踪的顶部是这样说的:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)

但即使这样也无济于事。它试图告诉您的(我必须添加非常糟糕)是它正在查看的类是使用不受支持的 Java 版本编译的。在我的例子中,版本 (0034) 是 52 的十六进制表示,这意味着 Java 8。Android 不支持 Java 8,因此它终止了构建。

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

【讨论】:

  • 是的!我想编码器很难输出一个有用的错误消息,比如“Android 不支持 Java 8”!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
相关资源
最近更新 更多