解决Android Studio中JVM目标版本不一致的编译错误
问题描述
在Android Studio多模块项目中执行Gradle同步时,常出现以下错误:
log
Execution failed for task ':buildSrc:compileKotlin'.
Inconsistent JVM-target compatibility detected for tasks 'compileJava' (21) and 'compileKotlin' (1.8).
问题本质:该错误表明Java和Kotlin编译器使用了不同的JVM目标版本:
compileJava
任务使用 JVM 21compileKotlin
任务使用 JVM 1.8
这种版本不匹配会导致编译失败,常见于:
- 升级Android Studio或JDK后
- 多模块项目配置不一致
- Kotlin插件与库版本不兼容
解决方案
通过统一Java和Kotlin的JVM目标版本来解决此问题。以下是多种有效方法:
方法1:在build.gradle中统一JVM目标版本(推荐)
修改模块级别的build.gradle
或build.gradle.kts
文件:
kotlin
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}
kotlinOptions {
jvmTarget = "21" // 需与Java版本一致
}
}
groovy
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_21
targetCompatibility JavaVersion.VERSION_21
}
kotlinOptions {
jvmTarget = '21' // 需与Java版本一致
}
}
关键点:
sourceCompatibility/targetCompatibility
必须等于jvmTarget
- 常用版本:
21
、17
、11
或1.8
(根据项目需求)
方法2:修复buildSrc模块配置
若项目包含buildSrc
目录(自定义Gradle插件),需单独配置其Kotlin版本:
kotlin
// buildSrc/build.gradle.kts
plugins {
`kotlin-dsl`
}
kotlin {
jvmToolchain(21) // 设置与主模块一致的版本
}
方法3:更新Kotlin版本并同步配置
当JDK升级到21但Kotlin仍指向旧版本时:
在根项目的
build.gradle
中升级Kotlin:kotlinbuildscript { ext.kotlin_version = "1.9.24" // 使用支持JVM 21的版本 }
同步调整所有模块的
jvmTarget
为21
方法4:配置KMP项目
跨平台项目需显式指定Android目标的JVM版本:
kotlin
kotlin {
androidTarget {
compilations.all {
kotlinOptions {
jvmTarget = "17" // 与Java配置一致
}
}
}
// 其他平台配置...
}
方法5:修改IDE的Gradle JDK设置
若IDE缓存导致配置不生效:
- 关闭Android Studio
- 删除项目目录中的
.idea
文件夹 - 重新打开项目
- 进入设置:
文件 → 设置 → 构建、执行、部署 → Gradle
- 将
Gradle JDK
改为与项目一致的版本
排查技巧
检查版本冲突
若出现类似警告:
Plugin version (1.9.22) is not the same as library version (1.8.0)
- 确认所有模块的
kotlin-stdlib
版本一致 - 在主
build.gradle
中统一定义Kotlin版本:kotlinext { kotlinVersion = "1.9.22" // 项目统一版本 }
多模块项目建议
- 在根项目的
build.gradle
中定义全局变量:kotlinext { jvmVersion = JavaVersion.VERSION_21 }
- 各子模块引用此变量确保一致
⚠️ 避免混合使用JVM版本
错误组合 正确组合 Java 21 + Kotlin 1.8 Java 21 + Kotlin 21 Java 17 + Kotlin 11 Java 17 + Kotlin 17
通过以上步骤统一JVM目标版本,即可解决兼容性错误并成功构建项目。