当试图通过IntelliJ运行示例CorDapp (GitHub CorDapp)时,我收到以下错误:

不能将使用JVM目标1.8构建的字节码内联为当前的字节码 使用JVM目标1.6构建

如何修改IntelliJ设置,使所有字节码都使用相同的JVM目标构建?


当前回答

设置sourceCompatibility = javaverse。VERSION_1_8启用了糖化,但它目前无法糖化Kotlin编译器使用的所有Java 8特性。

修复-设置kotlinOptions。jvmTarget到javaverse。应用模块Gradle中的VERSION_1_8会修复这个问题。

使用Java 8语言特性: https://developer.android.com/studio/write/java8-support

android {
  ...
  // Configure only for each module that uses Java 8
  // language features (either in its source code or
  // through dependencies).
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
  // For Kotlin projects
  kotlinOptions {
    jvmTarget = "1.8"
  }
}

其他回答

您可能需要同时设置compileKotlin和compileTestKotlin。 这适用于gradle 6.5.1。

compileKotlin {
    kotlinOptions {
        languageVersion = "1.2"
        apiVersion = "1.2"
        jvmTarget = "1.8"
        javaParameters = true   // Useful for reflection.
    }
}

compileTestKotlin {
    kotlinOptions {
        languageVersion = "1.2"
        apiVersion = "1.2"
        jvmTarget = "1.8"
        javaParameters = true   // Useful for reflection.
    }
}

对于最近版本的Android Studio,如果仅仅更改Kotlin Target VM版本不工作。

文件➞项目结构➞模块(app):将“源兼容性”和“目标兼容性”设置为“1.8 (Java 8)”。按“OK”并将项目与Gradle同步。

在我的情况下,这段代码没有工作,直到我把应用插件:“kotlin-android”从底部移动到顶部。

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

我做了所有的步骤,但没有成功,问题是

implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.4.32'

当我更新到

implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.5.30'

显示了这个问题,当我回到

implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.4.32'

问题解决了

当其他解决方案不适合你时(在编译器设置上更改JVM版本并将jvmTarget添加到build.gradle中),因为你的.iml文件试图强制它们的配置,你可以从项目设置中更改目标平台。

打开文件>项目结构 进入项目设置下的Facets 如果它是空的,然后点击小的+按钮 单击您的Kotlin模块/模块 将目标平台更改为JVM 1.8(同时最好检查使用项目设置选项)