0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文快速带您了解 KMM、Compose 和 Flutter 的现状 | 开发者说·DTalk

谷歌开发者 来源:未知 2022-12-23 20:55 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文原作者: 恋猫de小郭,原文发布于: GSYTech

又到了喜闻乐见的环节,「本篇主要是科普 KMM、Compose 和 Flutter 的最新现状」,对于 Compose 和 Flutter 大家可能并不陌生,但是对于 KMM 也许会存在疑惑,KMM 全称 Kotlin Multiplatform Mobile,顾名思义它是用 Kotlin 实现的跨平台框架,那为什么今天突然会聊到它?

起因如下图所示,最近有人提及了 KMM,并且用了 "变天" 的词汇,顿时就勾起了我的兴趣,因为 KMM 这些年来一直 "不温不火",可以说很多使用 Kotlin 开发的 "Androider" 对它都很陌生,难道最近它又有了什么突破性的进展?

而在求证一番之后,原来起因来自 10 月初「Android 官方宣布Jetpack 开始要支持 KMM」了,目前Collections和DataStore已经可以通过依赖-dev01版本在多平台上使用,同时「KMM 进入 Beta 版本阶段」 「所以目前 KMM 变不了天,至少它还处于 Beta 阶段,但是 Jetpack 开始支持 KMM 是个很好的消息,这意味着 KMM 的社区支持有了官方保证」
好了,介绍完起因,接下来开始进入今天的主题,什么是 KMM、Compose 和 Flutter。

KMM

Kotlin Multiplatform Mobile – KMM 是基于 Kotlin 并应用在 iOS 和 Android 的一种跨平台技术,它的特点是结合了跨平台和原生开发协同开发的模式,如下图所示,简单的理解就是:「从纯原生开发变成了 KMM + 原生 UI 开发」27cc7628-82bf-11ed-bfe3-dac502259ad0.png

「使用 KMM 可以把您的业务逻辑和基建部分的能力跨平台化」,例如网络请求、数据存储,状态上报等模块通过 KMM 实现 Android 和 iOS 通用,例如前面介绍的 DataStore 就可以在 iOS 上支持使用。

在官方的介绍里 KMM 的早期使用者有百度、Netflix、VMWare、Philips 等,目前收到的反馈都挺不错,而 Beta 版本也意味着现在 KMM 已经具备了使用的基础。

那您可能会好奇,KMM 支持 Web 吗?

聊到这个话题就很有趣,从我的角度上看,我会说 Kotlin Multiplatform 支持,但是 KMM 不支持。 如果您安装过 KMM 插件和创建过 KMM 项目,您会看到 KMM 不管是从 logo 还是项目创建都只有 Android 和 iOS,但是,Kotlin Multiplatform 是支持 Web 的,通过 Kotlin JS。

如果接触 Kotlin Multiplatform 比较早,那您可能还听说过 KMP,KN 之类的缩写,那它们和 KMM 又是什么关系?简单来说:

  • KMP 一般指的就是 Kotlin Multiplatform,我依稀记得 KMP 这个概念是在 Kotlin 1.2 的时候被提出,可以将 Kotlin 运行到特定平台的 JVM 和 JS 代码上
  • KN 一般指的是 Kotlin Native,KN 属于是将 Kotlin 编译为 Native 二进制文件的技术,甚至可以在没有虚拟机的情况下运行,例如 KMM 上的 iOS 就是使用了 KN 的能力
  • KMM 是利用了 JVM 和 KN 能力实现的针对 Android 和 iOS 平台的 Kotlin 框架: Android (Kotlin/JVM) 和 iOS (Kotlin/Native)

2832b1d6-82bf-11ed-bfe3-dac502259ad0.png

另外还有 Kotlin JS 用于 Web 平台,「所以 KMP 可以看作是大集合,而 KMM 是其中针对 Android 和 iOS 的支持,另外通过 Kotlin Native 和 Kotlin JS 也可以支持拓展到 PC 端和 Web 端」

那么到这里您应该理解:「KMM 主要是用来写跨平台逻辑,涉及到 UI 部分您还是需要通过原生实现」,如果您从另外一个角度看,用 KMM 对于 Android 开发来说几乎等于白送的能力,因为它只需要 Kotlin。
至少 Compose 您还需要适应下响应式开发模式。

