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应用程序

libgdx android 启动失败

在 Android 上使用来自 libGDX 的 SQLite

无法使用 LibGDX 在 Android 上播放 2 个音乐实例

Android应用libGDX引擎系列(二)-libGDX 入门精要

如何在 libGDX for Android 中使用 MultiDexApplication