Android AGP 8 + Gradle 8 +Kotlin1.8在Kapt中导致错误

jgwigjjp  于 2023-04-21  发布在  Android
关注(0)|答案(3)|浏览(466)

我刚刚更新到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

我使用的是AS包含的Kotlin,它是1.8.0,但这个在AGP 7.4.2和Gradle 7.5上运行得很好-它只在来自AS Flamingo的Gradle和AGP更新时中断。另外:

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

我有编译选项:

compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }

我也尝试了示例AS应用程序,但它们有Kotlin 1.7.20。它们也可以使用Kotlin 1.8.0-除非您在依赖项中引入kapt!(例如Dagger)
那么什么是应该工作的组合-包括kapt -并具有Android Studio最新的稳定推荐版本?

  • Android Studio版本?
  • AGP版本?
  • Gradle版本?
  • Kotlin版本?

请不要未经测试的答案。我知道它“应该”工作,但它没有。

oknrviil

oknrviil1#

最新的Android Gradle插件和Kotlinkapt之间存在兼容性问题。因此,您在Android配置中指定的jvmTarget将在Kotlin编译任务上设置,但不会在kapt任务上设置,默认情况下,kapt任务使用工具链版本(当前为JDK 17)。
作为一种解决方法,手动在kapt任务上设置jvmTarget(在您的情况下,目标是Java 1.8):

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KaptGenerateStubs).configureEach {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}
bqujaahr

bqujaahr2#

我在我的项目中使用以下版本,使用这些版本构建项目没有问题:

  • Android Studio Flamingo 2022.2.1
  • AGP版本8.0.0
  • Gradle版本8.0
  • Kotlin版本1.8.0

若要消除此错误,请将代码更改为以下内容:

android {
    ...
    compileOptions {
        sourceCompatibilityJavaVersion.VERSION_17
        targetCompatibilityJavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget = '17'
    }
    ...
}

在这里,您可以看到Gradle 8.0.0兼容性表,其中包含项目中应使用的JDK版本

4uqofj5v

4uqofj5v3#

我认为使用jvmToolchain作为错误信息可以解决这个问题:
考虑使用JVM工具链:https://kotl.in/gradle/jvm/toolchain
使用以下版本和配置,我的项目运行良好。

  • Android Studio Flamingo 2022.2.1
  • AGP版本8.0.0
  • Gradle 8.0版
  • Kotlin版本1.8.0

build.gradle中的配置:

kotlin {
    jvmToolchain(8)
}

android {

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = '1.8'
    }
}

如果想了解更多详情,您可以在以下两个链接中查看相关官方文档和说明:
https://kotlinlang.org/docs/gradle-configure-project.html#gradle-java-toolchains-support
无法设置kapt jvm目标版本:
https://youtrack.jetbrains.com/issue/KT-55947

相关问题