那或者有人就问:那 KMM 的意义何在? 事实上还真有,「KMM 在 App 的基建上会很实用,比如做数据上报,崩溃统计,数据分析等等」,纯逻辑的跨平台不影响 UI 部分,目前也是在这些场景上 KMM 应用较多。
另外还有人问我,KMM 可以用 Java 开发吗?嗯,这是个好问题,下次不要再问了。
当然,KMM 也存在一些局限,比如使用 ViewModel 和协程如何在 iOS 上运行的问题,不过社区针对这部分也有一些第三方支持,所以对于 KMM 的未来还是值得期待。

Compose

Compose 相信大家不会陌生,「其实 Compose 也可以分两部分看待,Jetpack Compose 和 Compose Multiplatform」:
  • 由 Android 官方维护的 Jetpack Compose

  • 由 JetBrains 维护的compose-jb实现的 Compose Multiplatform

「如果说 KMM 是用于实现跨平台的业务逻辑,那么 Compose Multiplatform 就是专注于跨平台 UI 上的支持」,那 KMM 和 Compose Multiplatform 是什么关系呢? 从项目角度看,compose-jb 和 KMM 其实没有关系,因为 KMM 还在 beta,但是 Compose Multiplatform 正式发布已经接近一年的时间。
但是要说完全没关系显然是不可能,毕竟 Kotlin Native 和 Kotlin JS 的能力其实在 Compose Multiplatform 里很重要。

当然,如下图所示,Compose Multiplatform 在跨平台开发体验上还是有所区别,「Compose 目前是通过多个模块不同实现来支持多平台,所以目前 Jetpack Compose 和 Compose Multiplatform 有一些 "割裂"」,特别是在 Web 端,想要达到 Flutter 一样共享代码的比例还需要继续努力。

2845ad40-82bf-11ed-bfe3-dac502259ad0.png  
PS: 图比较老,iOS 其实目前已经进入实验阶段, androidx.compose.ui.main.defaultUIKitMain 相关的支持距离正式发布可以期待。

另外 Compose Multiplatform 还有的问题就是缺少插件社区,这其实是跨平台领域必不可少的配置:「前端有 npm、Flutter 有 pub,您可以通过它们的中央官网搜索您想要的库,查看它们的热度,版本,兼容和使用量等等信息,设置官方认证和安全保障,但是 Maven 时代在这方面一直很弱」

另一方面 Compose 的优势也很明显:

  • Kotlin 生态
  • Android 开发友好
  • 打包体积增长不大,代码压缩比例高
  • 性能不错,compose-android 和 compose-desktop 都使用 Skia
「而随着 Jetpack 开始支持 KMM,那么 Compose Multiplatform 的社区支持力度将得到进一步提升,因为变相 Compose Multiplatform 也可以支持 Jetpack」 至于前面所说的 "割裂" 问题,目前可以看到官方也在有序推进,其中就有 desktop 的部分代码已经挪到了androidx 上,从这里看或者统一的 Compose lib 并不遥远。288993ac-82bf-11ed-bfe3-dac502259ad0.png
PS: JetBrains 目前就已经将 Toolbox 应用通过 Compose Multiplatform 实现并且发布使用。

Flutter

现在 Flutter 已经是 3.3 的版本,Flutter 的特点就是跨平台,因为它并没有自己的平台,同时它也是 single codebase 的跨平台实现。

291106c0-82bf-11ed-bfe3-dac502259ad0.png  

关于 Flutter 和其他框架的对比或者使用数据就不多赘述,这里介绍一些其他比较有意思的话题。

1. FlutterVSOther量化对比 2. 国内大厂应用在移动端Flutter框架使用分析 3. 国内大厂在移动端跨平台的框架接入分析

「在 Jetbrains 的开源项目里有一个叫skiko的项目」,Skiko (Kotlin 的 Skia 的缩写) 是一个图形库,它支持 Kotlin/JVM、Kotlin/JS、Kotlin/Native 等相关实现,目前支持有:
  • Kotlin/JVM - Linux、Windows、macOS、Android
  • Kotlin/JS - web
  • Kotlin/Native - iOS 、macOS
如果从这个角度看 Compose Multiplatform 未来的方向会和 Flutter 很像,甚至因为 Flutter 走过更多的坑,所以 Compose Multiplatform 在对接 Skia 上可以有更多的参考。
其实未来 Linux、Windows 等平台也完全可以脱离 JVM 通过 Kotlin/Native + Skiko 实现支持,只是维护成本会变高。

