Compose Multiplatform 1.6.10 发布,解释一些小问题, Jake 大佬的 Hack

虽然一直比较关注跨平台开发,但其实我很少写 Compose Multiplatform 的内容,因为关于 Compose Multiplatform 的使用,其实我并没在实际生产环境上发布过,但是这个版本确实值得一提,因为该版本包含:

iOS Beta 版本,Web Alpha

上一次发布 Compose for iOS Alpha 过去一年了,iOS 终于迎来了 Beta 支持,相信 Stable 版本也快了,另外前几天发布的 《Google 正式支持 Kotlin Multiplatform》 的内容也有一些比较有意思评论问题,就顺便一起简单回复下,毕竟 Compose Multiplatform 和 Kotlin Multiplatform 其实密不可分。

刚好 KotlinConf’24 上 Jake Wharton 也发布了有趣的“暴论” ,值得一提了解下。

1.6.10

iOS

从 1.6.10 开始,Compose Multiplatform 正式发布 iOS Beta 支持,主要新增包括:

  • 由于新的 scroll physics ,native text fields 、window insets 、 text selection 和放大工具的完善,现在 iOS 上的交互可以更加自然,接近原生效果
  • Popups 和 dialog 等控件体验得到优化
  • 针对 ProMotion 进行了调整,支持 120 Hz 的动态刷新率
  • 增加了对 iOS 辅助功能的支持 - 包括 VoiceOver、字体和缩放偏好设置以及accessibility tree的同步
  • 可以使用新的通用 DSL 进行 UI 测试
  • 几个重要的 Material 3 组件如:DatePickerAlertDialogDropdownMenuModalBottomSheetSearchBar 等都针对 iOS 进行了适配。

可以看到,iOS 跨平台支持上,其实不外乎在 UI 一致性的同时,让交互体验有用更贴近 iOS 交互的可选配置。

Web

本次 experimental 的 Web 平台终于也迈向了 Alpha ,基本上大部分 Compose PC 上的能力也开始正式可以在 Web 上使用,这里值得一提的是, Web 采用的是 WebAssembly(Wasm) 模式去运行 ,可以看到 Wasm 路线基本是 Google 内部的共识了。

其他

Compose 编译器已合并到 Kotlin 代码库中,后续 Compose 编译器插件和具有相同版本号的 Kotlin 版本将始终兼容并将一起发布,例如 Kotlin 2.0.10 和 Compose 编译器插件 2.0.10 ,所基于 Compose Multiplatform 1.6.10 也完全支持 Kotlin 2.0.0+ 。

另外 Jetpack Compose Navigation 现在在 Compose Multiplatform 也开始支持实验性接入。

BasicTextField2 已可以在 PC 端使用,虽然目前还有一些已知问题,例如不支持 IME 事件,无法使用虚拟键盘输入中文、日语或韩文等,计划 1.7.0 版本全面支持该组件功能并支持其他平台。

更多可见 :https://www.jetbrains.com/help/kotlin-multiplatform-dev/whats-new-compose-1610.html#across-platforms

问题

1、需要 JVM 才能使用

首先 Kotlin Multiplatform 是可以不需要 JVM 的,例如在移动端,用 Kotlin 写的共享代码,会通过 Kotlin/JVM 编译为适用于 Android 的 JVM 字节码,通过 Kotlin/Native 编译为适用于 iOS 的本机二进制文件。

其实这也是 Kotlin Multiplatform 在做的,Kotlin Native 可以说是 Kotlin Multiplatform 的重点之一,不管是在 iOS 上还是 Web 上,正如回复所说的,新的 Kotlin 编译器 提高了 Kotlin/Native 的性能,从而提高了 Kotlin Multiplatform 的整体性能 ,所以 Multiplatform 的未来肯定是「无需 JVM」 。

2、适配鸿蒙

这是一个很“严峻”的问题,因为鸿蒙 Next 马上就要来了,不管你喜不喜欢,鸿蒙 Next 上没有 JVM 这是一个无法忽视的问题,虽然说 Next 就算正式发布也肯定不会突袭断代,但是在适配支持上这是一个不可忽视的“需求”。

没有 JVM 的情况下, Kotlin Multiplatform 适配鸿蒙似乎也就是 Kotlin Native 这条路可以走,那么这时候是否应该会有一个 Group 出来「扛大旗」,对于国内用户来说还是一个十分重要的需求

3、Compose MultiPlatform UI跨平台原理是什么?

对于 Compose MultiPlatform 来说,跨平台主要颗心就是独立的 Skia 渲染引擎,其实就算是在 Android 平台,Jetpack Compose 本身也是独立的一套渲染树,在 Android 平台 Jetpack Compose 对于 XML 布局也是完全不一样的 「Box」 渲染的 LayoutNode tree 。

