JetBrains聯合谷歌搞事情!首發穩定版Kotlin跨平台開發框架!

2023-11-03     51CTO

原標題:JetBrains聯合谷歌搞事情!首發穩定版Kotlin跨平台開發框架!

近來,傳聞中一直在和谷歌「搞事」的JetBrains為跨平台領域帶來了一個突破性的消息:發布了Kotlin Multiplatform的第一個穩定版本,支持跨 iOS、Android、桌面、Web 和伺服器共享代碼。

提到跨平台開發,大家比較熟悉的可能是Flutter、React Native等知名框架。這個新生代又是何方神聖?

其實有熟悉Android開發的朋友可能了解過Kotlin Multiplatform Mobile(KMM)。它是Kotlin Multiplatform(KMP)的組成部分,在2020年就基於Kotlin 1.4發布了第一個版本,但由於一直處在實驗階段,因此了解和使用的人都比較少。如今在JetBrains和谷歌的合力支持下,Kotlin Multiplatform終於開始在跨平台領域嶄露頭角。

Netflix開發者David Henry和Mel Yahya表示,「不同的技術有時會針對特定平台的應用開發進行抽象化或完全取代,而Kotlin Multiplatform則為現有的特定平台提供了有力的技術補充,同時能夠取代與平台無關的業務邏輯。對我們而言,Kotlin Multiplatform是一款工具箱中的新工具,並非會取代整個工具箱。」

圖源:JetBrains官方網站

1、放棄Java,選擇Kotlin

Kotlin Multiplatform顧名思義,主要基於Kotlin語言。Kotlin是由JetBrains開發的一種JVM(Java 虛擬機)語言,並被谷歌採用作為Android開發的主要語言。既然Java已經是為跨平台代碼而設計的,那麼Kotlin Multiplatform增加了什麼?

答案是Kotlin不僅僅是一種JVM語言。Kotlin/Native使用MinGW (Windows的GCC工具鏈)和Android NDK,編譯為macOS、iOS、Linux、Windows的自包含可執行文件。Kotlin/JS將Kotlin轉換為JavaScript。Kotlin Wasm仍處於實驗階段,可編譯為WebAssembly。

使用Kotlin而不是Java的另一個原因是它的語言特性,包括lambda表達式、擴展函數、類型推斷、空安全等。Kotlin沒有checked異常,因為這些不會提高生產力或代碼質量。

Kotlin Multiplatform是一種跨多平台共享非GUI代碼的技術。它解決了代碼共享的兩個常見問題,一則需要在項目中包含的一些平台之間共享某些代碼,二則需要訪問特定平台的API。這也成就了Kotlin Multiplatform的一大亮點:在多平台之間高效重用代碼的同時保留原生編程的優勢。

Kotlin Multiplatform 中的 Expect 和 Actual,滿足了調用原生平台 API 的需求

API 問題通過Expect和Actual聲明機製得到解決。expect 關鍵字用於定義一個多平台通用的聲明,即該聲明在所有平台上都可用,並且需要在特定平台上實現。actual 關鍵字通常與 expect 關鍵字配合使用,用於定義多平台通用的接口和函數,從而允許在不同的平台上使用相同的 API。JetBrains建議只對平台API使用expect/actual,否則使用普通接口。

2022 年的一項調查顯示,Kotlin 多平台應用程式的代碼共享率高達 63%

2、邏輯和UI共享均實現,與Flutter競爭加劇

Kotlin Multiplatform用於非GUI代碼,但有一個相關的項目Compose Multiplatform,用於創建共享的UI。

Compose Multiplatform是基於谷歌的Jetpack Compose的跨平台共享UI聲明式框架。據悉,通過將Kotlin Multiplatform與Compose Multiplatform相結合,開發者不僅將獲得更高的自由度,還可以在Kotlin中實現高達100%的代碼庫共享。

此前KMM主要實現的是共享邏輯,UI層的實現還是建議平台各自去處理,而在Compose Multiplatform加入後,成為了邏輯和UI都可以實現共享的結果。再加上有Android官方推薦的Buff加身,發布穩定版後與Flutter的競爭必然會加劇。

