【问题标题】:How to include a java 8 subproject into an Android project如何将 java 8 子项目包含到 Android 项目中
【发布时间】:2016-05-01 19:13:45
【问题描述】:

我正在开发一个 android 项目,其中模型仅用 java 编写,项目其余部分(视图、控制器)的依赖项用“android-java”编写。
我最近从 android studio 1.3 切换到 2.1 并开始在模型中使用 java 8。 只要重建项目不会引发错误,它就可以很好地编译。
(我偶尔会收到“此语言级别不支持 Lambda 表达式”,但这可以通过单击将语言级别设置为 8 的红灯来解决)
现在,当我运行该应用程序时,我收到了大约 40 个类似这样的错误(每个都有另一个类文件):

...while parsing /foo/ba/xy.class
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.

This 问题非常相似,但是我可以指定我的错误来源不包含 android 特定代码(因此在我的 gradle 文件中没有 android-block)。
现在一个明显的选择是添加

targetCompatibility = '1.7'
sourceCompatibility = '1.7'

到该子模块的 build.gradle 文件。
这引出了第一个问题:为什么是sourceCompatibility = '1.7'?我想用 java 8!
但无论如何,我不知道如何将这两行添加到 build.gradle 文件中。有问题的文件如下所示:

apply plugin: 'java'

dependencies {
    testCompile 'junit:junit:4.7'
    testCompile 'org.apache.directory.studio:org.apache.commons.io:2.4'
    testCompile 'org.kie.modules:org-apache-commons-lang3:6.3.0.CR1'
}

尝试 1:将两行直接添加到第 2 行
再次得到“此语言级别不支持 Lambda 表达式”,再次点击红色灯泡,1.7 两行都改为1.8
重建成功,尝试运行。
如上所述得到 107 个错误,建议我将两者都设置为 1.7
targetCompatibility 设置为1.7 并将sourceCompatibility 设置为1.8,因为这看起来合乎逻辑: 得到

Error:Execution failed for task ':xxxxmodel:compileJava'.
> Compilation failed; see the compiler error output for details.

Gradle 窗口说

javacTask: target release 1.7 conflicts with default source release 1.8

但是我找不到编译器错误输出。

尝试2:添加

apply plugin: 'com.android.application'

android {
    targetCompatibility = '1.7'
    sourceCompatibility = '1.7'
}

获取Error:Cause: buildToolsVersion is not specified.

【问题讨论】:

  • Android SDK 无法编译 java 8 代码。就这么简单
  • 请发布您的代码。
  • @cricket_007 我知道我不能在 android 本身中使用 java 8,但是当使用库时,它用什么 java 版本编写并不重要,对吧?
  • 该库是否在 Java 8 中编译很重要。
  • @cricket_007 听到这个消息很难过。我曾假设字节码与版本无关。

标签: android android-gradle-plugin


【解决方案1】:

我也遇到了类似的问题。

在 build.gradle 文件中

apply plugin: 'java'

是写的,只是换成了

allprojects {
apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 2012-12-03
    • 2013-06-06
    • 2017-06-03
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    相关资源
    最近更新 更多