Kotlin Multiplatform全面解析:跨平台开发指南与前景

Viewed 0

前言

是否要采用 Kotlin Multiplatform 进行跨平台开发?首先需要了解清楚几个前置问题:

  1. Kotlin Multiplatform 是什么?
  2. 为什么学习 Kotlin Multiplatform?
  3. 为什么选择 Kotlin Multiplatform?
  4. 是否要选择 Kotlin Multiplatform 作为自己未来的发展方向?
  5. 何时入场?

Kotlin Multiplatform 是什么?

Kotlin Multiplatform 是 JetBrains 推出的使用 Kotlin 语言开发的开源跨平台框架,目前支持 Android、iOS、Web、Desktop 平台,但主要聚焦在 Android 和 iOS 移动端平台。其中,通过 Kotlin Multiplatform 实现逻辑在各个平台代码共享,通过 Compose Multiplatform 实现 UI 在各个平台代码共享。学习 Kotlin Multiplatform 的首要条件是熟悉 Kotlin 语言,早期拥抱 Kotlin 语言开发的人具有优势。

为什么主要聚焦在移动端平台?因为移动端有刚需:据 Statista 称,2022 年第三季度,Google Play Store 上共有 355 万个移动应用程序,App Store 上共有 160 万个应用程序,Android 和 iOS 目前占全球移动操作系统市场的 99%。再加上国内安卓应用商店中的移动应用程序,数量庞大。跨平台开发的需求日益增长,技术也在不断进步。

回顾当前流行的跨平台框架:Flutter 和 React Native。Flutter 由 Google 创建,使用 Dart 编程语言,支持原生功能如位置服务、相机访问等,并通过 Platform Channel 技术编写特定于平台的代码。Flutter 应用共享所有 UX 和 UI 层,可能不总是感觉 100% 原生,但其热重载功能允许开发人员即时查看更改。它适合希望共享 UI 组件且应用接近原生、性能要求高或需要开发 MVP 的场景。例如,Google Ads、阿里巴巴的闲鱼等应用使用 Flutter 构建。

React Native 由 Facebook 于 2015 年推出,基于 ReactJS 使用 JavaScript 构建 Android 和 iOS 应用。它提供多个第三方 UI 库和现成的组件,节省开发时间,并具有快速刷新功能。它适合相对简单、轻量级的应用,或开发团队精通 JavaScript 或 React 的情况。例如,Facebook、Instagram、Skype 等应用使用 React Native 构建。

为什么学习 Kotlin Multiplatform?

学习 Kotlin Multiplatform 的目的因人而异。对于个人而言,目的包括:成为全栈工程师,因为 KMP 涵盖了前端、后端、移动端开发,在多个平台上共享代码;成为平台架构师,设计在 iOS、Android、Web、Desktop、Server 等平台的代码复用和模块化;研发自主产品,个人编写和维护一套 UI 和逻辑代码,让产品在 Android、iOS、Desktop、Web 上运行。如果个人期望向这些领域发展,可以主动学习 KMP。

对于公司而言,目的是跨平台开发,优化开发时间,实现降本增效。通常,技术领导和基础架构岗位的人首先接触 KMP,推动其落地。如果公司着手 KMP 项目,首先受到影响的是做基础库的人,如网络、日志、上传、下载等基础库,可能会使用 KMP 重做。

为什么选择 Kotlin Multiplatform?

目前已有 Flutter、React Native 等跨平台框架,Kotlin Multiplatform 的优势在于:支持代码在 Android、iOS、Desktop、Web、Server 平台重用,在国内也支持鸿蒙平台;Compose Multiplatform 支持 UI 共享,Kotlin Multiplatform 支持逻辑共享。

此外,KMP 突破了性能、访问设备原生功能和 UI 一致性的关键限制。性能方面,通过使用不同的编译器后端,Kotlin 可编译为平台格式(如 Android 的 JVM 字节码、iOS 的本机二进制文件),共享代码的性能与原生编写的代码相同。访问设备原生功能方面,KMP 可以通过 expect 和 actual 机制访问 Android 和 iOS SDK 以及 JS 库。UI 一致性方面,Compose Multiplatform 支持在 Android、iOS、Desktop、Web 平台上的 UI 一致性。

