Android AGP 8 + Gradle 8 + Kotlin 1.8 导致 Kapt 出现错误

Rum*_*raK 16 android gradle kotlin kapt

我刚刚更新到Android Studio Flamingo | 2022.2.1. 现在我得到这个错误:

Execution failed for task ':app:kaptGenerateStubsDebugKotlin'.
> 'compileDebugJavaWithJavac' task (current target is 1.8) and 'kaptGenerateStubsDebugKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version.
  Consider using JVM toolchain: https://kotl.in/gradle/jvm/toolchain
Run Code Online (Sandbox Code Playgroud)

我正在使用 AS 包含的 Kotlin,但这1.8.0与AGP和 Gradle一起工作得很好- 它只与来自 AS Flamingo 的 Gradle 和 AGP 更新有关。还:7.4.27.5

  • 如果我将 Kotlin 降级到1.7.20它又可以工作了
  • 如果我更新 Kotlin 会1.8.20出现上面的错误

我确实有编译选项:

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
Run Code Online (Sandbox Code Playgroud)

我还尝试了示例 AS 应用程序,但它们有 Kotlin 1.7.20。它们1.8.0也可以与 Kotlin 一起使用 -除非您引入kapt依赖项!(例如匕首)

那么什么组合应该有效(包括 kapt)并且具有 Android Studio 的最新稳定推荐版本?

  • Android Studio 版本?
  • AGP版本?
  • 摇篮版本?
  • 科特林版本?

请不要未经测试的答案。我知道它“应该”有效,但事实并非如此。

Bla*_*der 13

最新的 Android Gradle 插件与 Kotlin kapt 之间存在兼容性问题。因此,jvmTarget您在 Android 配置中指定的 将会在 Kotlin 编译任务上设置,但不会在 kapt 任务上设置,默认情况下,kapt 任务使用工具链版本(当前为 JDK 17)。

作为解决方法,请jvmTarget手动设置 kapt 任务(在您的情况下,目标是 Java 1.8):

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KaptGenerateStubs).configureEach {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 您有最新的 Android Gradle 插件和 Kotlin kapt 之间相关兼容性问题的链接吗? (2认同)

yuf*_* wu 6

我认为使用 jvmToolchain 作为错误信息可以解决这个问题:

考虑使用 JVM 工具链:https://kotl.in/gradle/jvm/toolchain

使用以下版本和配置,我的项目运行良好。

  • Android Studio 火烈鸟 2022.2.1
  • AGP版本8.0.0
  • 摇篮版本8.0
  • 科特林版本 1.8.0

build.gradle 中的配置:

kotlin {
    jvmToolchain(8)
}


android {

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = '1.8'
    }
}
Run Code Online (Sandbox Code Playgroud)

如果想了解更多详细信息,您可以在以下两个链接中查看相关的官方文档和说明:

https://kotlinlang.org/docs/gradle-configure-project.html#gradle-java-toolchains-support

无法设置 kapt jvm 目标版本:

https://youtrack.jetbrains.com/issue/KT-55947

  • [文档](https://kotlinlang.org/docs/gradle-configure-project.html#gradle-java-toolchains-support)建议不要在 AGP 8.1.0-alpha09 之前使用 JVM 工具链。 (3认同)