Kotlin Multiplatform 跨平台共享逻辑技术调研 logo

Kotlin Multiplatform 跨平台共享逻辑技术调研

用 Kotlin 在多平台之间共享业务逻辑与领域模型

精选工具移动跨平台KotlinKMP逻辑共享

Kotlin Multiplatform 通过 expect/actual 与 commonMain 模式共享核心逻辑,是 Android 团队扩展到 iOS 和桌面的重要技术路线。

Kotlin Multiplatform 跨平台共享逻辑技术调研

Kotlin Multiplatform(KMP)是 JetBrains 推出的 跨平台代码共享 技术,允许在 commonMain 中编写业务逻辑、网络、数据模型与领域层,通过 expect/actual 机制为 Android、iOS、Desktop、Web(Kotlin/Wasm)提供平台实现。2026 年 Google 正式将 KMP 纳入 Android 官方推荐栈,与 Compose Multiplatform、Room KMP 形成 Kotlin 跨端全家桶。


一、 基本信息

维度关键指标 / 描述
技术标签逻辑共享 / Kotlin / expect-actual / Native
开发商JetBrains(Google 协同投入)
官方网站https://kotlinlang.org/docs/multiplatform.html
官方文档https://kotlinlang.org/docs/multiplatform-get-started.html
GitHub 仓库https://github.com/JetBrains/kotlin
许可协议Apache License 2.0
首次发布2017 年(KMP 稳定化约 2023+)
当前版本Kotlin 2.1+(2026 年)
支持平台Android、iOS、Desktop、Web、Server
生态成熟度中高(快速增长)

二、 技术定位与简介

KMP 的核心主张是 「共享逻辑,UI 各端原生」(也可选 Compose Multiplatform 共享 UI):

  • commonMain:网络请求、序列化、业务规则、Repository 接口。
  • androidMain / iosMain:平台 API、Keychain、SQLite 驱动等 actual 实现。
  • iOS 产物shared.frameworkshared.xcframework 嵌入 Xcode 工程。

与 Flutter 差异:KMP 默认不共享 UI,各端用 Jetpack Compose / SwiftUI / 原生 UI。与 React Native 差异:KMP 编译为平台原生二进制,无 JS Bridge。与 uni-app 差异:KMP 面向原生 App,非小程序。

适合:Android 团队扩展 iOS、双端共享复杂业务逻辑、已有 Kotlin 资产沉淀。


三、 快速上手安装说明

1. 创建 KMP 项目

使用 Android Studio Kotlin Multiplatform 模板,或 kmp.jetbrains.com Wizard。

2. Gradle 模块结构

// shared/build.gradle.kts 片段
kotlin {
    androidTarget()
    iosX64()
    iosArm64()
    iosSimulatorArm64()
 
    sourceSets {
        commonMain.dependencies {
            implementation("io.ktor:ktor-client-core:3.0.0")
        }
        androidMain.dependencies {
            implementation("io.ktor:ktor-client-okhttp:3.0.0")
        }
        iosMain.dependencies {
            implementation("io.ktor:ktor-client-darwin:3.0.0")
        }
    }
}

3. expect / actual 示例

// commonMain
expect fun platformName(): String
 
// androidMain
actual fun platformName(): String = "Android"
 
// iosMain
actual fun platformName(): String = "iOS"

4. 构建与集成

./gradlew :shared:assembleSharedXCFramework
# 在 Xcode 中链接 xcframework,Swift 调用 Kotlin 导出 API

四、 核心特性

1. 分层共享

可仅共享 domain + data,UI 完全原生。

2. expect / actual

编译期多平台抽象,类型安全优于 C 宏或条件编译。

3. Kotlin/Native

iOS 编译为 LLVM 原生代码,非解释执行。

4. 与 Android 生态互通

Android 模块可直接 implementation(projects.shared)

5. Kotlin/Wasm 与 JS 目标

Web 端共享逻辑实验性增强(2026 持续演进)。

6. Google 官方库 KMP 化

Room、DataStore、Navigation 等逐步提供 KMP 支持。


五、 适用场景

1. 黄金适用场景

  • Android 主力团队需要高质量 iOS 版,共享网络/模型/业务规则。
  • 金融科技、电商等复杂领域层,双端逻辑一致性要求高。
  • 渐进式迁移:先共享 data 层,UI 保持 SwiftUI/Compose 各写各的。
  • Desktop 工具复用同一套 core 模块。

2. 局限适用场景

  • 纯 Web/小程序团队,无 Kotlin 积累。
  • 极简展示型 App,共享逻辑收益低于工程复杂度。
  • 需要快速 MVP 且团队只会 React(考虑 RN/Expo)。
  • 依赖大量平台独有 UI 能力且逻辑轻薄。

六、 技术亮点

