KMP 2024 年总结,Kotlin 崛起的一年

2024 Google I/O 上正式官宣了 KMP(Kotlin Multiplatform)项目,它是 Google Workspace 团队的一项长期「投资」项目,由 JetBrains 开发维护和开源的项目,简单来说,JetBrains 主导,Google Workspace 投资并提供技术支持。

当然,Kotlin Multiplatform 和 Compose Multiplatform 虽然都是 JetBrains 维护的项目,它们经常被一起提及,但是他们其实是两个项目

  • Kotlin Multiplatform:提供了 Kotlin 的跨平台
  • Compose Multiplatform:Compose UI 的跨平台框架,提供 UI 跨平台能力

用 JB 官方的话说就是:借助 Compose Multiplatform,开发者可以将 Kotlin Multiplatform 的代码共享能力推向应用逻辑之外。

而在 2024 年 Google 和 JetBrains/Kotlin 为许多 Jetpack 库添加了 Kotlin 多平台支持, 例如:

  • Ktor 通过处理 REST 服务消耗来简化网络任务
  • kotlinx.serialization 将数据转换为 JSON 等格式
  • Okio 管理基本的文件 I/O
  • SKIE 适配了类型和协程在 iOS 上的使用
  • CocoaPods 集成支持使用 iOS 特定的依赖项
  • Room 从版本 2.7.0-alpha01 开始 支持 Android、PC和 iOS
  • Datastore 从版本 1.1.0 开始添加 KMP 支持
  • Lifecycle 和 ViewModel 从 2.8.7 开始支持 Android、PC 和 iOS
  • ····

回到 KMP 的迭代更新上,在今年年初,Kotlin/Wasm 发布 Alpha 版,支持将 Kotlin 代码编译为 WebAssembly, 同步 Compose Multiplatform也开始支持 Kotlin/Wasm

另外 Compose Multiplatform 在 2024 具有典型意义的更新有

  • 从 Compose Multiplatform 1.6.10 开始:

    • iOS 进入 Beta 阶段,适用于 ProMotion 120 Hz,增加原生风格控件适配

    • Web Alpha

    • Compose 编译器已合并到 Kotlin 代码库中,从而让项目支持 Kotlin 2.0 的迁移

  • 从 1.7.0 开始:

    • iOS 相关性能优化,触摸交互优化等:

    • 桌面支持 dragAndDropSourcedragAndDropTarget 的拖放功能:

另外一个重大更新就是 Kotlin 2.0 系列发布 ,引入了 K2 编译器,统一了 Kotlin 支持的所有平台,所有编译器后端现在都共享大量逻辑和统一的管道,例如开发 KMP 库分发的下一代格式,让 KMP 库的开发和 JVM 库开发一样简单。

还有随着 IntelliJ IDEA 2024.3 版本开始,K2 模式正式脱离 Beta 阶段,开始进入稳定版本阶段,K2 模式显著提高了 Kotlin 代码分析的稳定性、内存的消耗效率和 IDE 的整体性能,并支持 Kotlin 2.1 语言功能等。

K2 模式代表 IDE 中对 Kotlin 支持的几乎完全重写

K2 模式下除了编译性能的巨大提升之外,在 Kotlin 代码分析、补全和导航速度方面也取得了巨大进步:

其实这些年随着 Kotlin 的发展,其本身的性能表现已经相当不错,例如在 bddicken/languages 的语言基准测试比较的图形化展示上看,Kotlin 的整体性能表现就挺不错:

还有一个有意思的更新在于,Kotlin Multiplatform 未来将采用基于 JetBrains Fleet 定制的独立 IDE ,而在官方调整过的 Kotlin Multiplatform Roadmap 优先关键事项里,可以看到其中就包含了「独立的 Kotlin Multiplatform IDE,专为多平台开发量身定制的开发环境」的相关内容:

