我是java / android的新手,所以我希望这很容易解决。
我已使用libGDX's setup创建项目,然后将其导入Android Studio。我不知道Supplier
接口只适用于Java 8,并在核心模块中使用它,据我所知,它编译成一个由所有android / html /共享的库桌面/ ios版本的游戏。桌面版本运行正常(我安装了Java 8),但我的Android应用程序崩溃时出现NoClassDefFoundError
错误(顺便说一句,错误消息显示我编写的类的名称,而不是Supplier
,但是一旦我删除了对Supplier
的每个引用,错误就消失了,当我添加它们时它就回来了,所以显然错误信息并没有显示实际的问题类。)
如果我尝试在我的Android模块中使用Supplier
,它甚至不允许我导入该类,因此它知道它不支持该Java版本,但它“#”;我很乐意让我在没有任何警告的情况下在核心模块中使用它。我确定删除对Supplier
的引用将解决问题,但如果我无意中使用任何Java 8功能,此修复可能会导致运行时错误,因此不是解决问题的好方法。
我不知道项目在哪里设置使用Java 8,似乎有一堆.gradle,.xml和.iml文件显然都与配置有关。这是核心模块中的build.gradle
文件:
apply plugin: "java"
sourceCompatibility = 1.6
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
sourceSets.main.java.srcDirs = [ "src/" ]
eclipse.project {
name = appName + "-core"
}
Android工作室显示sourceCompatibility = 1.6
行显示为灰色并显示"未使用分配"当我将鼠标悬停在它上面时。所以这可能是问题的一部分。
我的core.iml
文件也包含此行:
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6" inherit-compiler-output="false">
此外,这是根core
文件中的build.gradle
部分:
project(":core") {
apply plugin: "java"
dependencies {
compile "com.badlogicgames.gdx:gdx:$gdxVersion"
}
}
那么,我应该改变什么来阻止它让我在我的核心项目中使用Java 8?
答案 0 :(得分:1)
我认为您需要在gradle中添加targetCompatibility
属性sourceCompatibility
以定位java
版本。
allprojects {
apply plugin: 'java'
sourceCompatibility = 1.6
targetCompatibility = 1.6
}
还需要检查java
文件中的gradle.properties
默认路径以及您的项目使用的版本。
您需要检查Can’t build Java 1.8 even with proper Java version in use和Gradle finds wrong JAVA_HOME even though it's correctly set,以便更好地了解set java
编译版本gradle。