Kotlin Multiplatform 移动端:共享核心逻辑实践

Kotlin Multiplatform(KMP)允许在 Android 和 iOS 应用中共享业务逻辑、数据模型等核心代码,显著提升开发效率。以下是关键实践步骤:


1. 环境搭建
  • 创建 KMP 模块:在 Android Studio 中新建 shared 模块(选择 Kotlin Multiplatform 模板)。
  • 配置 build.gradle.kts
    kotlin {
        androidTarget() // Android 平台  
        iosTarget {     // iOS 平台  
            binaries.framework { baseName = "SharedCore" }  
        }  
        sourceSets {  
            commonMain.dependencies {  
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")  
            }  
        }  
    }  
    


2. 共享核心逻辑实现

场景:定义数据模型和业务逻辑(如用户认证)。

  • 数据模型(commonMain 目录)
    // 共享数据类  
    data class User(val id: String, val name: String)  
    

  • 业务逻辑(commonMain 目录)
    // 认证服务接口  
    interface AuthService {  
        suspend fun login(email: String, password: String): User?  
    }  
    
    // 具体实现(模拟逻辑)  
    class AuthServiceImpl : AuthService {  
        override suspend fun login(email: String, password: String): User? {  
            return if (email.isValid() && password.isValid()) {  
                User(id = "123", name = "KMP User")  
            } else null  
        }  
    
        // 扩展函数验证输入  
        private fun String.isValid(): Boolean = length > 5  
    }  
    


3. 平台特定适配
  • Android 调用androidMain 目录):
    class AndroidAuth : AuthService by AuthServiceImpl() // 直接委托共享实现  
    

  • iOS 调用(Swift 代码):
    // 生成 Framework 后,在 Xcode 中调用  
    SharedCore().authService.login(email: "test@km.com", password: "123456") { user, error in  
        if let user = user { print("User: \(user.name)") }  
    }  
    


4. 依赖注入优化

通过 KoinKodein 管理依赖:

// commonMain 中配置 Koin 模块  
val sharedModule = module {  
    single<AuthService> { AuthServiceImpl() }  
}  

// Android/iOS 启动时初始化  
startKoin { modules(sharedModule) }  


5. 网络请求与序列化
  • 使用 ktor-client 处理跨平台网络请求。
  • 使用 kotlinx.serialization 解析 JSON:
    @Serializable  
    data class NetworkResponse(val user: User)  
    
    // 在 AuthService 中发起请求  
    val httpClient = HttpClient {  
        install(JsonFeature) { serializer = KotlinxSerializer() }  
    }  
    


6. 测试共享逻辑

commonTest 中编写单元测试:

class AuthServiceTest {  
    @Test  
    fun testLoginSuccess() = runTest {  
        val authService = AuthServiceImpl()  
        val user = authService.login("valid@email.com", "password123")  
        assertNotNull(user)  
    }  
}  


优势与注意事项

  • 优势
    • 代码复用率可达 70% 以上,减少重复开发。
    • 确保 Android/iOS 业务逻辑一致性。
  • 注意事项
    • 避免在共享模块中直接调用平台 API(如 UI 操作)。
    • 使用 expect/actual 机制处理平台差异(如文件存储)。

通过以上实践,KMP 能高效实现跨平台核心逻辑共享,显著提升移动端开发效率。

Logo

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

更多推荐