如何将java 8子项目包含到Android项目中

时间:2016-05-01 19:13:45

标签: android android-gradle

我正在开发一个android项目,其中模型是用java编写的,并且是项目其余部分(视图,控制器)的依赖项,用#34; 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行添加两行 get"在此语言级别不支持Lambda表达式"再次点击红色灯泡,1.7在两行中都变为1.8 重建成功,尝试运行 如上所述得到107个错误,表明我将两者都设置为1.7targetCompatibility设置为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.

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题。

在build.gradle文件中

apply plugin: 'java'
写了

,用

替换了它
allprojects {
apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
}