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

当然,Kotlin Multiplatform 和 Compose Multiplatform 虽然都是 JetBrains 维护的项目,它们经常被一起提及,但是他们其实是两个项目 :
- Kotlin Multiplatform:提供了 Kotlin 的跨平台
- Compose Multiplatform:Compose UI 的跨平台框架,提供 UI 跨平台能力
用 JB 官方的话说就是:借助 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 支持的几乎完全重写。
K2 模式下除了编译性能的巨大提升之外,在 Kotlin 代码分析、补全和导航速度方面也取得了巨大进步:

其实这些年随着 Kotlin 的发展,其本身的性能表现已经相当不错,例如在 bddicken/languages 的语言基准测试比较的图形化展示上看,Kotlin 的整体性能表现就挺不错:

还有一个有意思的更新在于,Kotlin Multiplatform 未来将采用基于 JetBrains Fleet 定制的独立 IDE ,而在官方调整过的 Kotlin Multiplatform Roadmap 优先关键事项里,可以看到其中就包含了「独立的 Kotlin Multiplatform IDE,专为多平台开发量身定制的开发环境」的相关内容:

其实在此之前, Kotlin Multiplatform 官方就开始推荐使用 JetBrains Fleet 作为开发工具,而这次是更激进的采用基于 JetBrains Fleet 的独立 Kotlin Multiplatform IDE 的计划,其核心在于:
- Fleet 里可以在 Kotlin 代码直接跳转到对应的 Swift 代码:

- Fleet 里 rename 操作可以自动同时关联 Swift 和 Kotlin :

- 在 Fleet 里 debug 断点可以同时作用 Swift 和 Kotlin :

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

满足条件的情况下 klibs.io 平台自动爬出统计
当然,既然是跨平台,肯定少不了 2024 主角之一的鸿蒙, 在 2024 Kotlin 中文开发者大会里,许多大厂都分享了 KMP 适配鸿蒙的事件,而这在过去一段时间已经引起了官方的注意,Kotlin 编译组的 lead 表示,他们也在研究如何在 KMP 中支持 Harmony0S:

