Kotlin Multiplatform 跨平台方案解析以及热门框架对比

跨平台简介

如今许多企业都面临着为多平台(尤其是 Android 和 iOS)开发应用的挑战。这也使得跨平台移动开发方案成为当下最热门的软件开发趋势之一。

多平台开发是一种能够构建 "单一移动应用,且可在多个操作系统上流畅运行" 的开发方式。在跨平台应用中,部分甚至全部源代码可实现共享 ------ 这意味着开发者无需为每个平台单独编写代码,即可创建并部署能同时在 Android 和 iOS 上运行的移动资源。

根据 Statista 的数据,2022 年第三季度 Google Play 商店有 355 万个移动应用,App Store 有 160 万个应用;目前 Android 和 iOS 合计占据全球移动操作系统市场 99% 的份额。

跨平台优势:

  • 代码复用:通过跨平台编程,开发工程师无需为每个操作系统编写新代码。单一代码库能减少重复性工作的时间成本。
  • 提高效率:得益于代码可复用性,跨平台应用所需编写的代码量更少,这也意味着节省了开发时间、提高开发效率、Bug 概率也就越低,进而减少测试与维护的时间成本。
  • 应用上线更快、定制更灵活:无需为不同平台开发独立应用,因此产品的开发与上线速度会显著加快。

KMP 简介

KMP 全称:Kotlin Multiplatform,是 JetBrains 的一项开源技术,支持跨 Android、iOS、桌面、Web 和服务器共享代码,同时保留原生开发的优势。

kmp 除了上述跨平台优势外还有以下特征:

  • 门槛较低,开发者只需掌握 Kotlin 一门语言,即可开发多平台应用。
  • 接近原生性能,直接编译为各平台原生代码(如 Android 的字节码、iOS 的 Objective-C/Swift 接口、Web 的 JavaScript/Wasm),性能与纯原生开发几乎无差异。
  • 极易编写原生代码:通过 预期声明 (expect) 和实际实现 (actual) 机制, 使用 expect 关键字在共享代码中声明平台相关的接口或类,使用 actual 关键字在每个目标平台中提供具体的实现。
  • 生态持续繁荣,社区与官方双重支持。JetBrains 持续迭代 KMP 功能,与 Android 官方 Jetpack Compose 深度整合。并且社区已有大量成熟库支持 KMP,如 Ktor、SQLDelight、Coil等,减少重复造轮。

支持的平台与稳定性:

平台 稳定性等级 核心解读
Android Stable(稳定) 最成熟的 KMP 目标平台,API 已固化,无兼容性风险,可直接用于生产环境(如跨平台 App 的 Android 端开发)。
iOS Stable(稳定) 经过长期迭代,与 Xcode 集成、原生代码交互(如 Swift/Objective-C 调用)均已成熟,生产环境可用(需注意适配最新 iOS 版本)。
Desktop (JVM) Stable(稳定) 基于 JVM 的桌面端开发(Windows/macOS/Linux),支持 Swing、JavaFX 或 Compose Multiplatform,适合开发跨平台桌面工具或应用。
Server-side (JVM) Stable(稳定) 用于开发后端服务(如基于 Ktor、Spring Boot 的接口),可复用 KMP 共享逻辑(如数据模型、业务算法),生产环境兼容性强。
Web based on Kotlin/Wasm Beta(测试) 基于 WebAssembly 的 Web 开发方案,目前处于测试阶段,API 可能调整,适合技术验证或非核心功能试点,暂不建议用于关键生产场景。
Web based on Kotlin/JS Stable(稳定) 基于 Kotlin/JS 的 Web 开发(编译为 JavaScript),支持 React、Vue 等前端框架集成,可复用 KMP 共享逻辑,生产环境可用。
watchOS Beta(测试) Apple 手表端开发,目前功能仍在完善(如原生控件交互、续航适配),适合开发原型或内部试用版,需关注后续稳定版本更新。
tvOS Beta(测试) Apple 电视端开发,生态支持较少,稳定性待验证,主要用于特定场景的技术探索,暂不推荐生产使用。

