Kotlin Multiplatform 的春天, klibs.io 发布,还有官方支持鸿蒙的想法

7,841 阅读3分钟

Kotlin Multiplatform 这些年发展迅速,其中最明显的就是 KMP 生态在不断扩大,仅在 2024 年一年里,库的数量就增加了 35%

但是,随着而来的就是管理和维持这些社区库的方式,过去我也经常提到过这个话题:那就是 KMP 社区缺少一个类似前端 npm 、Flutter pub 的集中型社区平台,因为历史原因,Android 在 Maven 时代在这方面一直很弱,所以 package 平台在此之前一直是 KMP 的痛点。

虽然后续出现了 package-search.jetbrains.com/ 这样的平台,但是整体来说他太过于简陋,更像是一个半成品的状态:

相比较之下,此时的 pub 平台的 package 已经有个更多细分数据和领域可供开发者参考:

而这时候,klibs.io 发布了,在 klibs 下,包可以具有更多选项和数据展示,所以不管你是在上面查找 Andorid 和 iOS 的权限申请插件,还是寻找可以同时支持 Mobile 和 Web 的 Compose Multiplatform 日历组件,都可以更清晰在结果里对比他们的情况:

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

Klibs.io 由 Ignat Beresnev 和 Kotlin Web 团队创建,只要符合以下条件的项目,就会在 24 小时内被收录:

  • 库是开源的,可在 GitHub 上获得
  • 至少将一个 artifact 发布到 Maven Central
  • 至少有一个 artifact 是 multiplatform 且必须具有 kotlin-tooling-metadata.json
  • 至少一个构件的 POM 包含指向 GitHub 存储库的有效链接,位于 “url” 或 “scm.url” 下

另外,还有一些待完善的,例如:

  • GitLab 和 Bitbucket 暂时还不支持,未来应该会在某个时候添加支持,因为目前 95% 的 KMP 库都在使用 GitHub 。
  • 而对于 Gradle 插件,现在也还没支持,未来应该在某个时候也会被编入索引,因为它们为 Kotlin Multiplatform 项目和库提供了很多价值,未来它们应该会有一个单独的类别,例如 “Tools”。
  • 甚至未来还可能会有仅限 Java/JVM 的的库分类

可以看到,Klibs.io 的目的,是在 Maven Central 的基础上,整合现有的开源第三方插件,从而得到一个有效的 KMP 社区 Package 平台 ,而这对于 KMP 开发者来说,无疑是新的「春天」。

另外,这里还想补充一下,由于 2024 Kotlin 中文开发者大会里,许多大厂都分享了 KMP 适配鸿蒙的事件,而这在过去一段时间已经引起了官方的注意,Kotlin 编译组的 lead 表示,他们也在研究如何在 KMP 中支持 Harmony0S

而官方的计划是,可以通过重新使用 Kotlin/JS 编译器,直接生成 ArkTS (而不是JS),从他的角度看,现在都通过 Kotlin/Native 的实现并不合适,因为在 Kotlin/Native 实现中,会有两个运行时和两个独立的垃圾回收器。

而在 Kotlin 官方的角度,这样做可以重新使用 Kotlin/JS 生态系统中已经拥有的 TypeScript 互操作性,另一个好处是将重新使用 HarmonyOS 工具链的所有其他部分,包括运行时,因此调用 HarmonyOS 的 APl 不会有任何性能损失。

最后,感谢这个百花齐放的时代,让一切皆有可能

参考资料