KMM多平台库发布问题:commonMain无法访问库中类
解决KMM库在commonMain无法访问的问题
问题根源
你当前手动指定Android的aar作为发布产物,这只是Android平台专属的二进制文件,缺少KMM多平台库必须的**元数据(metadata)**和其他平台产物,导致消费项目只能在androidMain中识别该库,commonMain无法感知到它的跨平台属性。
修复步骤
1. 修改库的根目录build.gradle.kts
删掉手动创建MavenPublication的afterEvaluate块——KMM的kotlin-multiplatform插件会自动生成多平台所需的所有发布产物(包括metadata、aar、iOS框架等),不需要手动指定aar路径。修改后的配置如下:
plugins { id("com.android.library").version("8.0.2").apply(false) kotlin("multiplatform").version("1.9.24").apply(false) id("maven-publish") } buildscript { repositories { google() mavenCentral() mavenLocal() } } allprojects { repositories { google() mavenCentral() mavenLocal() maven { url = uri("https://jitpack.io") } } } tasks.register("clean", Delete::class) { delete(rootProject.buildDir) }
2. 修改库的shared模块build.gradle.kts
- 删掉重复的
androidTarget()调用(重复配置会导致冲突) - 无需手动添加
artifact,让插件自动处理所有发布产物 - 可在模块内统一配置发布的groupId/version(也可放在
gradle.properties中)
修改后的配置:
plugins { kotlin("multiplatform") kotlin("native.cocoapods") id("com.android.library") id("maven-publish") } @OptIn(org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi::class) kotlin { applyDefaultHierarchyTemplate() androidTarget { publishLibraryVariants("release", "debug") compilations.all { kotlinOptions { jvmTarget = "17" } } } iosX64() iosArm64() iosSimulatorArm64() cocoapods { summary = "Some description for the Shared Module" homepage = "Link to the Shared Module homepage" version = "1.0" ios.deploymentTarget = "14.1" framework { baseName = "sharedMpTest" } } sourceSets { val commonMain by getting { dependencies { //put your multiplatform dependencies here } } } // 统一配置发布信息 publishing { publications { withType<MavenPublication> { groupId = "com.ag.secondTry" artifactId = "test-lib-second" version = "1.0.13" } } } } android { namespace = "com.ag.kmmtestlib" compileSdk = 33 defaultConfig { minSdk = 21 } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } }
3. 重新发布库到mavenLocal
在库项目的终端执行发布命令:
# macOS/Linux ./gradlew publishToMavenLocal # Windows gradlew.bat publishToMavenLocal
4. 在消费项目的shared模块添加依赖
打开消费项目的shared模块build.gradle.kts,在commonMain的依赖块中添加库引用:
sourceSets { val commonMain by getting { dependencies { implementation("com.ag.secondTry:test-lib-second:1.0.13") } } }
完成以上配置后,消费项目的commonMain就能正常访问TemperatureConverter类了——此时库发布了完整的多平台元数据和各平台产物,Gradle可正确识别它的跨平台属性。
内容的提问来源于stack exchange,提问作者Jack The Healer
相关产品推荐
相关产品推荐

