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

添加KMM共享模块时Gradle同步失败的解决办法

解决KMM共享模块同步错误

问题情况

在现有Android项目中通过Android Studio的KMM插件添加共享模块后,项目同步时出现以下编译错误:

e: /shared/build.gradle.kts:6:8: An annotation argument must be a compile-time constant
e: /shared/build.gradle.kts:6:36: Unresolved reference: ExperimentalKotlinGradlePluginApi
e: /shared/build.gradle.kts:8:5: Unresolved reference: targetHierarchy

FAILURE: Build failed with an exception.

* Where:
Build file '/shared/build.gradle.kts' line: 6

* What went wrong:
Script compilation errors:

  Line 6: @OptIn(org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi::class)
                 ^ An annotation argument must be a compile-time constant

  Line 6: @OptIn(org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi::class)
                                             ^ Unresolved reference: ExperimentalKotlinGradlePluginApi

  Line 8:     targetHierarchy.default()
              ^ Unresolved reference: targetHierarchy

共享模块的build.gradle.kts内容如下:

plugins {
    kotlin("multiplatform")
    id("com.android.library")
}

@OptIn(org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi::class)
kotlin {
    targetHierarchy.default()

    android {
        compilations.all {
            kotlinOptions {
                jvmTarget = "1.8"
            }
        }
    }
    
    listOf(
        iosX64(),
        iosArm64(),
        iosSimulatorArm64()
    ).forEach {
        it.binaries.framework {
            baseName = "shared"
        }
    }

    sourceSets {
        val commonMain by getting {
            dependencies {
                //put your multiplatform dependencies here
            }
        }
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test"))
            }
        }
    }
}

android {
    namespace = "com.example.shared"
    compileSdk = 33
    defaultConfig {
        minSdk = 23
    }
}

解决方案

这些错误的核心原因是当前使用的Kotlin Gradle插件版本过低,ExperimentalKotlinGradlePluginApi注解和targetHierarchy特性仅在Kotlin 1.9.0及以上版本中提供。有两种解决方式:

方式一:升级Kotlin Gradle插件版本

  1. 打开项目根目录的build.gradle.kts(或build.gradle)文件,找到Kotlin插件的版本配置,将版本升级到1.9.0及以上,例如:
plugins {
    id("com.android.application") version "8.1.0" apply false
    id("org.jetbrains.kotlin.android") version "1.9.20" apply false
    id("org.jetbrains.kotlin.multiplatform") version "1.9.20" apply false
}
  1. 同步项目,原有的build.gradle.kts代码无需修改即可正常工作。

方式二:不升级插件,手动适配旧版本

如果暂时无法升级Kotlin版本,可以移除依赖新特性的代码,手动配置源集关联:

plugins {
    kotlin("multiplatform")
    id("com.android.library")
}

kotlin {
    android {
        compilations.all {
            kotlinOptions {
                jvmTarget = "1.8"
            }
        }
    }
    
    listOf(
        iosX64(),
        iosArm64(),
        iosSimulatorArm64()
    ).forEach {
        it.binaries.framework {
            baseName = "shared"
        }
    }

    sourceSets {
        val commonMain by getting
        val commonTest by getting
        
        // 手动关联各平台源集到公共源集
        val androidMain by getting {
            dependsOn(commonMain)
        }
        val androidUnitTest by getting {
            dependsOn(commonTest)
        }
        val iosX64Main by getting {
            dependsOn(commonMain)
        }
        val iosX64Test by getting {
            dependsOn(commonTest)
        }
        val iosArm64Main by getting {
            dependsOn(commonMain)
        }
        val iosArm64Test by getting {
            dependsOn(commonTest)
        }
        val iosSimulatorArm64Main by getting {
            dependsOn(commonMain)
        }
        val iosSimulatorArm64Test by getting {
            dependsOn(commonTest)
        }
    }
}

android {
    namespace = "com.example.shared"
    compileSdk = 33
    defaultConfig {
        minSdk = 23
    }
}
  1. 同步项目后错误即可消除。

内容的提问来源于stack exchange,提问作者user3578386

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:01:05