说到这个,就不得不提到 Jetbrains 的 Skiko (Kotlin 的 Skia 的缩写),简单说,它就是将 Kotlin MPP 绑定到 Skia ,它将 Skia API 的大部分能力公开给 Kotlin,从而实现跨平台支持。

之所以聊 Skiko ,就是为了提一下在 KotlinConf’24 上 Jake Wharton 聊 Skiko 时发布了有趣的“暴论” :RIP Flutter ,大佬不愧是大佬,一句调侃直接把评论区干爆了。

鉴于 Jake 大佬一直以来都是 Dart 黑,Jake 大佬历来都喜欢 “调侃” Flutter/ Dart ,这也属于常规操作,不过👆上述那个视频还是挺有趣的,有时间大家还是可以看看:

视频里主要讲的是 Jake Wharton 发现了一款很有趣的产品 ORVIBO Matter Smart Touchscreen Dimmer ,它是一个带有屏幕的智能开关,它来自中国,并且有趣的是它采用了 Flutter 编写应用 ,在大会上 Jake 展示了如何用 Hack 把 Compose UI 绘制到上面

参考资料: https://www.youtube.com/live/xW39RKtwolA?si=luxofIAR–4earLr 、https://community.home-assistant.io/t/orvibo-v70x-mixpad-d1/500842/20

最后

不得不说,Jake 大佬还是流量满满,同时也依然不忘恶搞 Flutter/Dart ,另外这次 KotlinConf’24 上 Jake 展示的例子也很有趣,展示出来 Compose 在多平台上更多的可能。

目前 Compose Multiplatform 目前在多平台支持上还需要多努力,特别 Kotlin Native 需要做的适配还不少, Native 的社区丰富也需要努力努力,当然,要是有 Team 能适配到鸿蒙就更有市场了。

那么,你会选择 Compose Multiplatform 去做跨平台吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/21008.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库(15)——DQL分页查询

DQL分页查询语法 SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数; 注:起始索引从0开始,起始索引(查询页码-1)*每页显示记录数。 如果查询的是第一页,可以省略起始索引。 示例:查询第一页…

【考研数学】概率论如何复习?跟谁好?

概率论一定要跟对老师,如果跟对老师,考研基本上能拿满分 概率论在考研试卷中占比并不大,其中: 高等数学,90分,约占比60%; 线性代数,30分,约占比20%; 概率论与数理统计&#xff0…

hive中的join操作及其数据倾斜

hive中的join操作及其数据倾斜 join操作是一个大数据领域一个常见的话题。归根结底是由于在数据量超大的情况下,join操作会使内存占用飙升。运算的复杂度也随之上升。在进行join操作时,也会更容易发生数据倾斜。这些都是需要考虑的问题。 过去了解到很…

每日5题Day15 - LeetCode 71 - 75

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;71. 简化路径 - 力扣&#xff08;LeetCode&#xff09; class Solution {public String simplifyPath(String path) {Deque<String> stack new LinkedList…

mysql的增删查改(进阶)

目录 一. 更复杂的新增 二. 查询 2.1 聚合查询 COUNT SUM AVG MAX MIN 2.1.2 分组查询 group by 子句 2.1.3 HAVING 2.2 联合查询/多表查询 2.2.1 内连接 2.2.2 外连接 2.2.3 全外连接 2.2.4 自连接 2.2.5 子查询 2.2.6 合并查询 一. 更复杂的新增 将从表名查询到…

自动化办公01 smtplib 邮件⾃动发送

目录 一、准备需要发送邮件的邮箱账号 二、发送邮箱的基本步骤 1. 登录邮箱 2. 准备数据 3. 发送邮件 三、特殊内容的发送 1. 发送附件 2. 发送图片 3. 发送超文本内容 4.邮件模板内容 SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;即简单邮件传输协议…

霍夫曼树教程(个人总结版)

背景 霍夫曼树&#xff08;Huffman Tree&#xff09;是一种在1952年由戴维霍夫曼&#xff08;David A. Huffman&#xff09;提出的数据压缩算法。其主要目的是为了一种高效的数据编码方法&#xff0c;以便在最小化总编码长度的情况下对数据进行编码。霍夫曼树通过利用出现频率…

【Qt秘籍】[009]-自定义槽函数/信号

自定义槽函数 在Qt中自定义槽函数是一个直接的过程&#xff0c;槽函数本质上是类的一个成员函数&#xff0c;它可以响应信号。所谓的自定义槽函数&#xff0c;实际上操作过程和定义普通的成员函数相似。以下是如何在Qt中定义一个自定义槽函数的步骤&#xff1a; 步骤 1: 定义槽…