其实在此之前, Kotlin Multiplatform 官方就开始推荐使用 JetBrains Fleet 作为开发工具,而这次是更激进的采用基于 JetBrains Fleet 的独立 Kotlin Multiplatform IDE 的计划,其核心在于:

  • Fleet 里可以在 Kotlin 代码直接跳转到对应的 Swift 代码:
  • Fleet 里 rename 操作可以自动同时关联 Swift 和 Kotlin :
  • 在 Fleet 里 debug 断点可以同时作用 Swift 和 Kotlin :

最后就是 klibs.io 平台发布Klibs.io 作为 KMP Package 的 Web 服务,支持查找选定平台(JVM、Android JVM、Wasm、JS、Kotlin/Native)的特定用途的 Kotlin 多平台库,而网站的数据为来自 GitHub 和 Maven Central 的数据编制索引,并使用 AI 生成的元数据来增强搜索结果,它的目的是通过提供 KMP 相关信息来更轻松地评估库:

满足条件的情况下 klibs.io 平台自动爬出统计

当然,既然是跨平台,肯定少不了 2024 主角之一的鸿蒙, 在 2024 Kotlin 中文开发者大会里,许多大厂都分享了 KMP 适配鸿蒙的事件,而这在过去一段时间已经引起了官方的注意,Kotlin 编译组的 lead 表示,他们也在研究如何在 KMP 中支持 Harmony0S

目前群组的讨论大概分成两部分:

  • 一方提议可以通过重新使用 Kotlin/JS 编译器,直接生成 ArkTS (而不是JS),这样做可以重新使用 Kotlin/JS 生态系统中已经拥有的 TypeScript 互操作性,另一个好处是将重新使用 HarmonyOS 工具链的所有其他部分,而通过 Kotlin/Native 会有两个运行时和两个独立的垃圾回收器,维护成本更高,同时也有大佬表示,在他们 Top 级别应用下 Kotlin/JS 转换下的性能还不错。
  • 另一方则认为 Kotlin/JS 整体性能较差,国内 Top 企业在鸿蒙适配中,经常使用 C API 而不是 TS API ,因为它可以带来更好的性能,这也是为什么 Kotlin/Native 在适配中被更多 Top 企业作为最终方案的理由,所以明显 Compose + Kotlin/Native 的路线更合适,比如 ArkTS(release) 和 Kotlin/Native(release) 之间 n 体问题的性能测试下,Kotlin/Native 性能甚至可以比 ArkTS 快 10 倍。

当然最终 KMP 官方是否会确认支持,或者说才去 Kotlin/JS 还是 Kotlin/Native 方案,具体还要等 2025 的最终讨论结果。

最后,到 2025 年,JetBrains 将专注于增强 Kotlin Multiplatform 生态系统,包括将 Compose Multiplatform for iOS 升级到稳定版、Kotlin-to-Swift 导出支持和前面提到的一体化 KMP IDE 的公开版本等。

希望 2025 年 KMP 和 Compose 能正式全平台落地,感谢这个百花齐放的时代~

相关推荐
don't_be_bald20 分钟前
数据结构与算法-顺序表
c语言·开发语言·数据结构·学习·链表
m0_7482304436 分钟前
眼见不一定为实之MySQL中的不可见字符
android·数据库·mysql
置酒天晴42 分钟前
js -音频变音(听不出说话的人是谁)
开发语言·javascript·音视频
非凡的世界1 小时前
PHP在做api开发中,RSA加密签名算法如何使用 ?
开发语言·php·加密·rsa·解密
_可乐无糖2 小时前
深入理解 pytest_runtest_makereport:如何在 pytest 中自定义测试报告
android·ui·ios·自动化·pytest
AI向前看2 小时前
R语言的数据结构
开发语言·后端·golang
Quantum&Coder2 小时前
C#语言的网络编程
开发语言·后端·golang
subject625Ruben2 小时前
一个简单的调用函数的判断素数Matlab代码
开发语言·matlab
哥咫匙传说2 小时前
frameworks 之 Winscope 工具
android·车载系统
Tttian6222 小时前
Java(1)入门基础
java·开发语言