Kotlin Multiplatform跨平台库Gradle JVM版本兼容问题求助
我要编译一个支持iOS和Android的跨平台Kotlin库,使用以下build.gradle.kts配置。移除androidTarget及com.android.library插件后,iOS可正常编译,但添加Android支持后出现版本兼容问题:
- 使用Gradle JVM 17时,报错:
FAILURE: Build failed with an exception. Could not determine the dependencies of task ':compileDebugKotlinAndroid'. > Unknown Kotlin JVM target: 21
- 使用Gradle JVM 15时,Gradle无法同步,报错:
Gradle JVM version incompatible. This project is configured to use an older Gradle JVM that supports up to version 15 but the current AGP requires a Gradle JVM that supports version 17
配置代码如下:
plugins { kotlin("multiplatform") version "1.9.10" id("com.android.library") version "8.1.2" } group = "com.example" version = "1.0" repositories { google() mavenCentral() gradlePluginPortal() } kotlin { androidTarget { publishLibraryVariants("release") } iosX64 { binaries { framework { baseName = "test" linkerOpts += "-ld64" } } } iosArm64 { binaries { framework { baseName = "test" linkerOpts += "-ld64" } } } val hostOs = System.getProperty("os.name") val isArm64 = System.getProperty("os.arch") == "aarch64" val isMingwX64 = hostOs.startsWith("Windows") val nativeTarget = when { hostOs == "Mac OS X" && isArm64 -> macosArm64("native") hostOs == "Mac OS X" && !isArm64 -> macosX64("native") hostOs == "Linux" && isArm64 -> linuxArm64("native") hostOs == "Linux" && !isArm64 -> linuxX64("native") isMingwX64 -> mingwX64("native") else -> throw GradleException("Host OS is not supported in Kotlin/Native.") } sourceSets { val commonMain by getting } } android { namespace = "com.example.myapp" compileSdk = 33 }
核心问题
- AGP 8.1.2强制要求使用Gradle JVM 17,所以Gradle JVM 15完全不可用,必须切换到17。
- Kotlin 1.9.10不支持JVM target 21,但AGP 8.x默认会根据编译SDK自动设置较高的JVM target,导致Kotlin无法识别。
修复步骤
锁定Gradle JVM为17
在IDE的项目Gradle设置中选择JDK 17,同时在项目根目录的gradle.properties中添加(替换为你的JDK 17路径):org.gradle.java.home=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home明确指定Android的JVM目标版本
在android代码块中添加编译配置,将Java和Kotlin的目标版本统一为17(Kotlin 1.9.10完全支持该版本):android { namespace = "com.example.myapp" compileSdk = 33 defaultConfig { minSdk = 21 // 根据你的业务需求调整最低SDK版本 targetSdk = 33 } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = "17" } }统一跨平台JVM工具链
在kotlin代码块中添加工具链配置,确保所有JVM相关目标使用统一的JDK版本:kotlin { // ... 保留原有target配置 ... jvmToolchain(17) }检查Gradle版本匹配
AGP 8.1.2建议搭配Gradle 8.0~8.2版本,可修改gradle/wrapper/gradle-wrapper.properties中的distributionUrl:distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
完成以上配置后,同步Gradle并重新编译,两个报错即可解决。
内容的提问来源于stack exchange,提问作者CptLeChuck70

