Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Kotlin Multiplatform

☆ KMP 是跨端趋势话题。你有 Android + iOS 基础,可以把它讲成“共享业务逻辑,保留原生体验“的跨端判断力。

一、KMP 解决什么问题

KMP 不是用一套 UI 替代所有平台,而是优先共享业务逻辑、网络、数据、算法、领域模型,UI 仍可保持原生。

二、expect / actual 机制

公共代码声明 expect,各平台提供 actual 实现。

// commonMain
expect class DeviceInfoProvider {
    fun deviceModel(): String
}
// androidMain
actual class DeviceInfoProvider {
    actual fun deviceModel(): String = android.os.Build.MODEL
}

三、推荐分层

是否适合共享说明
domain/model很适合业务规则稳定
data/network适合Ktor/serialization 可共享
platform capability部分适合用 expect/actual 封装
UI看项目Compose Multiplatform 或原生 UI

四、和 Flutter / React Native 的区别

KMP 更偏共享逻辑,不是强制统一 UI;Flutter/RN 更偏统一 UI 技术栈。选择取决于团队能力、UI 一致性诉求、原生能力复杂度。

五、与 iOS 的互操作

KMP 可生成 framework 给 iOS 调用,但要注意 Swift/Objective-C 暴露、协程到 iOS async 的桥接、异常模型、包体积和调试体验。

高频面试题

Q1:KMP 适合什么场景? 答:适合共享业务逻辑、协议、数据层和算法;如果项目主要难点是高度定制 UI 或平台能力差异很大,要谨慎。

Q2:KMP 和 Flutter 怎么选? 答:想统一 UI 且团队接受新渲染栈可考虑 Flutter;想保留原生 UI、共享核心逻辑可考虑 KMP。

Q3:expect/actual 的意义是什么? 答:公共层定义平台能力抽象,各平台提供实际实现,既复用业务逻辑又不牺牲平台差异。

易错点 / 追问

  • 不要说 KMP 能无成本一套代码跑所有端。
  • 不要把平台差异强行塞进 commonMain。
  • iOS 调试、构建、二进制大小都要提前评估。