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.pswp.cn/bicheng/21008.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21008.shtml
英文地址,請注明出處:http://en.pswp.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…