Android Java和Kotlin的目标JVM版本不一致
- 报错信息
- 报错说明
- 错误出现场景
- 当前环境
- 解决方案
- 一、升JDK版本
- 二、降JDK版本
- 查看项目所有的工具链
- JAVA JDK下载方式
- 一、官网
- 二、Android Studio内下载
- 三、[Toolchains for JVM projects (gradle.org)](https://docs.gradle.org/8.0/userguide/toolchains.html#sec:provisioning)
报错信息
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
报错说明
这个错误消息表明在编译过程中,Java和Kotlin的目标JVM版本不一致。具体来说,Java代码的目标版本是1.8,而Kotlin代码的目标版本是17。为了确保一致性,需要将两个目标JVM版本设置为相同的Java版本。
错误出现场景
升级Gradle8.0,并且用到了Kapt出现
当前环境
Gradle 版本:8.0
APG 版本:8.1.2
kotlin 插件版本:1.8.10
解决方案
一、升JDK版本
build.gradle(:app)
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'kotlin-kapt'
}
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = '17'
}
}
将JAVA和KOTLIN的JDK版本指定到高版本解决
二、降JDK版本
考虑到兼容性问题,防止开发时使用到JAVA17新特性,运行到不支持JAVA17的手机上
build.gradle(:app)
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'kotlin-kapt'
}
android {
...
compileOptions {
// 指定Java编译器使用的源代码版本,这里设置为Java 1.8。这意味着编译器将把代码视为Java 1.8版本的代码。
sourceCompatibility JavaVersion.VERSION_1_8
// 指定生成的字节码版本,这里设置为Java 1.8。这意味着编译器将生成可以在支持Java 1.8的JVM上运行的字节码。
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
// 指定Kotlin编译器生成的字节码版本,这里设置为1.8。这意味着Kotlin编译器将生成可以在支持Java 1.8的JVM上运行的字节码。
jvmTarget = '1.8'
}
kotlin {
// 配置Kotlin编译器使用的JDK版本,这里指定为8。这是指定Kotlin编译器使用JDK 8进行编译。
jvmToolchain(8)
}
}
在gradle.properties文件中添加以下属性
# java install path
org.gradle.java.installations.paths=E\:\\Android\\.gradle\\jdks\\corretto-1.8.0_422
E:\Android\.gradle\jdks\corretto-1.8.0_422 改成自己实际的低版本Java路径
详情可以查阅Toolchains for JVM projects (gradle.org),里面详细说明了Toolchain的配置。
查看项目所有的工具链
./gradlew -q javaToolchains
输出结果
Options
| Auto-detection: Enabled
| Auto-download: EnabledAmazon Corretto JDK 1.8.0_422-b05
| Location: E:\Android.gradle\jdks\corretto-1.8.0_422
| Language Version: 8
| Vendor: Amazon Corretto
| Architecture: amd64
| Is JDK: true
| Detected by: system property ‘org.gradle.java.installations.paths’JetBrains s.r.o. JDK 17.0.6+0-b2043.56-10027231
| Location: E:\Android\Android Studio\jbr
| Language Version: 17
| Vendor: JetBrains s.r.o.
| Architecture: amd64
| Is JDK: true
| Detected by: Current JVM
JAVA JDK下载方式
一、官网
- Java Downloads | Oracle
- Java | Oracle
二、Android Studio内下载
File -> Project Structure -> SDK Location -> Gradle Settings -> Gradle project -> Gradle JDK -> Download JDK