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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:05:01