<jsp:setProperty>设置有参构造函数创建的自定义对象的属性

假设某一个类&#xff08;如TextConverter类&#xff09;有一个无参构造函数和一个有参构造函数&#xff0c;我们可以在Servlet里面先用有参构造函数自己new一个对象出来&#xff0c;存到request.setAttribute里面去。 Servlet转发到jsp页面后&#xff0c;再在jsp页面上用<j…

django基于大数据+Spring的新冠肺炎疫情实时监控系统设计和实现

设计一个基于Django(后端)和Spring(可能的中间件或服务集成)的新冠肺炎疫情实时监控系统涉及多个方面,包括数据收集、数据处理、数据存储、前端展示以及可能的中间件服务(如Spring Boot服务)。以下是一个大致的设计和实现步骤: 1. 系统架构 前端:使用Web框架(如Reac…

三种字符串的管理方式

NSString的三种实现方式 OC这个语言在不停的升级自己的内存管理&#xff0c;尽量的让自己的 OC的字符串 问题引入 在学习字符串的过程中间会遇到一个因为OC语言更新造成的问题 例如&#xff1a; int main(int argc, const char * argv[]) {autoreleasepool {NSString* str1 …

C++核心编程类的总结封装案例

C类的总结封装案例 文章目录 C类的总结封装案例1.立方体类的封装2.点与圆的关系的封装3.总结 1.立方体类的封装 在C中&#xff0c;我们可以定义一个立方体&#xff08;Cube&#xff09;类来封装立方体的属性和方法。立方体的属性可能包括边长&#xff08;side length&#xff…

【redis】set和zset常用命令

set 无序集合类型 sadd 和 smembers SADD&#xff1a;将一个或者多个元素添加到set中。注意,重复的元素无法添加到set中。 语法&#xff1a;SADD key member [member] 把集合中的元素,叫做member,就像hash类型中,叫做field类似. 返回值表示本次操作,添加成功了几个元素. 时间复…

网络原理——http/https ---http(1)

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 网络原理 HTTP/HTTPS HTTP,全称为"超文本传输协议" HTTP 诞⽣与1991年. ⽬前已经发展为最主流使⽤的⼀种应⽤层协议. 实际上,HTTP最新已经发展到 3.0 但是当前行业中主要使用的HT…

概念解析 | 为什么SAR中的天线间隔需要是四分之一波长?

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:为什么SAR中的天线间隔需要是四分之一波长 概念解析 | 为什么SAR中的天线间隔需要是四分之一波长? 在这篇文章中,我们将深入探讨**合成孔径雷达(SAR)**系统中,为什么天…

明日周刊-第12期

以前小时候最期待六一儿童节了&#xff0c;父母总会给你满足一个愿望&#xff0c;也许是一件礼物也许是一次陪伴。然而这个世界上其实还有很多儿童过不上儿童节&#xff0c;比如某些地区的小孩子&#xff0c;他们更担心的是能不能见到明天的太阳。 文章目录 一周热点航天探索火…

LeetCode-77. 组合【回溯】

LeetCode-77. 组合【回溯】 题目描述&#xff1a;解题思路一&#xff1a;回溯背诵版解题思路三&#xff1a;0 题目描述&#xff1a; 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&a…

Python怎么使用 SQLAlchemy 和model 查询数据呢?

SQLAlchemy是一个流行的Python SQL工具包和对象关系映射器&#xff08;ORM&#xff09;。 假设正在使用 SQLAlchemy 并有一个模型 MyModel&#xff0c;使用这个模型以及 query 方法来查询数据库。 这里有一个基本的例子&#xff0c;说明如何使用 SQLAlchemy 的 query 方法和 wi…

算法-对列表元素划分成两个和值最大且相等的子列表

现有私募基金发行一支特殊基金产品&#xff0c;该基金认购人数上限不超过 30 人&#xff0c; 募集总金额不超过 3000W&#xff0c;每个投资人认购金额不定。该基金只能将募集到的钱用于投资两支股票&#xff0c;且要求两支股票投资金额必须相同&#xff0c;且每位投资人的钱只能…

0X JavaSE-- 集合框架【Collection(List、Set、Queue)、Map】

每一个集合类底层采用的数据结构不同&#xff0c;例如ArrayList集合底层采用了数组&#xff0c;LinkedList集合底层采用了双向链表&#xff0c;HashMap集合底层采用了哈希表&#xff0c;TreeMap集合底层采用了红黑树。**集合中存储的是引用。**即。集合中存放的是对象的地址&am…