Kotlin Multiplatform:Android 与 iOS 共享业务层
·
Kotlin Multiplatform:Android 与 iOS 共享业务层
Kotlin Multiplatform(KMP)允许开发者用 Kotlin 编写核心业务逻辑,在 Android 和 iOS 平台复用代码,显著提升开发效率。以下是实现方案:
1. KMP 核心优势
- 代码复用率:业务逻辑层复用率可达 70%+
- 原生性能:iOS 端编译为 Native 代码(通过 Kotlin/Native),Android 端直接 JVM 运行
- 平台互操作性:通过
expect/actual机制处理平台差异
2. 项目结构设计
shared/ # 共享模块
├── src/
│ ├── commonMain/ # 跨平台公共代码
│ ├── androidMain/ # Android 专属实现
│ └── iosMain/ # iOS 专属实现
app-android/ # Android UI 层
app-ios/ # iOS UI 层 (Swift/ObjC)
3. 共享业务层实现
(1) 定义公共接口
在 commonMain 中声明核心逻辑:
// 用户认证服务接口
interface AuthService {
suspend fun login(email: String, password: String): User
fun logout()
}
// 数据模型 (可序列化)
@Serializable
data class User(val id: String, val name: String)
(2) 平台特定实现
- Android (
androidMain):actual class PlatformAuthService : AuthService { actual override suspend fun login(email: String, password: String): User { // 调用 Android 专属 API (如 Retrofit) return androidNetworkClient.login(email, password) } } - iOS (
iosMain):actual class PlatformAuthService : AuthService { actual override suspend fun login(email: String, password: String): User { // 调用 iOS 专属 API (如 Ktor 或 NSURLSession) return iosNetworkClient.login(email, password) } }
(3) 依赖注入
使用 Koin 或 Kodein 实现跨平台 DI:
// commonMain 中初始化模块
val sharedModule = module {
single<AuthService> { PlatformAuthService() } // 自动切换平台实现
}
4. 平台端调用
-
Android (Kotlin):
class LoginViewModel : ViewModel() { private val authService: AuthService by inject() fun performLogin() { viewModelScope.launch { val user = authService.login("test@km.com", "pwd123") } } } -
iOS (Swift):
// 通过 KMP 生成的 Objective-C 头文件调用 func login() { SharedComponent.shared.authService.login( email: "test@km.com", password: "pwd123" ) { user, error in if let user = user { print(user.name) } } }
5. 关键技术支持
- 协程异步:使用
kotlinx.coroutines统一异步处理 - 序列化:通过
kotlinx.serialization处理 JSON 数据 - 网络请求:共享
Ktor客户端配置 - 数据库:使用
SQLDelight生成跨平台 SQL 代码
6. 性能优化建议
-
分层缓存策略:
- 内存缓存:
Kotlin/Native的AtomicReference - 磁盘缓存:
SQLDelight+Multiplatform Settings
- 内存缓存:
-
计算密集型任务:
使用@SharedImmutable标注只读数据,避免跨线程冲突
7. 典型应用场景
| 模块 | 共享内容 | 平台专属部分 |
|---|---|---|
| 用户认证 | 登录/登出逻辑、Token 管理 | UI 实现、生物识别 |
| 支付流程 | 订单校验、状态机 | SDK 接入 (支付宝/Apple Pay) |
| 数据分析 | 事件埋点、聚合计算 | 推送通知集成 |
总结
通过 Kotlin Multiplatform:
- 业务层统一:核心逻辑单次开发,双平台复用
- 维护成本降级:修改一处代码,同步更新两端
- 性能无损:编译为原生机器码,无虚拟机开销
参考工具链:
Ktor(网络) +SQLDelight(数据库) +Kotlinx.Serialization(数据解析)
更多推荐



所有评论(0)