CMP 简介

CMP 全称:Compose Multiplatform,是 JetBrains 基于 Google 的 Jetpack Compose 扩展而来推出的声明式 UI 框架,可让您为 Android、iOS、桌面和 Web 开发共享 UI,而无需维护多个界面实现。同时完美衔接 Kotlin Multiplatform(KMP)的共享业务逻辑,形成 "逻辑 + UI" 全链路跨平台方案。

优势:

  • 原生体验和轻松互操作:Compose Multiplatform 提供原生品质 UI,包括流畅的滚动、响应迅速的文本编辑以及针对特定平台的手势支持。轻松访问原生 API,包括地图、相机、视频等。
  • 多平台覆盖:在状态管理、布局、动画、Material 组件等上使用熟悉的 Jetpack Compose API,将您的 Android 架构引入其他平台。
  • 逐步采用:从小处着手或全面采用,无需额外工作 -- 共享一个组件、一个屏幕或整个 UI。

跨平台 UI 框架的差异:

框架 核心语言 渲染方式 多平台支持 优势 劣势
Compose Multiplatform Kotlin 适配平台原生渲染(如 Android 原生、iOS SwiftUI) Android/iOS/ 桌面 / Web 与 KMP 无缝集成,Kotlin 开发者上手快,原生体验好 需学 Kotlin 和 Compose 体系
Flutter Dart 自绘引擎(Skia) Android/iOS/ 桌面 / Web 组件丰富,跨平台一致性高,性能稳定 需学 Dart,自绘 UI 与原生平台特性衔接稍复杂
React Native JavaScript 桥接平台原生组件 Android/iOS/Web 前端开发者上手快,生态成熟 桥接性能损耗,多平台 UI 一致性需额外适配

KMP 跨平台原理

KMP 能跨平台运行,本质是 Kotlin 编译器为不同平台生成 "原生可执行代码",而非通过 "中间层桥接"(如 React Native 的 JS 桥接),性能更接近原生开发。

Kotlin 编译器针对不同目标平台,将 Common 层代码和平台专属代码编译为对应平台可识别的代码格式:

  • Android 平台:编译为 Java 字节码(.class 文件),可直接与 Android 原生代码(Java/Kotlin)交互,兼容 Jetpack、Material 3 等生态。
  • iOS 平台:编译为 Objective-C 静态库(.a 文件)或 Swift 框架(.framework),可被 iOS 原生代码(Swift/Objective-C)调用,适配 UIKit、SwiftUI 等。
  • 桌面端(Windows/macOS/Linux):编译为 JVM 字节码(运行在 JVM 上)或原生二进制文件(通过 Kotlin/Native 编译),支持 Swing、JavaFX 等桌面 UI 框架。
  • Web 平台:
    • 基于 Kotlin/JS:编译为 JavaScript 代码,可与 React、Vue 等前端框架集成;
    • 基于 Kotlin/Wasm:编译为 WebAssembly 二进制文件,性能接近原生 JS,支持浏览器端特性。

对于 iOS、桌面原生等 "非 JVM 平台",KMP 依赖 Kotlin/Native 技术,它是一套独立的编译器工具链,能将 Kotlin 代码直接编译为 "平台原生机器码"(无需 JVM 运行时),解决了 Kotlin 以往只能运行在 JVM 上的局限,例如 iOS 平台,Kotlin/Native 将代码编译为 Objective-C 兼容的静态库,iOS 开发者可像调用系统库一样调用 KMP 模块的代码。

KMP 跨平台的本质:

  • KMP 不是 "用一套代码统治所有平台",而是 "用一套核心逻辑适配所有平台"。
  • 共享层(Common)负责 "不变的核心"(如业务规则、数据模型),避免重复开发。
  • 平台层(Actual)负责 "变的适配"(如调用平台原生 API、处理平台差异),保障原生体验。
  • 编译器和工具链负责 "连接共享与适配",为不同平台生成可执行代码。

