我正在开发一个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.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.
答案 0 :(得分:0)
我遇到了类似的问题。
在build.gradle文件中
apply plugin: 'java'
写了,用
替换了它allprojects {
apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
}