【问题标题】:Java 1.7 compatibility for a library in android studioandroid studio 中库的 Java 1.7 兼容性
【发布时间】:2017-01-14 08:13:24
【问题描述】:

我想在我的 android studio 项目中使用 this 库,但是当我使用 gradle 将它添加到项目中时,它显示以下错误

Error:Error converting bytecode to dex: Cause: Dex cannot parse version 52 byte code. This is caused by library dependencies that have been compiled using Java 8 or above. If you are using the 'java' gradle plugin in a library submodule add targetCompatibility = '1.7' sourceCompatibility = '1.7' to that submodule's build.gradle file.

这似乎是因为 java 1.7 的兼容性,但我不知道如何修复它。 Android Studio 建议将 targetCompatibility = '1.7' sourceCompatibility = '1.7' 添加到该子模块的 build.gradle 但如何将其添加到 gradles 依赖项部分?

【问题讨论】:

    标签: java android build.gradle


    【解决方案1】:

    版本 52 实际上是 Java 8。 该库是在不兼容 Java 7 的情况下编译的,因此如果您的目标是 Java 7 或更低版本,则无法使用它。

    我看到他们的 GitHub 上有一个 open issue 关于它。这可能只是这个版本的问题,因此您可以尝试使用以前的版本,直到他们解决问题为止。

    【讨论】:

    • 嗨,是的,这个问题正是我所问的。我不能用java 7下载并重新编译它吗?或将我的项目划分为子模块之类的东西?
    • 是的,你可以这样做。只要确保它没有任何 Java 8 特性,比如 lambda,否则编译将失败。在这种情况下,您还需要重构代码。但我认为,如果您尝试使用 1.0.0 版而不是 1.0.1 版,它也会起作用。
    【解决方案2】:

    您应该使用VERSION_1_8 而不是VERSION_1_7

    安装JDK 1.8

    你应该添加这个

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    

    仅供参考

    使用前1_8请阅读Use Java 8 Language

    要为您的项目启用 Java 8 语言功能和 Jack,请在您的模块级 build.gradle 文件中输入以下内容:

    android {
      ...
      defaultConfig {
        ...
        jackOptions {
          enabled true
        }
      }
      compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
      }
    }
    

    清理重建运行

    【讨论】:

    • 使用 java 8 有什么缺点吗?我的意思是现在与 java 7 一起工作的其他依赖项是否面临任何问题等?
    • @MajidHojati 还没有遇到任何问题
    猜你喜欢
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多