如果你是 Android 开发人员,使用 Kotlin 可以轻松入手 KMP;如果你是 iOS 开发人员,Kotlin 遵循与 Swift 类似的概念,也可以轻松入门。重要的是,编程思路不应受制于编程工具。

是否要选择 Kotlin Multiplatform 作为自己未来的发展方向?

Kotlin Multiplatform 作为跨平台框架,是否有技术生命力?是否要选择它作为未来发展方向?可以借鉴“如何选择技术”中的观点来考虑,需满足几个条件:技术是否已被大公司使用并投入支持;是否有“杀手级”应用;社区是否有热度;是否有其他人为技术作出贡献或兼容标准。满足两个条件可选择,三个条件会很火,四个条件就是未来。

对于 KMP,现状如下:Kotlin Multiplatform 和 Compose Multiplatform 由 JetBrains 和 Google 共同主导建设;大型公司如 Forbes、Netflix、飞利浦、百度、快手等已利用 KMP 做跨平台开发;Kotlin Multiplatform 和 Compose Multiplatform 在 GitHub、Reddit、StackOverflow 和 Google Trends 上一直有热度,例如 GitHub 上 Compose Multiplatform 有 15k stars、212 watching、1.1k forks;有长期发展规划,如 2024 年 Kotlin Multiplatform 开发路线图;Kotlin 有语言委员会,每一项决定都严格。

综上,KMP 具有技术生命力,选择作为未来发展方向是可靠的。

何时入场?

技术日新月异,Flutter、React Native 已是成熟的跨平台框架,KMP 是否成熟?是否还处于早期阶段,开发者需花费大量时间解决 bug 而非实现新功能?选择入场时机,首先需关注 KMP 的稳定性。

稳定性

Kotlin Multiplatform 所支持平台的稳定性级别:

  • Stable 表示:放心使用,后续将根据严格的向后兼容性规则进行开发。
  • Alpha 表示:使用有风险,自行决定是否要使用。
  • Best effort 表示:仅供使用,如果发展好就继续,否则放弃。

根据稳定性,使用 KMP 编写逻辑共享代码,可以稳定支持 Android、iOS、Desktop、Server、Web(Kotlin/JS) 平台。此外,KMP 计划支持的 Native 平台可参考文档:Kotlin/Native target support。对于 KMP 目前支持的 Library 和 API,可参考相关文档。KMP 已具备网络、数据库、协程、序列化、日期和时间等跨平台能力,更多能力可在 GitHub 上查找。

Compose Multiplatform 所支持平台的稳定性级别:

  • Stable 表示:放心使用 Compose 编写跨平台 UI。
  • Beta 表示:可以使用,但还有一些问题。
  • Alpha 表示:使用有风险,自行决定是否要使用。

根据稳定性,使用 KMP 编写 UI 共享代码,可以稳定支持 Android、Desktop(JVM)平台,也可以在 iOS 平台使用。

写在最后

了解了 Kotlin Multiplatform 和 Compose Multiplatform 的稳定性后,对于个人和公司,可以直接在 Android 和 iOS 平台编写逻辑共享代码。目前可共享的代码主要是基础组件,如网络、日志、上传、下载、播放器等,可以使用 KMP 重新编写一套基础组件供 Android 和 iOS 使用。如果对 KMP 非常感兴趣,也可以尝试一些开创性的工作。

对于个人研发产品,逻辑和 UI 共享代码都可以尝试。入场时机取决于当前角色:如果是移动端架构师和基础库负责人,可以直接入场,做基础组件逻辑共享和部分 UI 组件 UI 共享;如果是垂直业务负责人和业务架构研发,也可以直接入场,做业务基础组件逻辑共享;如果是业务开发,可以了解但不必直接入场,如有浓厚兴趣或希望未来做个人产品,可以先入场。

0 Answers