解决 Android Studio 编译错误:JVM 目标版本不匹配
问题核心
当 Kotlin 的kaptGenerateStubsDebugKotlin
任务 (Java 17) 与 Java 编译任务compileDebugJavaWithJavac
(Java 1.8) 的 JVM 目标版本不一致时,会导致以下构建失败:'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.
根本原因
当 Kotlin 注解处理 (kapt) 使用更高 Java 版本 (JDK 17) 时,而普通 Java 代码使用较低版本 (JDK 1.8),两者因 JVM 字节码版本不兼容而冲突。常见于:
- Android Gradle 插件 (AGP) 版本与 Kotlin 插件不匹配
- 多模块项目中各模块 JDK 版本配置不一致
- 过时的
sourceCompatibility
/targetCompatibility
配置
解决方案
以下任选一种方法即可解决,推荐使用解决方案1或2。
方案1:统一模块级配置
在模块的 build.gradle
(通常位于 app/build.gradle
) 中统一设置 JVM 目标版本:
android {
compileOptions {
// 二选一 ↓↓↓
sourceCompatibility JavaVersion.VERSION_17 // 推荐使用 JDK 17
targetCompatibility JavaVersion.VERSION_17
// 或使用旧版本(如需兼容)
// sourceCompatibility JavaVersion.VERSION_1_8
// targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
// 与 compileOptions 保持一致!
jvmTarget = "17" // 对应 JavaVersion.VERSION_17
// jvmTarget = "1.8" // 对应 JavaVersion.VERSION_1_8
}
}
✅ 优点:简单直接,适用于单模块项目
⚠️ 注意:确保所有模块配置一致
方案2:全局配置(多模块项目)
在根项目的 build.gradle
中统一配置所有子模块:
subprojects {
afterEvaluate { project ->
if (project.findProperty('android')) { // 仅限 Android 模块
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
}
// 配置 Kotlin 编译选项
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
kotlinOptions.jvmTarget = "17"
}
}
}
}
✅ 优点:一次性统一所有模块配置
🛠 适用场景:包含多个库模块的中大型项目
方案3:使用 JVM 工具链(推荐新项目)
在 build.gradle
中启用 JDK 工具链管理:
kotlin {
jvmToolchain(17) // 设置全局 JVM 版本
// 使用 Android 扩展时
androidTarget {
compilations.all {
compileTaskProvider.configure {
compilerOptions.jvmTarget.set(JvmTarget.JVM_17)
}
}
}
}
✅ 优点:Gradle 自动管理 JDK,避免手动配置冲突
⚠️ 前提:
- AGP ≥ 8.1.0
- Kotlin ≥ 1.8.20
验证修复
修改后执行以下操作确保生效:
- 清理项目:Build > Clean Project
- 同步 Gradle:点击工具栏 Sync Project 图标
- 重新构建:Build > Rebuild Project
确认
compileDebugJavaWithJavac
和kaptGenerateStubsDebugKotlin
的日志中显示相同 JVM 版本:[KOTLIN] JVM target: 17 [JAVA] sourceCompatibility: 17, targetCompatibility: 17
常见陷阱
依赖库版本冲突
检查第三方库(如 Hilt、Room)是否要求特定 JDK 版本:gradle// 正确示例:Dagger 兼容配置 implementation 'com.google.dagger:dagger:2.48.1' kapt 'com.google.dagger:dagger-compiler:2.48.1'
Android Studio 内部 JDK 设置
确认 IDE 使用一致 JDK:File > Project Structure > SDK Location > JDK LocationKotlin 插件过时
在根build.gradle
升级 Kotlin 插件:groovyplugins { id 'org.jetbrains.kotlin.android' version '1.9.20' apply false }
终极解决手段
如果上述方法无效:
- 备份
settings.gradle
和build.gradle
- 删除项目中的
.idea
、.gradle
和build
目录 - 执行:bash
./gradlew cleanBuildCache ./gradlew --stop
- 在 Android Studio 中重新导入项目
💡 预防建议:新项目应从一开始统一使用 JDK 17(Android Studio Giraffe+ 默认支持)
通过统一 JVM 目标版本,即可解决该兼容性构建错误。