这种 "分层 + 适配" 的策略,既解决了跨平台开发的效率问题,又规避了传统方案的性能损耗问题,也是 KMP 被 Netflix、麦当劳等头部企业采用的核心原因。

KMP 案例

  • 百度:使用 KMP 来统一 iOS 和 Android 之间的数据层和业务逻辑,从而为两个平台启用单一的 Kotlin 代码库。这确保了一致的用户体验,降低了维护成本,并显着提高了生产力。
  • 哔哩哔哩:采用了 Kotlin Multiplatform 和 Compose Multiplatform 的即时消息功能。
  • 麦当劳:通过共享应用内支付等复杂代码,麦当劳保持了无缝的原生体验,同时提高了性能、减少崩溃并简化了测试。KMP 统一了他们的开发团队并交付了一致的结果,支持超过 650 万次每月购买。
  • 美团:自 2020 年以来,美团使用 KMP 为其餐厅管理系统开发客户端应用程序,跨 Android、iOS 和 Windows 平台。这种方法可以共享数据层、域层和表示层的代码,提高新功能的开发效率,并确保低端设备上的用户交互流畅。
  • 飞利浦:在 HealthSuite 数字平台移动 SDK 中使用了 KMP。借助 KMP,他们不仅加速了新功能的实施,还促进了 Android 和 iOS 开发人员之间加强的协作。
  • 福布斯:通过在 iOS 和 Android 上共享超过 80% 的逻辑,福布斯现在在两个平台上同时推出新功能,从而保持了根据特定平台定制功能的灵活性。这使得团队能够更快地进行创新和响应市场需求。
  • Netflix:使用 KMP 为其移动工作室应用程序共享逻辑,从而减少重复并实现更快、更可靠的开发。这种方法有助于在快节奏的电视和电影制作世界中高效地提供高质量的功能。

热门跨平台框架

1. flutter

Flutter 由谷歌于 2017 年推出,是一款支持 "通过单一代码库构建移动、Web、桌面应用" 的热门框架。

官网:https://flutter.dev/

编程语言:Dart

应用案例:eBay Motors、阿里巴巴(旗下应用)、Google Pay、字节跳动(旗下应用)

核心特性:

  • 热重载(Hot Reload):修改代码后无需重新编译,即可即时查看应用变化。
  • 支持 Material Design:内置谷歌 Material Design 设计系统,开发时可使用多种视觉与交互组件。
  • 独立渲染引擎:不依赖浏览器技术,拥有专属渲染引擎用于绘制组件。
  • 活跃社区支持:全球用户社区活跃度较高,开发者使用率广泛。根据 Stack Overflow 趋势,Flutter 相关标签的使用频次持续上升。

2. React Native

React Native 是一款开源 UI 软件框架,由元宇宙平台公司(Meta Platforms,前 Facebook)于 2015 年(略早于 Flutter)开发。它基于 Facebook 的 JavaScript 库 React,支持开发 "原生渲染" 的跨平台移动应用。

官网:https://reactnative.cn/

编程语言:JavaScript

应用案例:微软 Office、Skype、Xbox Game Pass;Meta 的 Facebook、桌面端 Messenger、Oculus(VR 应用)。更多案例可查看 React Native 展示库

核心特性:

  • 快速刷新(Fast Refresh):修改 React 组件后可即时查看变化。
  • 侧重 UI 开发:React 基础组件会渲染为平台原生 UI 组件,支持构建定制化、响应式用户界面。
  • 默认集成调试工具:0.62 及以上版本默认集成移动应用调试工具 Flipper,支持调试 Android、iOS、React Native 应用,提供日志查看器、交互式布局检查器、网络检查器等功能。
  • 庞大社区生态:作为最热门的跨平台框架之一,拥有庞大且活跃的开发者社区,开发者可分享技术知识并获取支持。

