Jetpack Compose 和 Compose Multiplatform 还有 KMP 的关系

embedded/2025/1/24 5:40:35/

今天刚好看到官方发布了一篇文章,用于讨论 Compose Multiplatform 和 Jetpack Compose 之间的区别,突然想起之前评论区经常看到说 “Flutter 和 CMP 对于 Google 来说项目重叠的问题”,刚好可以放一起聊一聊

image-20250123135625517

最近写的几篇内容写的太干,刚好要过年,大家也放假了,今天写篇水的。

实际上很多时候大家在讨论 Compose 的时候,会下意识把 Jetpack Compose 和 Compose Multiplatform 当成一个东西 ,但是实际上其实并合适,同样的情况也经常发生在 Kotlin Multiplatform (KMP) 和 Compose Multiplatform 之间。

这里其实需要搞清楚一个项目“归属”问题,就像是 JetBrains 自己发的这个 :

  • Jetpack Compose 是 Google 的项目,由 Google 支持的 Android UI 框架,属于 Google
  • Compose Multiplatform 是由 JetBrains 开发的 Jetpack Compose 「扩展」,用于跨平台支持,属于 JetBrains

所以,你如果从实际项目归属看,其实严格意义上说 Compose Multiplatform 是属于 JetBrains 开发的「拓展」支持,本质上并不是直接归属 Google 项目,属于合作性质,所以从内部项目来说,它和 Flutter 并不直接重叠

只是,由于 Compose Multiplatform 是基于 Jetpack Compose 开发,因此使用这些框架的体验非常相似,同时两者都由 Compose 内部的 compiler 和 runtime 进行支持,所以有相同的核心概念,可以用类似的 API 来构建 UI,包括 @Composable 函数、状态处理 API(如 remember)、UI 组件(如 RowColumn)、修饰符、动画 API 等。

比如 JetBrains 提到,Jetpack 包含的 first-party libraries,例如 Foundation 和 Material 等,这些都是 Google 为 Android 发布的,而为了使这些库提供的 API 可从通用代码中使用,JetBrains 维护了这些库的多平台版本,这些库是为 Android 以外的目标发布的。

所以其实整个社区生态也是 JetBrains 在维护

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

所以本质上你看 Compose Multiplatform 和 Kotlin Multiplatform 的资料,它都是在 JetBrains 相关的网站发布,属于 JetBrains 的项目,甚至托管 Package 的 klibs.io 平台,也是属于 JetBrains 管理和发布。

当然,你要说和 Google 完全没关系肯定是不可能的,毕竟 Kotlin 、KMP、CMP 都属于 Google 和 JetBrains 深度合作项目,但是你要说是完全「亲生儿子」,又不是十分恰当,就像 JetBrains 提到的:

Compose Multiplatform 是基于 Google 发布的代码和版本构建,虽然 Google 的重点是适用于 Android 的 Jetpack Compose,但 Google 和 JetBrains 之间也密切合作以实现 Compose Multiplatform。

从这里理解,就可以大概理清楚:

  • Jetpack Compose 是 Google 的亲儿子
  • Compose Multiplatform 是通过「捐精」形式和 JetBrains “生出”的「私生子」,归母亲所有
  • Kotlin Multiplatform 是 JetBrains 为「私生子」 提供的「童养媳」

是的,事实上 Kotlin Multiplatform 和 Compose Multiplatform 还需要分开看待,Kotlin Multiplatform 属于是 Kotlin 的「拓展」功能,它和 Compose Multiplatform 其实并没有“必然” 的关系:

你不用 Compose Multiplatform ,也可以使用 Kotlin Multiplatform ,它是支持独立运行的存在

如果硬是要举例,那就是 Kotlin Multiplatform 是可以直接用于编写跨平台共享业务逻辑的,甚至曾经就有些项目是 Flutter 写 UI ,然后 Kotlin Multiplatform 写业务的情况

只是现在有了 Compose Multiplatform , 所以 Kotlin Multiplatform 可以作为 Compose Multiplatform 的插件和底层跨平台支撑。

反过来看,也可以认为 Compose Multiplatform 作为 Kotlin Multiplatform 项目中的 UI 支持,它不是 Kotlin Multiplatform 本身的一部分,只是一个通过启用共享 UI 来补充 KMP 的 SDK

就像是,你想在鸿蒙上兼容 KMP 和 Compose Multiplatform ,那其实是两个工作量。

所以,很多时候我们在提 Compose 的时候,会直接潜意识的把 Jetpack Compose、Compose Multiplatform 和 Kotlin Multiplatform 都当成一个整体和归属讨论,当时实际上,它们之间还是需要区分,也有必要做一些区分。

参考链接:

https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-multiplatform-and-jetpack-compose.html


http://www.ppmy.cn/embedded/156482.html

相关文章

【Elasticsearch】inference ingest pipeline

Elasticsearch 的 Ingest Pipeline 功能允许你在数据索引之前对其进行预处理。通过使用 Ingest Pipeline,你可以执行各种数据转换和富化操作,包括使用机器学习模型进行推理(inference)。这在处理词嵌入、情感分析、图像识别等场景…

redis报错如何解决

错误复现 我启动我的redis,发现启动不成功。 查看错误日志 我们使用下面这个命令,来看看具体的错误原因。到底是为啥 journalctl -xe 我这个错误是因为,在我安装redis的时候,我的redis安装目录是,/usr/local/src/re…

【Golang 面试题】每日 3 题(四十三)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…

王兴饭否二

关于创业 01.最一流的创业路径,注定前无古人后无来者。 02.创业不能蛮干,要等「大势至」。 03.在不同行业的创业里,资本可能是催化剂、助燃剂、或主力燃料。 04.创业公司的一个基本特征,就是不能指望进入「自动巡航」状态。 0…

leetcode刷题记录(八十四)——739. 每日温度

(一)问题描述 739. 每日温度 - 力扣(LeetCode)739. 每日温度 - 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高…

python学opencv|读取图像(四十一 )使用cv2.add()函数实现各个像素点BGR叠加

【1】引言 前序已经学习了直接在画布上使用掩模,会获得彩色图像的多种叠加效果,相关文章链接为: python学opencv|读取图像(四十)掩模:三通道图像的局部覆盖-CSDN博客 这时候如果更进一步,直接…

汇编实验·系统调用

一、实验目的: 1.掌握基于特定操作系统中调用API或者SYSTEMCALL的基本方法。 2.进一步理解高级语言中函数调用的相关规定和约定(stdcall,cdec,fastcall等) 3.IA-32架构下API参数在汇编中的实现方式和约定。 二、实验内容 1.在课程设定的VS2022社区版的汇编开发环境下,完…

web3py+flask+ganache的智能合约教育平台

最近在学习web3的接口文档,使用web3pyflaskganache写了一个简易的智能合约教育平台,语言用的是python,ganche直接使用的本地区块链网络,用web3py进行交互。 代码逻辑不难,可以私信或者到我的闲鱼号夏沫mds获取我的代码…