You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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无法识别。

修复步骤

  1. 锁定Gradle JVM为17
    在IDE的项目Gradle设置中选择JDK 17,同时在项目根目录的gradle.properties中添加(替换为你的JDK 17路径):

    org.gradle.java.home=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
    
  2. 明确指定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"
        }
    }
    
  3. 统一跨平台JVM工具链
    在kotlin代码块中添加工具链配置,确保所有JVM相关目标使用统一的JDK版本:

    kotlin {
        // ... 保留原有target配置 ...
    
        jvmToolchain(17)
    }
    
  4. 检查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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 06:35:40