libGDX 设置允许我使用在 Android 中崩溃的 Java 8
Posted
技术标签:
【中文标题】libGDX 设置允许我使用在 Android 中崩溃的 Java 8【英文标题】:libGDX setup allows me to use Java 8 which crashes in Android 【发布时间】:2016-03-12 18:28:14 【问题描述】:我是 java/android 新手,所以我希望这是一个很容易解决的问题。
我使用libGDX's setup 创建了一个项目,然后将其导入 Android Studio。我不知道Supplier
接口仅适用于Java 8,并在核心模块中使用它,据我了解,它编译成一个由所有android/html/desktop/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 Studio 显示 sourceCompatibility = 1.6
行变灰并显示“未使用分配”。所以这可能是问题的一部分。
我的core.iml
文件也包含这一行:
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6" inherit-compiler-output="false">
另外,这是根 build.gradle
文件中的 core
部分:
project(":core")
apply plugin: "java"
dependencies
compile "com.badlogicgames.gdx:gdx:$gdxVersion"
那么,我应该改变什么来阻止它让我在我的核心项目中使用 Java 8?
【问题讨论】:
【参考方案1】:我认为您需要在 gradle 中添加 targetCompatibility
属性和 sourceCompatibility
以定位您的 java
版本。
allprojects
apply plugin: 'java'
sourceCompatibility = 1.6
targetCompatibility = 1.6
还需要检查gradle.properties
文件中的java
默认路径与您的项目使用的版本。
您需要查看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 的信息。
【讨论】:
以上是关于libGDX 设置允许我使用在 Android 中崩溃的 Java 8的主要内容,如果未能解决你的问题,请参考以下文章
如何在Android Studio中调试“桌面”libgdx应用程序
在 Android 上使用来自 libGDX 的 SQLite
无法使用 LibGDX 在 Android 上播放 2 个音乐实例