3. Ionic

Ionic 是一款开源移动 UI 工具包,于 2013 年发布。它支持开发者使用 HTML、CSS、JavaScript 等 Web 技术,结合 Angular、React、Vue 框架,通过单一代码库构建跨平台移动应用。

官网:https://ionic.io/

编程语言:JavaScript

应用案例:T-Mobile(通信应用)、BBC(儿童与教育类应用)、EA Games(游戏应用)

核心特性:

  • 移动专属 SaaS UI 框架:基于专为移动操作系统设计的 SaaS UI 框架,提供多种应用开发所需的 UI 组件。
  • 支持调用设备原生功能:通过 Cordova 与 Capacitor 插件,可访问设备内置功能(如相机、手电筒、GPS、录音机)。
  • 专属命令行工具:拥有 Ionic CLI(命令行界面),是构建 Ionic 应用的核心工具。
  • 活跃论坛社区:Ionic 框架论坛(Ionic Framework Forum)活跃度高,社区成员可交流知识、协助解决开发难题。

4. .NET MAUI

.NET 多平台应用 UI(.NET MAUI,全称为 .NET Multi-platform App UI)是微软旗下的跨平台框架,于 2022 年 5 月发布。它支持开发者使用 C# 与 XAML 构建原生移动与桌面应用。.NET MAUI 是 Xamarin.Forms(Xamarin 的功能之一,为 Xamarin 支持的平台提供原生控件)的演进版本。

官网:https://learn.microsoft.com/zh-cn/dotnet/maui

编程语言:C#、XAML

应用案例:NBC Sports Next(体育应用)、Escola Agil(教育应用)、Irth Solutions(企业服务应用)

核心特性:

  • 跨平台访问原生功能:提供跨平台 API,可访问 GPS、加速度计、电池状态、网络状态等设备原生功能。
  • 单一项目多目标平台:通过 "多目标定位" 技术,支持在单一项目中开发 Android、iOS、macOS、Windows 应用。
  • 支持 .NET 热重载:应用运行时可修改托管源代码,无需重启应用即可查看变化。
  • 快速获得开发者认可:虽是较新框架,但已在开发者群体中获得关注,Stack Overflow 与 Microsoft Q&A 上拥有活跃社区。

5. NativeScript

NativeScript 是一款开源移动应用开发框架,最初发布于 2014 年。它支持开发者使用 JavaScript、TypeScript(可编译为 JavaScript 的语言),结合 Angular、Vue.js 等框架,构建 Android 与 iOS 移动应用。

官网:https://nativescript.org/

编程语言:JavaScript、TypeScript

应用案例:Daily Nanny(育儿服务应用)、Strudel(社交应用)、Breethe(健康管理应用)

核心特性:

  • 轻松访问原生 API:可便捷调用 Android 与 iOS 的原生 API。
  • 原生 UI 渲染:应用直接在原生设备上运行,不依赖 WebView(Android 系统中用于在应用内显示网页内容的组件),UI 为平台原生样式。
  • 丰富插件与模板:提供多种插件与预制应用模板,无需依赖第三方解决方案。
  • 基于熟悉的 Web 技术:依赖 JavaScript、Angular 等广为人知的 Web 技术,降低开发者学习成本,不过目前更多被小型企业与初创公司使用。

6. Kotlin Multiplatform

Kotlin Multiplatform(KMP)是 JetBrains 开发的开源技术,支持 "跨平台共享代码,同时保留原生编程优势"。它允许开发者按需复用代码、按需编写原生代码,并能将共享 Kotlin 代码无缝集成到任意项目中。

官网:https://www.jetbrains.com/kotlin-multiplatform/

编程语言:Kotlin