「Flutter 在自建渲染引擎上其实已经越来越激进,因为直接使用 Skia 已经无法满足日益增长的 Bug 和性能极限,所以官方开始了自研渲染引擎 Impeller」 因为 Flutter 团队现在出现问题每次都要和 Skia 团队沟通,然后等跟进,这样的节奏太慢了,从官方的更新日志上就可以看出目前 Flutter 的迭代速度依然很夸张。292120b4-82bf-11ed-bfe3-dac502259ad0.png

所以「这次自研的 Impeller 本质上是为了解决 Skia 需要运行时遇到的问题,Impeller 可以直接在编译器就完成 GLSL 和 MSL,不需要 SKSL 从而提高了性能和运行时的稳定性」,目前优先在 iOS 平台上开始支持,配合 Metal 做优化,后续如果没问题也会同步支持 Android 和 Vulkan。

从这个角度猜测,Flutter 在 Skia 遇到的问题 Compose Multiplatform 也很可能会遇上,而如果后续 Impeller 项目进展顺利,那它或者并不会局限在 Flutter,也许也可以拓展支持到 Compose Multiplatform 上。

其实自研发引擎并不奇怪,随着项目的发展和深入,很多底层问题没办法快速推进就会反推自研,例如Hermes 在 RN 0.7 成为默认 Engine也是类似问题的体现,「自研底层属于是一个负责任的开源团队的必经之路」

最后

今天这篇文章的内容更多的是科普性质而非技术性,主要是针对目前 KMM、Compose 和 Flutter 的现状做一个陈述,其实很多时候它们之间并不冲突,但是作为开发者很经常就像开头一样,用 "对立" 的角度来看 A 火了 B 就要挂,这种心态大可不必。


长按右侧二维码

查看更多开发者精彩分享

294ce884-82bf-11ed-bfe3-dac502259ad0.png

"开发者说·DTalk" 面向295fd822-82bf-11ed-bfe3-dac502259ad0.png中国开发者们征集 Google 移动应用 (apps & games) 相关的产品/技术内容。欢迎大家前来分享您对移动应用的行业洞察或见解、移动开发过程中的心得或新发现、以及应用出海的实战经验总结和相关产品的使用反馈等。我们由衷地希望可以给这些出众的中国开发者们提供更好展现自己、充分发挥自己特长的平台。我们将通过大家的技术内容着重选出优秀案例进行谷歌开发技术专家 (GDE) 的推荐。

2978c33c-82bf-11ed-bfe3-dac502259ad0.gif 点击屏末||即刻报名参与 "开发者说·DTalk"

2987d804-82bf-11ed-bfe3-dac502259ad0.png

299c9cb2-82bf-11ed-bfe3-dac502259ad0.gif

2a27be14-82bf-11ed-bfe3-dac502259ad0.png


原文标题:一文快速带您了解 KMM、Compose 和 Flutter 的现状 | 开发者说·DTalk

文章出处:【微信公众号:谷歌开发者】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 谷歌
    +关注

    关注

    27

    文章

    6271

    浏览量

    112291

原文标题:一文快速带您了解 KMM、Compose 和 Flutter 的现状 | 开发者说·DTalk

