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 去做跨平台吗?

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝牙模块、WiFi模块等无线通信模块使用规范

在当今的科技时代,无线通信模块已经广泛应用于各类电子设备中。特别是蓝牙模块、WiFi模块等无线模块,它们为设备间的通信提供了便利,使得我们的生活更加便捷和高效。然而,为了确保这些无线模块正常工作并避免可能的安全隐患&#…

IDEA创建Spring Boot项目

1 打开新建项目界面 如图1,打开IDEA,点击菜单栏的File->New->Project,打开新建项目界面。 图1 新建项目 2 填写项目信息 在新建项目界面点击左侧工具栏的Spring Initializr选项,进行Spring Boot项目信息的填写&#xff…

kettle之 Concat fields将字符串拼接起来

用到两个组件,一个是文本文件输入,一个是 Concat fields 成功截图 文本文件输入 根据;将文本内容分成两部分,第一部分是a,第二部分是b Concat fields 运行即可 这里的Fields是上一个步骤里面的输出的字段名称 TargetField Nam…

# window10 设置一个【自定义运行】命令行快捷方式

window10 设置一个【自定义运行】命令行快捷方式 window10 [运行】命令行打不开,可采用如下简单快捷方法: 1、右键点击桌面空白处,然后点击【新建】,再点击【快捷方式】。 2、在【请键入对象的位置】文本框输入: exp…

【JavaEE进阶】——一万字带你深刻理解Spring IoCDI

目录 🚩Spring是什么 🎈什么是容器? 🎈什么是 IoC? 📝传统开发思路 📝IOC思想 📝IoC 优势 🎈DI 介绍 🚩IoC 详解 🎈Bean的存储 &#x…

Zoho Campaigns邮件营销怎么发邮件?

Zoho Campaigns,作为业界领先的邮件营销平台,以其强大的功能、用户友好的界面以及深度的分析能力,为企业提供了一站式的邮件营销解决方案,助力企业高效地触达目标受众,构建并巩固庞大的客户基础。云衔科技为企业提供Zo…

羊毛纤维直径检测 — C++

羊毛纤维检测 系统是 Ubuntu20.04 。 需要用到 OpenCV 的库,库具体该怎么编译配置,可以参考网上的教程。 自己码的一小段函数,用纯 CV 的方式处理羊毛纤维图像,如图所示: 在 wool 下面,创建 build 文件…

Redis 实战 - 缓存异常及解决方案

文章目录 概述一、缓存穿透1.1 缓存穿透是什么1.2 解决方案 二、缓存击穿2.1 缓存击穿是什么2.2 解决方案 三、缓存雪崩3.1 缓存雪崩是什么3.2 解决方案 四、拓展4.1 缓存预热4.2 缓存降级 五、结语 把今天最好的表现当作明天最新的起点…….~ 概述 在实…

常见web安全漏洞

一、信息泄露 概念 信息泄露是由于Web服务器或应用程序没有正确处理一些特殊请求,泄露Web服务器的一些敏感信 息,如用户名、密码、源代码、服务器信息、配置信息等。 造成信息泄露主要的三个原因: ①Web服务器配置存在问题,导致一些系统…

mac 安装java jjdk8 jdk11 jdk17 等

oracle官网 https://www.oracle.com/java/technologies/downloads/ 查看当前电脑是英特尔的x86 还是arm uname -m 选择指定版本,指定平台的安装包: JDK8 JDK11的,需要当前页面往下拉: 下载到的安装包,双击安装&#x…

扭蛋机小程序开发,数字化发展对行业带来的优势

随着科技的不断进步和大众对娱乐消费需求的提高,线上扭蛋机得到了快速发展,市场规模不断扩大。线上扭蛋机是基于淘宝的小程序,它以电商的模式让消费者进行虚拟扭蛋,获得各类商品,扭蛋机小程序中的商品包括玩具、IP周边…

【百度智能体】零代码创建你的 AI 宠物助手

前言 今天给大家介绍一下百度的 AI 产品 – 百度智能体,在文心智能体平台你可以0代码就可以创建出属于自己的 AI 机器人,几乎可以选择任何你想要的领域或者行业机器人,进行无代码打造自己的对话助手,本文将介绍文心智能体&#x…

3D技术的应用领域

3D技术在现代科技和工业中有广泛的应用,其涵盖的领域非常广泛,从娱乐到医学,再到制造业和建筑,3D技术正在改变我们理解和互动的方式。以下是一些主要的应用领域。北京木奇移动技术有限公司,专业的软件外包开发公司&…

单点登录与JWT

JWT:JSON Web Token JWT的作用是用户授权(Authorization),而不是用户的身份认证(Authentication) 授权(Authorization)vs认证(Authentication) 用户认证指的是使用用户名、密码来…

RedHat9 | 配置与管理DNS服务器

一、 知识预备 1、DNS服务器的分类 主DNS服务器 主DNS服务器复制维护所管辖域的域名服务信息,它从域管理员构造的本地磁盘文件中的加载域信息。该文件包含服务器具有管理权的的一部分域结构的精确信息,配置主域服务器需要一整套配置文件: …

瑜伽馆约课会员管理系统小程序的作用是什么

瑜伽馆有着众多学员,如瘦身、改变气质、减脂塑形等往往属于长期多次跟随教练学习,或是自己在家里学习等,对商家来说,品牌宣传、吸引客户到店以及长期经营、提高自身服务效率是重中之重。 客户多次进店享受服务的同时还需要悦己&a…

关于单元测试

关于单元测试的一些总结:

紧固件松动的危害及原因——SunTorque智能扭矩系统

智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 紧固件松动,这一看似微小的机械问题,实际上可能引发一系列严重的后果。在机械设备中,紧固件扮演着至关重要的角色,它们通过紧固作用将各个部件紧密连接在一起,…

学浪视频怎么下载保存到本地

你是否曾经因为想要保存一份珍贵的学浪视频却苦于无法下载而感到烦恼?现在,我将向你揭示一个简单易行的方法,让你轻松地将学浪视频保存到本地,随时随地享受学习的乐趣。你是否曾经因为想要保存一份珍贵的学浪视频却苦于无法下载而…

vue-3d-loader 加载多个模型

需求 1、在使用three.js进行开发的过程中,需要列表加载多个模型,并根据需要多模型进行加载。 2、当鼠标移动到图片上去的时候,开始加载模型, 模型进行加载和展示。 3、在制作3d沉浸式商城时,需要根据需求&#xff0…