如何在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库,直接在项目的共享模块中封装:
- 在共享模块定义
expect接口:声明你需要用到的第三方库能力,比如:
// shared/src/commonMain/kotlin/com/example/ThirdPartyWrapper.kt expect class ThirdPartyWrapper { fun performCoreAction(): String suspend fun fetchRemoteData(): Result<String> }
- 在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) } } }
- 在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
相关产品推荐
相关产品推荐