文章出处:【微信号:Google_Developers,微信公众号:谷歌开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    开源鸿蒙开发者大会 | 匠芯创OpenHarmony轻智能方案,让开发告别繁琐

    5月28日,以“AI@OpenHarmony”为主题的开源鸿蒙开发者大会2026在广州隆重举行。大会汇聚全球顶尖开发者、生态伙伴与行业专家,共探AI时代下开源操作系统的技术演进与生态建设之路。作为
    的头像 发表于 05-28 19:12 237次阅读
    开源鸿蒙<b class='flag-5'>开发者</b>大会 | 匠芯创OpenHarmony轻智能方案,让<b class='flag-5'>带</b>屏<b class='flag-5'>开发</b>告别繁琐

    建言有礼 | RA 生态社区再次升级,共筑更懂开发者的 RA 家园!

    效解决的技术痛点、更丰富的生态体验,我们决定:把决定权交给每位用户!即日起,RA生态社区正式面向全体开发者、工程师、合作伙伴公开征集升级建议,
    的头像 发表于 04-15 17:43 824次阅读
    建言有礼 | RA 生态社区再次升级,共筑更懂<b class='flag-5'>开发者</b>的 RA 家园!

    TikTok使用Jetpack Compose提升开发者工作效率

    TikTok 是个全球短视频平台,以海量的用户群体和极具创新性的功能而闻名。其团队不断为用户发布更新、进行实验并上线新功能。在保持高速迭代与应对技术债的双重挑战下,TikTok Android 团队选择了 Jetpack Compose
    的头像 发表于 03-31 09:11 519次阅读

    2025华为开发者大赛暨开发者年度会议成功举办

    12月27日-12月28日,以“成就AI原生时代先锋开发者”为主题的2025华为开发者大赛暨开发者年度会议在上海华为练秋湖研发中心举办。本次会议旨在汇聚先锋开发力量,搭建开放共赢的生态
    的头像 发表于 12-31 13:32 1210次阅读

    探秘 CYSBSYSKIT - DEV - 01 快速物联网连接开发者套件

    快速物联网连接开发者套件凭借其独特的设计和强大的功能,为开发者们搭建了个便捷的开发平台。本文将详细介绍该套件的
    的头像 发表于 12-21 15:35 989次阅读

    Flutter 移动端开发:集成淘宝 API 实现商品数据实时展示 APP

    在电商蓬勃发展的当下,移动端购物成为主流趋势。对于开发者而言,利用 Flutter 构建个能够实时展示淘宝商品数据的 APP,既能满足用户便捷获取商品信息的需求,也能为电商业务拓展新的渠道
    的头像 发表于 11-13 09:36 593次阅读

    元服务发布配置开发者服务信息

    作为开发者的相关信息将面向元服务发布区域的用户公开,其中客服联系方式可能会提供给用户,用于咨询相关问题。 登录AppGallery Connect,点击“APP与元服务”。 选择要发布的元服务
    发表于 10-31 17:58

    2025开放原子开发者大会11月启幕

    开发者年度盛会即将登场!2025开放原子开发者大会将于11月21-22日,在北京北人亦创国际会展中心盛大召开。大会以“切为了开发者”为主题,汇聚全球开源智慧——国内外优秀
    的头像 发表于 10-24 14:05 1233次阅读

    NVIDIA DRIVE AGX Thor开发者套件重磅发布

    这款由 NVIDIA DriveOS 7 驱动的开发者套件能够帮助开发者们打造出更安全的智能汽车和交通解决方案。
    的头像 发表于 09-04 11:20 1765次阅读

    曙光网络SugonRI开发者社区正式上线

    在人工智能与工业深度融合的大潮中,工业软件正在成为推动产业升级的关键引擎。为了让更多开发者快速掌握工业级编程技术、共享行业实践成果,曙光网络正式推出开发者社区——曙睿(SugonRI)开发者
    的头像 发表于 09-04 09:58 1273次阅读

    Android Studio中的Gemini全面支持Dart和Flutter开发

    在 Android Studio 中创建 Android 应用的 Flutter 开发者将迎来次重大的飞跃: Android Studio 中的 Gemini 已全面支持 Dart
    的头像 发表于 08-06 13:52 1643次阅读
    Android Studio中的Gemini全面支持Dart和<b class='flag-5'>Flutter</b><b class='flag-5'>开发</b>

    迅龙软件参加昇腾 AI 开发者创享日・广东站,为开发者打造沉浸式实操体验

    7月18日,线下顶尖人才汇聚的开发者盛会——昇腾AI开发者创享日・广东站在广州举行。活动以“创未来享非凡”为主题,聚焦广东本地产业特点,分享前沿AI创新技术,搭建生态交流平台,帮助开发者全面
    的头像 发表于 07-23 17:18 1505次阅读
    迅龙软件参加昇腾 AI <b class='flag-5'>开发者</b>创享日・广东站,为<b class='flag-5'>开发者</b>打造沉浸式实操体验

    HDC 2025开发者主题演讲精彩回顾

    开发者解决方案升级等内容,同时多位生态伙伴分享基于HarmonyOS的最新开发实践,为开发者提供切实可行的创新思路,进步推动鸿蒙生态的繁荣发展。会上还举行了HarmonyOS极客马拉
    的头像 发表于 07-09 11:20 1583次阅读

    使用 Flutter SDK 3.27.4构建HarmonyOS应用

    /flutter_fluttergit checkout -b oh-3.27.4-dev origin/oh-3.27.4-dev   下载下来之后就可以配置开发环境啦。 配置开发环境 配置好后
    的头像 发表于 06-11 09:15 1211次阅读

    Flutter on Raspberry Pi:从入门到精通的完整指南!

    Flutter。通过遵循本文中概述的步骤,你将获得在树莓派上设置Flutter的知识和信心。无论你是初学者还是经验丰富的Flutter开发者,本指南都将确保你对过程有清晰的
    的头像 发表于 06-06 15:37 1836次阅读
    <b class='flag-5'>Flutter</b> on Raspberry Pi:从入门到精通的完整指南!