近日 Kotlin 的母公司 JetBrains 发布了Compose Multiplatform 的 1.0 版本。
距离 Beta 版的发布刚刚1个月,所以 1.0 版本在功能层面没有太大变动,主要变动在于稳定性的提升和一些重要 Bug 的修复,1.0 的诞生标志着这个跨平台框架已经达到了在生产环境使用的标准,开发者可以使用 Compose 这种声明式 UI 框架开发桌面端甚至Web 端应用 。
Kotlin 一直缺少桌面端的 UI 开发库,这导致 Kotlin 的爱好者仍然只能使用 Java 的 UI 库开发桌面应用。如今 Compose Multiplatform 带来了基于 Kotlin 的声明式 UI 库。 声明式思想提高了 UI 开发效率,开发者不必再关心当数据变化后的 UI 刷新,比如下面的代码,当 TextFiled 被编辑时,Text 会自动更新。
text by remember { mutableStateOf("Hello, World!") } Column { Text(text) //text label TextField(text, {text = it}) //text field }
声明式 UI 是当今主流的开发范式,如果开发者对 React 或者 Flutter 等框架有所了解,那么 Compose 使用起来将很容易上手。
桌面端以外,Compose Multiplatform 还支持 Web 开发,Kotlin/JS 让开发者可以使用 Kotlin 书写前端代码并最终以 JS 的形式运行在浏览器,Compose for Web 提供了Web开发中的所有功能,包括功能完整的 DOM API,以及对 CSS-in-JS 、SVGs 等支持。 Compose for Web 的目的不是替代现有的 Web 开发,而是帮助 Kotlin 开发者扩大自己的能力范围。
Div( attrs = { // specify attributes here style { // specify inline style here } } ) { // div content goes here }
除了桌面端和 Web 端,Compose Multiplatform 也是支持 Android 开发的, Compose Multiplatform·和 Jetpack Compose 中同类功能的 API 完全一致,特别是状态管理部分的代码可以完全通用,这意味着你可以将一个 Jetpack Compose 项目轻松改造为 Compose Multiplatform 项目同时将状态管理的逻辑部分复用到其他平台;基于 Compose Multiplatform 工程开发一个 Android 端应用也很简单,在 Android 模块的目录引入 Jetpack 的对应类库皆可实现平台侧的功能开发。
性能方面,Compose Multiplatform 采用了 Skia 作为渲染引擎。Skia 可以跨平台使用,同时支持各平台特有的硬件加速技术,例如 DirectX,Metal 以及 OpenGL 等,借助硬件性能能完成高速渲染,当然 Compose 为没有硬件加速的设备也提供了优化的软件渲染方案。
在开发工具方面,Compose Multiplatform 可以运行在 IntelliJ IDEA 2021.1 之后的 IDE 中,IDE 提供了专门的工程向导和模板,帮助开发者快速启动,
同时 Compose Multiplatform 为 IDE 提供了专门用于预览的 Plugin 帮助开发者快速的预览自己的开发的 UI ,极大地提高开发效率。
JetBrains 在 4 个月之前将此 App 从 C++ 和 Electron 架构前移到了 Compose Multipaltform,并一直平稳运行,服务着月活超过 100 万的用户,框架的稳定性也得到了验证。