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

如何在Kotlin Multiplatform(KMM)项目中集成Android与iOS专属SDK?

集成非KMM生态第三方库的可行方案

不需要强制创建独立KMM库,根据你的需求可以选择以下几种方式:

1. 直接在各平台模块独立集成(快速上手)

这是最简单的方式,完全按照原生项目的集成流程操作:

  • Android端:在androidApp模块的build.gradle.kts中,像普通Android项目一样添加第三方SDK的依赖(Maven仓库、本地AAR/JAR都可以),然后直接在Android原生代码中调用SDK接口。
  • iOS端:在Xcode的iosApp项目里,通过CocoaPods添加依赖,或者手动导入Framework/XCFramework,之后在Swift/OC代码里直接调用。

缺点是业务逻辑需要分别写在两个平台,无法在KMM共享层复用代码。

2. 用KMM的expect/actual机制封装(推荐,兼顾复用)

这是KMM处理平台专属依赖的标准方式,不需要额外创建KMM库,直接在项目的共享模块中封装:

  1. 在共享模块定义expect接口:声明你需要用到的第三方库能力,比如:
// shared/src/commonMain/kotlin/com/example/ThirdPartyWrapper.kt
expect class ThirdPartyWrapper {
    fun performCoreAction(): String
    suspend fun fetchRemoteData(): Result<String>
}
  1. 在Android端实现actual类:在共享模块的Android源集里,调用Android版SDK完成具体实现:
// shared/src/androidMain/kotlin/com/example/ThirdPartyWrapper.kt
actual class ThirdPartyWrapper {
    actual fun performCoreAction(): String {
        // 直接调用Android SDK的API
        return AndroidThirdPartySDK.getInstance().doAction()
    }

    actual suspend fun fetchRemoteData(): Result<String> {
        return try {
            val data = withContext(Dispatchers.IO) {
                AndroidThirdPartySDK.fetchData()
            }
            Result.success(data)
        } catch (e: Exception) {
            Result.failure(e)
        }
    }
}
  1. 在iOS端实现actual类:在共享模块的iOS源集里,调用iOS版SDK(支持直接调用Swift/OC的API):
// shared/src/iosMain/kotlin/com/example/ThirdPartyWrapper.kt
actual class ThirdPartyWrapper {
    actual fun performCoreAction(): String {
        // 调用iOS SDK的API,Kotlin可以直接交互Swift/OC代码
        return IOSThirdPartySDK.shared.doAction()
    }

    actual suspend fun fetchRemoteData(): Result<String> {
        return try {
            val data = suspendCoroutine { cont ->
                IOSThirdPartySDK.fetchData { result, error ->
                    if (error != null) {
                        cont.resumeWithException(error)
                    } else {
                        cont.resume(Result.success(result ?: ""))
                    }
                }
            }
            data
        } catch (e: Exception) {
            Result.failure(e)
        }
    }
}

之后你就能在共享模块的业务逻辑中直接使用ThirdPartyWrapper,实现跨平台代码复用。

3. 封装成独立KMM库(多项目复用场景)

如果这个第三方库需要在多个KMM项目中使用,可以把上述的expect/actual封装逻辑抽成独立的KMM库:

  • 创建单独的KMM库项目,完成平台专属的SDK封装
  • 将库发布到本地Maven仓库或私有仓库
  • 在需要用到的KMM项目中,添加该库的依赖即可

这种方式适合团队内多项目复用的场景,避免重复封装。

额外注意事项

  • Android端:如果共享模块的Android源集需要依赖第三方SDK,要在shared/build.gradle.kts的sourceSets.androidMain.dependencies中添加依赖声明。
  • iOS端:如果使用CocoaPods管理SDK,可以在shared/build.gradle.kts的cocoapods块中声明依赖,Xcode会自动同步:
cocoapods {
    ios.deploymentTarget = "14.0"
    pod("IOSThirdPartySDK") {
        version = "1.2.0"
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 11:52:28