目前群组的讨论大概分成两部分:
- 一方提议可以通过重新使用 Kotlin/JS 编译器,直接生成 ArkTS (而不是JS),这样做可以重新使用 Kotlin/JS 生态系统中已经拥有的 TypeScript 互操作性,另一个好处是将重新使用 HarmonyOS 工具链的所有其他部分,而通过 Kotlin/Native 会有两个运行时和两个独立的垃圾回收器,维护成本更高,同时也有大佬表示,在他们 Top 级别应用下 Kotlin/JS 转换下的性能还不错。
- 而另一方则认为 Kotlin/JS 整体性能较差,国内 Top 企业在鸿蒙适配中,经常使用 C API 而不是 TS API ,因为它可以带来更好的性能,这也是为什么 Kotlin/Native 在适配中被更多 Top 企业作为最终方案的理由,所以明显 Compose + Kotlin/Native 的路线更合适,比如 ArkTS(release) 和 Kotlin/Native(release) 之间 n 体问题的性能测试下,Kotlin/Native 性能甚至可以比 ArkTS 快 10 倍。
当然最终 KMP 官方是否会确认支持,或者说才去 Kotlin/JS 还是 Kotlin/Native 方案,具体还要等 2025 的最终讨论结果。
最后,到 2025 年,JetBrains 将专注于增强 Kotlin Multiplatform 生态系统,包括将 Compose Multiplatform for iOS 升级到稳定版、Kotlin-to-Swift 导出支持和前面提到的一体化 KMP IDE 的公开版本等。
希望 2025 年 KMP 和 Compose 能正式全平台落地,感谢这个百花齐放的时代~
相关文章:
KMP 2024 年总结,Kotlin 崛起的一年
2024 Google I/O 上正式官宣了 KMP(Kotlin Multiplatform)项目,它是 Google Workspace 团队的一项长期「投资」项目,由 JetBrains 开发维护和开源的项目,简单来说,JetBrains 主导,Google Worksp…...
leecode188.买卖股票的最佳时机IV
这道题目我在买卖股票III就已经得出规律了,具体可看买卖股票的最佳时机||| class Solution { public:int maxProfit(int k, vector<int>& prices) {int nprices.size();vector<vector<int>> dp(n,vector<int>(2*k1,0));for(int j1;j&l…...
分布式消息队列RocketMQ
一、RocketMQ概述 1.1 MQ 概述 MQ,Message Queue,是一种提供消息队列服务的中间件,也成为消息中间件,是一套提供了消息生产、存储、消费全过程API的软件系统。消息即数据 1.2 MQ 用途 MQ的用途总结起来可分为以下三点 限流削峰…...
诗韵--代码之外的生活:2025 元旦歌
2025 元旦歌 1 说明2 正文3 简评 1 说明 又是一年元旦,在公司抽个空,写首诗纪念一下。 本系列博客:诗韵–代码之外的生活 2 正文 2025 元旦歌 一年又一年, 又到新元旦。 恍若零五年, 已是二五年。 工作忙连连&#x…...
SpringBoot项目启动的时候,指定jvm内存大小的3种方式
1. 通过命令行固定参数 在命令行中运行 Spring Boot 应用程序时,可以使用 -Xms 和 -Xmx 选项指定初始和最大堆内存大小。例如: java -Xms512m -Xmx1024m -jar mySpringBootApp.jar 优点: 简单明了 缺点: 是写死的,…...
学习vue3的笔记
一、vue和react的对比 1、基础介绍 vue:https://cn.vuejs.org/ vue3是2020年创建的 react:https://react.dev/ react是一个2013年开源的JavaScript库,严格意义上来说不是一个框架 2、diff算法 两个框架采用的都是同级对比策略 两节点对…...
MySQL UNION
关于《MySQL UNION》的操作,我查找到了一些有用的信息。 MySQL的UNION操作符用于将两个或多个SELECT语句的结果组合到一个结果集中,并去除重复的行。每个SELECT语句的列数和对应位置的数据类型必须相同。其基本语法格式如下: SELECT column…...
day21-ubuntu入门
小趣味docker 1.安装docker,从阿里云的yum yum install docker -y 2.需要提前准备好docker镜像,确保可用 docker -v 3.导入该游戏镜像(先用systemctl start docker) docker load < game_v2.tar 4.一条命令,在…...
开发小工具:ping地址
开发小工具:ping地址 import socketdef tcp_port_scan(ip,port):#创建套接字socksocket.socket(socket.AF_INET,socket.SOCK_STREAM)#设置超时sock.settimeout(0.2)try:#发请求result sock.connect_ex((ip,port))if result 0:print(f{ip}--{port}接口连接成功)res…...
在 Python 中使用 ADX 进行算法交易
在阅读本文前,可查阅以往文章: 技术指标-ATR 技术指标有几个分支,其中趋势指标使用最广泛。这些工具可帮助交易者确定市场趋势的方向和强度,使他们能够相应地调整交易。如果趋势指标得到有效应用,它们通常会产生积极的结果。 在…...
Unity 3D 从入门到精通:开启游戏开发的奇幻之旅
一、引言 在当今数字化的时代,游戏产业蓬勃发展,成为了全球娱乐领域的重要支柱。Unity 3D 作为一款功能强大、跨平台的游戏开发引擎,凭借其易用性、高效性和丰富的资源,吸引了无数开发者投身于游戏创作的世界。无论是独立开发者怀…...
神经网络-VggNet
2014年VggNet被推出,获取了ILSVRC2014比赛分类项目的第二名,第一名是GoogleNet,该网络在下节介绍,本节主要介绍VggNet。 VggNet可以称为是一个家族,根据层数的不同包括了A、A-LRN、B、C、D等网络结构,其中…...
用AI生成PPT,告别繁琐,一键生成高效方案
用AI生成PPT,告别繁琐,一键生成高效方案!制作PPT曾经是一件非常繁琐的工作。让人又爱又恨,爱的是它可以让你的想法可视化,恨的是,要做出一份精美的PPT,往往需要耗费大量时间和精力。现在AI技术的…...
基于 `android.accessibilityservice` 的 Android 无障碍服务深度解析
基于 android.accessibilityservice 的 Android 无障碍服务深度解析 目录 引言无障碍服务概述架构设计核心功能设计模式核心要点实现细节性能优化安全与隐私案例分析未来展望结论引言 在当今的移动应用生态系统中,无障碍服务(Accessibility Service)扮演着至关重要的角色。…...
UE5材质节点Frac/Fmod
Frac取小数 Fmod取余数 转场效果 TimeMultiplyFrac很常用 Timesin / Timecos 制作闪烁效果...
【微服务】【Sentinel】认识Sentinel
文章目录 1. 雪崩问题2. 解决方案3. 服务保护技术对比4. 安装 Sentinel4.1 启动控制台4.2 客户端接入控制台 参考资料: 1. 雪崩问题 微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,这就是雪崩。动图演示: 在微服务系统…...
Kafka 性能提升秘籍:涵盖配置、迁移与深度巡检的综合方案
文章目录 1.1.网络和io操作线程配置优化1.2.log数据文件刷盘策略1.3.日志保留策略配置1.4.replica复制配置1.5.配置jmx服务1.6.系统I/O参数优化1.6.1.网络性能优化1.6.2.常见痛点以及优化方案1.6.4.优化参数 1.7.版本升级1.8.数据迁移1.8.1.同集群broker之间迁移1.8.2.跨集群迁…...
小程序租赁系统构建指南与市场机会分析
内容概要 在当今竞争激烈的市场环境中,小程序租赁系统正崭露头角,成为企业转型与创新的重要工具。通过这个系统,商户能够快速推出自己的小程序,无需从头开发,节省了大量时间和资金。让我们来看看这个系统的核心功能吧…...
SOME/IP 协议详解——远程过程调用(RPC)
文章目录 1. 传输协议绑定1.1 UDP 绑定1.2 TCP 绑定1.3 多服务实例(重要)1.4 通过 UDP 传输大型 SOME/IP 消息(SOME/IP - TP) 2. 请求 / 响应通信3. Fire&Forget 通信4. 通知事件5. 字段6. 错误处理6.1 返回码6.2 错误消息6.3…...
C++ 设计模式:命令模式(Command Pattern)
链接:C 设计模式 链接:C 设计模式 - 访问者模式 命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队或记录请求日志…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
