Kotlin Multiplatform 与 React Native:跨平台对比
TIP
本对比文章强调了 Kotlin Multiplatform 在跨 Android 和 iOS 提供真正的原生体验以及完整访问平台 API 方面的卓越表现。对于注重性能、可维护性和原生外观与体验的团队,尤其是使用 Compose Multiplatform 共享 UI 代码时,KMP 极具吸引力。与此同时,React Native 可能适合拥有 JavaScript 专业知识的团队,尤其是进行快速原型设计时。
跨平台开发显著改变了团队构建应用程序的方式,使他们能够通过共享代码库为多个平台交付应用。这种方法简化了开发流程,并有助于确保跨设备的一致用户体验。
以前,为 Android 和 iOS 构建应用意味着维护两个独立的代码库,且通常由不同的团队负责,这导致了重复劳动以及平台间明显的差异。跨平台解决方案加快了上市时间并提高了整体效率。
在现有工具中,Kotlin Multiplatform、React Native 和 Flutter 作为三种应用最广泛的选项脱颖而出。在本文中,我们将深入研究前两者,以帮助您为您的产品和团队选择合适的方案。
Kotlin Multiplatform 与 Compose Multiplatform
Kotlin Multiplatform (KMP) 是由 JetBrains 开发的一项开源技术,能够跨 Android、iOS、桌面端(Windows、macOS、Linux)、Web 和后端实现代码共享。它允许开发者在多个环境中复用 Kotlin,同时保持原生能力和性能。
采用率正在稳步上升:在过去两次 开发者生态系统调查 的受访者中,Kotlin Multiplatform 的使用率在短短一年内增长了一倍多——从 2024 年的 7% 增加到 2025 年的 18%——这是其发展势头日益增强的明确信号。
通过 KMP,您可以选择您的共享策略:从共享除应用入口点之外的所有代码,到共享单个逻辑片段(如网络或数据库模块),或者在保持 UI 原生的同时共享业务逻辑。
为了跨平台共享 UI 代码,您可以使用 Compose Multiplatform —— 这是 JetBrains 基于 Kotlin Multiplatform 和 Google 的 Jetpack Compose 构建的现代声明式框架。它在 iOS、Android 和桌面端已达到稳定状态,Web 支持目前处于 Beta 阶段。
Kotlin Multiplatform 最初在 Kotlin 1.2(2017 年)中引入,并于 2023 年 11 月达到 稳定状态。在 Google I/O 2024 上,Google 宣布 正式支持使用 Kotlin Multiplatform 在 Android 和 iOS 之间共享业务逻辑。
React Native
React Native 是一个用于构建 Android 和 iOS 应用程序的开源框架,它使用 React(一个用于 Web 和原生用户界面的库)以及应用平台的原生能力。React Native 允许开发者使用 JavaScript 访问其平台的 API,并使用 React 组件(可复用、可嵌套的代码包)来描述 UI 的外观和行为。
React Native 最初于 2015 年 1 月在 React.js Conf 上宣布。同年晚些时候,Meta 在 F8 2015 上发布了 React Native,并一直维护至今。
虽然 Meta 监管 React Native 产品,但 React Native 生态系统 由合作伙伴、核心贡献者和活跃的社区组成。如今,该框架得到了全球个人和公司的贡献支持。
Kotlin Multiplatform vs. React Native:横向对比
| Kotlin Multiplatform | React Native | |
| 创建者 | JetBrains | Meta |
| 语言 | Kotlin | JavaScript, TypeScript |
| 灵活性与代码复用 | 共享您想要的代码库的任何部分,包括业务逻辑和/或 UI,比例从 1% 到 100% 不等。可以逐步采用,也可以从头开始构建具有原生感的跨平台应用。 | 跨平台复用业务逻辑和 UI 组件,从单个功能到完整应用。将 React Native 添加到现有的原生应用程序中以构建新屏幕或用户流。 |
| 软件包、依赖项与生态系统 | 软件包可从 Maven Central 和其他仓库获取,包括: klibs.io(Alpha 版本),旨在简化 KMP 库的搜索。 此 列表 包含了一些最受欢迎的 KMP 库和工具。 | React Native 库 通常使用 Node.js 软件包管理器(如 npm CLI 或 Yarn Classic)从 npm 注册表 安装。 |
| 构建工具 | Gradle(针对 Apple 平台的应用还需 Xcode)。 | React Native 命令行工具和 Metro 打包器,它们在底层为 Android 调用 Gradle,为 iOS 调用 Xcode 构建系统。 |
| 目标环境 | Android, iOS, Web, 桌面端, 以及服务器端。 | Android, iOS, Web, 以及桌面端。 对 Web 和桌面端的支持通过社区和合作伙伴领导的项目提供,例如 React Native Web、React Native Windows 和 React Native macOS。 |
| 编译 | 在桌面端和 Android 上编译为 JVM 字节码,在 Web 上编译为 JavaScript 或 Wasm,在原生平台上编译为平台特定二进制文件。 | React Native 使用 Metro 构建 JavaScript 代码和资产。 React Native 附带了内置版本的 Hermes,它在构建期间将 JavaScript 编译为 Hermes 字节码。React Native 还支持使用 JavaScriptCore 作为 JavaScript 引擎。 原生代码在 Android 上由 Gradle 编译,在 iOS 上由 Xcode 编译。 |
| 与原生 API 的通信 | 得益于 Kotlin 与 Swift/Objective-C 及 JavaScript 的互操作性,可以直接从 Kotlin 代码访问原生 API。 | React Native 公开了一组 API,用于将您的原生代码连接到 JavaScript 应用程序代码:原生模块 (Native Modules) 和原生组件 (Native Components)。新架构 (New Architecture) 使用 Turbo Native Module 和 Fabric Native Components 来实现类似的效果。 |
| UI 渲染 | Compose Multiplatform 可用于跨平台共享 UI,它基于 Google 的 Jetpack Compose,使用兼容 OpenGL、ANGLE(将 OpenGL ES 2 或 3 调用转换为原生 API)、Vulkan 和 Metal 的 Skia 引擎。 | React Native 包含一组核心的平台无关原生组件,如 View、Text 和 Image,它们直接映射到平台的原生 UI 构建块,例如 iOS 上的 UIView 和 Android 上的 android.view。 |
| UI 开发迭代 | 即使在公共代码中也可以使用 UI 预览。 通过 Compose Hot Reload,您可以立即看到 UI 更改,而无需重启应用或丢失其状态。 | Fast Refresh 是 React Native 的一项功能,可让您针对 React 组件中的更改获得近乎即时的反馈。 |
| 使用该技术的公司 | Forbes, Todoist, McDonald's, Google Workspace, Philips, 9gag, Baidu, Autodesk, TouchLab, Instabee, 以及更多公司列在我们的 KMP 案例研究中。 | Facebook, Instagram, Microsoft Office, Microsoft Outlook, Amazon Shopping, Mercari, Tableau, WordPress, Puma, PlayStation App,以及更多公司列在 React Native 展示区。 |
您还可以查看 Kotlin Multiplatform 与 Flutter 的对比。
为您的项目选择合适的跨平台技术
决定使用哪种跨平台框架并不是要寻找一种“一劳永逸”的解决方案,而是要选择最适合您的项目目标、技术要求和团队专业知识的方案。无论您是在构建一个具有复杂 UI 且功能丰富的产品,还是旨在利用现有技能快速发布,正确的选择都取决于您的具体优先级。请考虑您对 UI 自定义的需求程度、长期稳定性的重要性,以及您计划支持哪些平台。
对于拥有 JavaScript 经验的团队来说,React Native 可能是一个务实的选择,尤其是在进行快速原型设计时。另一方面,Kotlin Multiplatform 提供了不同层次的集成:它生成全原生的 Android 应用,并在 iOS 上编译为原生二进制文件,能够无缝访问原生 API。UI 可以是全原生的,也可以通过 Compose Multiplatform 共享,后者使用高性能图形引擎进行精美渲染。这使得 KMP 对于那些在受益于代码共享的同时,更看重原生外观与体验、可维护性和性能的团队特别有吸引力。
您可以在我们关于如何为下一个项目选择合适的 跨平台开发框架 的详细文章中找到更多指导。
常见问题解答
问:Kotlin Multiplatform 是否已生产就绪?
答:Kotlin Multiplatform 是一项稳定的技术,已准备好在生产环境中使用。这意味着,即使在最保守的使用场景中,您也可以在生产环境中使用 Kotlin Multiplatform 跨 Android、iOS、桌面端 (JVM)、服务器端 (JVM) 和 Web 共享代码。
Compose Multiplatform 是一个用于跨平台构建共享 UI 的框架(由 Kotlin Multiplatform 和 Google 的 Jetpack Compose 提供支持),它在 iOS、Android 和桌面端已处于稳定状态。Web 支持目前处于 Beta 阶段。
如果您想了解有关 Kotlin Multiplatform 总体发展方向的更多信息,请查看我们的博客文章:Kotlin Multiplatform 和 Compose Multiplatform 的后续计划。
问:Kotlin Multiplatform 是否比 React Native 更好?
答:Kotlin Multiplatform 和 React Native 各有千秋,选择取决于您项目的具体目标、技术要求和团队专业知识。在上面的对比中,我们概述了代码共享、构建工具、编译和生态系统等方面的关键差异,以帮助您决定哪种方案最适合您的用例。
问:Google 是否支持 Kotlin Multiplatform?
答:在 Google I/O 2024 上,Google 宣布 正式支持在 Android 上使用 Kotlin Multiplatform,以在 Android 和 iOS 之间共享业务逻辑。
问:学习 Kotlin Multiplatform 值得吗?
答:如果您有兴趣跨 Android、iOS、桌面端和 Web 共享代码,同时保留原生性能和灵活性,那么 Kotlin Multiplatform 值得学习。它由 JetBrains 支持,并由 Google 在 Android 上正式支持以在 Android 和 iOS 之间共享业务逻辑。此外,结合了 Compose Multiplatform 的 KMP 正越来越多地被构建多平台应用的公司采用并投入生产。