1. 逻辑一致性

单测运行在 commonTest,双端行为对齐成本低。

2. 原生 UI 体验

iOS 仍用 SwiftUI/UIKit,不牺牲平台交互规范。

3. 类型安全

Kotlin 强类型贯穿共享层,减少双端接口漂移。

4. JetBrains + Google 双引擎

IDE 支持、Android 官方文档、Gradle 工具链成熟。

5. 库生态扩展

Ktor、SQLDelight、Koin、 kotlinx.serialization 一等 KMP 支持。


七、 核心概念与架构

digraph KMP_Arch {
  rankdir=TB
  node [shape=box, style="rounded,filled", fillcolor="#f0f9ff"]
  AndroidUI [label="Android UI\n(Compose/Views)", fillcolor="#bae6fd"]
  iOSUI [label="iOS UI\n(SwiftUI/UIKit)"]
  Shared [label="shared module\ncommonMain"]
  AndroidActual [label="androidMain\n(actual)"]
  iOSActual [label="iosMain\n(actual)"]
  JVM [label="JVM / ART"]
  Native [label="Kotlin/Native\n(iOS framework)"]
 
  AndroidUI -> Shared
  iOSUI -> Shared
  Shared -> AndroidActual
  Shared -> iOSActual
  AndroidActual -> JVM
  iOSActual -> Native
}

边界原则:共享层不引用 android.*UIKit;平台 API 经 expect/actual 或接口注入。


八、 技术局限与边界

  1. 学习曲线:Gradle KMP 配置、iOS 链接、cinterop 对前端背景开发者陡峭。
  2. 构建时间:多目标编译显著长于单端 Android。
  3. iOS 调试:Kotlin/Native 崩溃栈与 Xcode 符号化需额外配置。
  4. UI 不默认共享:若需共享 UI 需另选 Compose Multiplatform。
  5. 第三方 SDK:部分 iOS SDK 仅 ObjC/Swift,需写 Swift 桥接层。
  6. 人才市场:国内精通 KMP + iOS 集成的工程师仍少于 Flutter/RN。

九、 生态地图

类别代表
网络Ktor Client
数据库SQLDelight、Room KMP
DIKoin、kotlin-inject
序列化kotlinx.serialization
日志Napier、Kermit
设置存储Multiplatform Settings
UI(可选)Compose Multiplatform
测试kotlin.test、Turbine

十、 生态集成

方向说明
Android标准 Gradle 模块依赖;与 Hilt 共存需规划 DI 边界。
iOSXCFramework + Swift 互操作;SKIE 改善 Swift API 导出。
CIGitHub Actions 矩阵构建 Android + iOS;Mac runner 必需。
Firebase部分能力走 REST;原生 SDK 放平台层 actual。
Compose MP可选统一 UI 层,见 Compose Multiplatform 文档。

十一、 开发与工程化

1. 推荐模块划分

shared/
  commonMain/     # 领域 + 数据接口
  commonTest/
  androidMain/
  iosMain/
androidApp/
iosApp/

2. API 导出

使用 export() 控制暴露给 Swift 的 API 面;避免泄漏内部类型。

3. 版本目录

libs.versions.toml 统一 Kotlin、Ktor、Coroutines 版本。

4. 静态分析

./gradlew check;detekt/ktlint 应用于 shared 模块。


十二、 性能与安全

  • Kotlin/Native 冷启动优于 JS Bridge,但 framework 体积需监控。
  • 网络层统一 Certificate Pinning 接口,各端 actual 实现。
  • 敏感存储用 Keychain/EncryptedSharedPreferences 的 actual 封装。
  • 避免在 commonMain 硬编码密钥;配置经 BuildKonfig 等注入。
  • iOS Release 开启 bitcode 已废弃;关注 Xcode 链接设置。

十三、 技术对比

方案共享层UI语言典型团队
KMP逻辑各端原生KotlinAndroid 扩展 iOS
Compose MP逻辑+UI共享 ComposeKotlinKotlin 全栈
Flutter全栈自绘Dart跨端 UI 一致
RNJS 全栈RN 组件TSReact 团队
Swift+Kotlin 双写原生双语言大厂分团队

十四、 最佳实践

  1. 先划清 domain/data 共享边界,UI 暂缓共享。
  2. expect/actual 保持最小面;复杂平台能力用接口 + 注入。
  3. commonTest 覆盖核心业务规则与序列化契约。
  4. iOS 集成建立 XCFramework 自动化 CI,避免手工拷贝。
  5. 用 SKIE 或精简导出 API,改善 Swift 调用体验。
  6. 关注 Kotlin 与 AGP 版本兼容矩阵。
  7. 评估 Compose MP 前先用 KMP 逻辑共享验证团队 Kotlin 能力。

十五、 学习与社区资源