2024年Kotlin Multiplatform关键更新与展望

Viewed 0

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

当然,Kotlin Multiplatform和Compose Multiplatform虽然都是JetBrains维护的项目,它们经常被一起提及,但其实是两个不同的项目:Kotlin Multiplatform提供了Kotlin的跨平台能力,而Compose Multiplatform是Compose UI的跨平台框架,提供UI跨平台能力。用JetBrains官方的话说,借助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相关性能优化和触摸交互优化,桌面支持dragAndDropSource和dragAndDropTarget的拖放功能。

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

随着IntelliJ IDEA 2024.3版本开始,K2模式正式脱离Beta阶段,进入稳定版本阶段。K2模式显著提高了Kotlin代码分析的稳定性、内存消耗效率和IDE的整体性能,并支持Kotlin 2.1语言功能。K2模式代表IDE中对Kotlin支持的几乎完全重写,除了编译性能的巨大提升之外,在Kotlin代码分析、补全和导航速度方面也取得了巨大进步。

其实这些年随着Kotlin的发展,其本身的性能表现已经相当不错,例如在语言基准测试比较中,Kotlin的整体性能表现就挺不错。

还有一个有意思的更新在于,Kotlin Multiplatform未来将采用基于JetBrains Fleet定制的独立IDE。在官方调整过的Kotlin Multiplatform Roadmap优先关键事项里,包含了独立的Kotlin Multiplatform IDE,专为多平台开发量身定制的开发环境。在此之前,Kotlin Multiplatform官方就开始推荐使用JetBrains Fleet作为开发工具,而这次是更激进的采用基于JetBrains Fleet的独立Kotlin Multiplatform IDE的计划,其核心在于:在Fleet里可以在Kotlin代码直接跳转到对应的Swift代码;rename操作可以自动同时关联Swift和Kotlin;debug断点可以同时作用Swift和Kotlin。

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

当然,既然是跨平台,肯定少不了2024主角之一的鸿蒙。在2024 Kotlin中文开发者大会里,许多大厂都分享了KMP适配鸿蒙的事件,而这在过去一段时间已经引起了官方的注意。Kotlin编译组的lead表示,他们也在研究如何在KMP中支持HarmonyOS。目前群组的讨论大概分成两部分:一方提议可以通过重新使用Kotlin/JS编译器,直接生成ArkTS,这样做可以重新使用Kotlin/JS生态系统中已经拥有的TypeScript互操作性;而另一方则认为Kotlin/JS整体性能较差,国内Top企业在鸿蒙适配中经常使用C API而不是TS API,因为它可以带来更好的性能,所以Compose + Kotlin/Native的路线更合适。最终KMP官方是否会确认支持,或者说采取Kotlin/JS还是Kotlin/Native方案,具体还要等2025年的最终讨论结果。

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

0 Answers