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) 依赖注入
使用 KoinKodein 实现跨平台 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. 性能优化建议
  1. 分层缓存策略

    • 内存缓存:Kotlin/NativeAtomicReference
    • 磁盘缓存:SQLDelight + Multiplatform Settings
  2. 计算密集型任务
    使用 @SharedImmutable 标注只读数据,避免跨线程冲突


7. 典型应用场景
模块共享内容平台专属部分
用户认证登录/登出逻辑、Token 管理UI 实现、生物识别
支付流程订单校验、状态机SDK 接入 (支付宝/Apple Pay)
数据分析事件埋点、聚合计算推送通知集成

总结

通过 Kotlin Multiplatform:

  1. 业务层统一:核心逻辑单次开发,双平台复用
  2. 维护成本降级:修改一处代码,同步更新两端
  3. 性能无损:编译为原生机器码,无虚拟机开销

参考工具链:Ktor (网络) + SQLDelight (数据库) + Kotlinx.Serialization (数据解析)

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