
Android 项目中 Kotlin 编译任务(jvmTarget=17)与 Java 编译任务(sourceCompatibility=1.7)版本不匹配,导致构建失败;需统一 JVM 目标版本,推荐通过 kotlinOptions.jvmTarget 动态同步 Android 的 compileOptions。
kotlin 与 java jvm 目标版本不一致的解决方案:android 项目中 kotlin 编译任务(jvmtarget=17)与 java 编译任务(sourcecompatibility=1.7)版本不匹配,导致构建失败;需统一 jvm 目标版本,推荐通过 `kotlinoptions.jvmtarget` 动态同步 android 的 `compileoptions`。
在 Android + Kotlin 混合开发中,常见构建错误如下:
Execution failed for task ':info:compileKotlin'. > 'compileJava' task (current target is 1.7) and 'compileKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version.
该错误本质是 Java 字节码兼容性冲突:Kotlin 编译器生成的字节码目标版本(如 JVM 17)高于 Java 编译器设定的版本(如 Java 7),导致链接或运行时异常。Gradle 要求二者必须严格对齐。
✅ 正确解法:在根目录 build.gradle(或 build.gradle.kts)中统一配置 Kotlin 的 jvmTarget,使其自动继承 Android 模块的 compileOptions.sourceCompatibility:
// build.gradle(Groovy)— 放入根项目 build.gradle 中(非 module 级)
subprojects {
afterEvaluate {
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {
if (project.plugins.hasPlugin("com.android.application") ||
project.plugins.hasPlugin("com.android.library")) {
// Android 模块:同步 android.compileOptions.sourceCompatibility
kotlinOptions.jvmTarget = android.compileOptions.sourceCompatibility.toString()
} else {
// 纯 Kotlin 模块:同步 project.sourceCompatibility
kotlinOptions.jvmTarget = sourceCompatibility.toString()
}
}
}
}⚠️ 注意事项:
立即学习“Java免费学习笔记(深入)”;
- ✅ 必须放在 根项目的
build.gradle(即包含subprojects { ... }的文件),而非单个 module 的build.gradle; - ✅ 确保已在
android { ... }块中显式声明了 Java 版本,例如:android { compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = "17" // 此行可保留,但会被上述逻辑覆盖,建议注释或删除以避免冗余 } } - ❌ 不要仅修改 Project Structure 中的 Gradle JDK 或插件版本——这仅影响 Gradle 运行环境,不改变编译输出的字节码目标;
- ? 修改后务必执行
./gradlew --stop清理守护进程,再重新构建(Build > Rebuild Project),避免缓存干扰。
? 补充说明:从 AGP 8.0+ 和 Kotlin 1.8+ 起,Kotlin 插件已支持自动推断 jvmTarget,但若项目含多模块或自定义编译逻辑,仍建议显式统一配置。最终目标是确保 javac 与 kotlinc 输出的 .class 文件兼容同一 JVM 版本,保障 DEX 转换与 ART 运行稳定性。


