应用案例:麦当劳(McDonald's)、Netflix、《福布斯》(Forbes)、9GAG、Cash App、飞利浦(Philips)

核心特性:

  • 多平台代码复用:可在 Android、iOS、Web、桌面端、服务端间复用代码,同时保留原生代码。
  • 无缝集成现有项目:支持调用平台专属 API,同时充分利用原生开发与跨平台开发的优势。
  • 支持 UI 共享:借助 JetBrains 推出的现代声明式跨平台 UI 框架 Compose Multiplatform,可灵活共享代码,同时实现逻辑与 UI 的跨平台复用。
  • 低迁移成本:若已在 Android 开发中使用 Kotlin,无需引入新语言,可复用现有 Kotlin 代码与技术经验,相比其他技术,迁移到 KMP 的风险更低。
  • 成熟且快速成长:虽是列表中较新的框架,但社区已成熟 ------2023 年 11 月 JetBrains 宣布其进入 Stable(稳定)阶段,目前市场影响力持续扩大;官方文档定期更新,社区支持完善,可随时获取问题解答;众多全球企业与初创公司已采用 KMP 开发 "接近原生体验" 的多平台应用。

7. uni-app

uni-app 是基于 Vue.js 开发的跨平台应用框架,由国内 DCloud 公司推出,核心优势是 "一次编写,多端发行"------ 开发者只需编写一套 Vue 代码,即可将应用打包发布到 iOS、Android、Web(H5)、小程序(微信 / 支付宝 / 百度 / 字节跳动等)、快应用等多个平台,大幅降低多端开发的成本与复杂度,是国内覆盖平台最广的跨端框架之一。

官网:https://uniapp.dcloud.net.cn/

编程语言:JavaScript/TypeScript/Vue.js

应用案例:华为荣耀亲选商城、星巴克、CSDN、vivo官方商城

核心特性:

  • 支持 10+ 主流平台,包括:移动应用、小程序端、Web 端、快应用、鸿蒙(HarmonyOS)等。
  • 技术栈友好:基于 Vue.js 语法(兼容 Vue 2/3),同时支持 TypeScript,开发者无需学习新语言即可上手。对于熟悉 Vue 的前端 / 移动端开发者,迁移成本极低;生态中还提供大量 Vue 组件,可直接复用。
  • 原生体验贴近:内置 "原生渲染" 能力:在 App 端可调用手机原生 API(如相机、定位、推送),在小程序端自动适配各平台原生组件(如微信小程序的 button、picker),避免纯 Web 应用的 "体验割裂感";同时支持集成原生插件(如 Android 的 Java 插件、iOS 的 Objective-C 插件),满足复杂原生功能需求。
  • 工具链成熟:配套开发工具 HBuilderX(DCloud 自研 IDE),提供 "一键运行""可视化打包""多端调试" 等功能,无需手动配置复杂环境;也支持 VS Code 配合插件开发,适配不同开发者的工具习惯。
  • 生态丰富:官方提供 uni-ui 组件库:包含 80+ 常用 UI 组件(如表单、列表、导航),适配多端样式。第三方生态活跃:社区有大量开源插件(如地图、支付、统计)、模板项目(如电商、资讯、工具类 App),可直接复用加速开发。文档完善:中文官方文档详细,且有丰富的教程、案例和问题解答。
相关推荐
FunnySaltyFish6 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
Kapaseker12 小时前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
A0微声z3 天前
Kotlin Multiplatform (KMP) 中使用 Protobuf
kotlin
alexhilton4 天前
使用FunctionGemma进行设备端函数调用
android·kotlin·android jetpack
lhDream4 天前
Kotlin 开发者必看!JetBrains 开源 LLM 框架 Koog 快速上手指南(含示例)
kotlin
RdoZam4 天前
Android-封装基类Activity\Fragment,从0到1记录
android·kotlin
Kapaseker5 天前
研究表明,开发者对Kotlin集合的了解不到 20%
android·kotlin
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1235 天前
matlab画图工具
开发语言·matlab