當前Compose Multiplatform在桌面平台、macOS、Linux和Windows上也很穩定,但在iOS上是Alpha版本,在Web上是實驗性的。

如果Compose Multiplatform尚未準備就緒,開發者如何支持iOS呢?這可以通過使用SwiftUI實現,SwiftUI是蘋果的官方UI設計語言,它基於聲明性代碼。有一些代碼示例正是採用了這種方法。

JetBrains還表示,他們的目標是在2024年發布面向iOS的Compose Multiplatform測試版,Kotlin/Wasm也在積極開發中。目前Kotlin Multiplatform和Compose Multiplatform均可免費使用。

3、全球大廠紛紛擁抱:KMM好用在哪裡

面向日趨上升的跨平台開發需求,Kotlin Multiplatform穩定版的首發無疑是一個好消息。保持代碼共享的同時又保留了一定的原生靈活性,允許根據特定平台的需求進行定製和擴展,這讓KMP成為了一個極有潛力的開發框架,為開發者提供了更多的選擇空間。

根據JetBrains官方頁面,Kotlin Multiplatform已經被麥當勞、Netflix和VMWare等公司使用。

今年5月,麥當勞全球移動應用平台技術主管Ryan Sander和首席 Android 開發人員Austin Keith甚至專門撰寫了一篇技術博客來解釋為什麼他們在諸多解決方案中選擇了Kotlin Multiplatform Mobile(KMM)。

在團隊選型開始,麥當勞移動技術團隊想要的就是「一個響應迅速的原生 UI,與平台保持同步,並避免重複開發業務邏輯」。

「在決定是否在軟體堆棧中使用KMM時,你應該考慮開發階段以及應用程式遵循或將要遵循的設計範式。如果你的應用程式是圍繞依賴注入設計或使用乾淨的體系結構設計的,那麼KMM將非常適合,因為它可以被視為另一個領域層,具有兩個平台共享的優勢。」

在實踐過程中,他們發現KMM的主要優勢集中在以下幾點:

  • 為業務邏輯和共享功能(如網絡、存儲和分析)提供單一代碼庫。
  • 平台的業務邏輯可以在一個位置處理,從而減輕開發人員的測試負擔,因為可以同時處理兩個平台的單元測試。
  • 對於集成/插樁測試,Android和iOS 項目可以與KMM模塊一起包含在內,從而允許通過代碼庫中的本機仿真、仿真或硬體來測試資料庫和網絡。

不過在集成KMM的過程中,他們也面臨一些挑戰。

其一,iOS開發人員可能會發現在KMM環境中工作很困難,因為它需要Kotlin語言的知識。不過,如果你有其他語言的開發基礎,比如Java、OC、Swift,你可以用一周的時間學習熟悉Kotlin語法並開始項目實戰。

其二,並非所有庫都有基於Kotlin的等效項,但這可以通過使用expect/actual代碼範式的特定平台的代碼來解決。

其三,使用常用第三方庫的Kotlin版本時,可能會缺少功能。畢竟這還是一門新技術,隨著技術發展漸趨成熟,這個問題可能會得到解決。

其四,使用協程/異步方法調用的庫可能會由於舊Kotlin內存模型的問題而崩潰。在大多數情況下,更新到最新版本的Kotlin可以防止這種情況發生。

4、寫在最後:開發者又多了一個理想之選

Kotlin Multiplatform 的首次用戶調查結果顯示,有Android背景的開發人員在使用Kotlin Multiplatform的開發人員中占絕大多數,8%的受訪者來自iOS背景,61.4%的受訪者有5年以上的開發經驗。比較出人意料的是,有16.3%的開發者使用這項技術來覆蓋全平台,目的就是使其代碼儘可能通用。

隨著Kotlin Multiplatform進入穩定版本,開發者必然會更有信心將其應用於生產項目。JetBrains依然在進一步增強Kotlin Multiplatform、Compose Multiplatform以及相關工具功能,以支持這一技術組合成為在不同平台之間共享代碼的理想之選。對開發者而言,工具箱中有了更多備選,或許會加速創意付諸現實的敘事節奏。

文章來源: https://twgreatdaily.com/zh-mo/a4a8170a8a7a96f7ab4ffdb94e084cc4.html