Kotlin Multiplatform 與 Flutter:跨平台開發解決方案
在快速發展的技術領域中,開發者不斷尋求高效的架構與工具來協助建置高品質的應用程式。然而,在可用的選項中進行選擇時,重要的是避免過度強調尋找所謂的「最佳」選項,因為這種方法並不總是能導向最合適的選擇。
每個專案都是獨特的且有特定的需求。本文旨在協助您引導選擇,並更深入了解哪種技術(如 Kotlin Multiplatform 或 Flutter)最適合您的專案,以便您做出明智的決定。
跨平台開發:建置現代應用程式的統一方法
跨平台開發提供了一種方式,可以使用單一程式碼庫建置可在多個平台上執行的應用程式,消除了為每個系統重寫相同功能的必要性。雖然通常與行動開發(針對 Android 和 iOS)相關聯,但這種方法遠不止於行動裝置,還涵蓋了 Web、桌面甚至伺服器端環境。
核心概念是極大化程式碼重複使用,同時確保在必要時仍可實作平台特定的功能,從而簡化開發過程並減少維護工作。團隊可以加速開發週期、降低成本並確保跨平台的一致性,使跨平台開發成為當今日益多樣化的應用程式環境中的明智選擇。
Kotlin Multiplatform 與 Flutter:簡化跨平台開發
Flutter 和 Kotlin Multiplatform 是兩種流行的跨平台技術,可簡化不同平台間應用程式的開發。
Flutter
Flutter 是一個開源架構,用於從單一程式碼庫建置原生編譯的多平台應用程式。它允許您在 Android、iOS、Web、桌面 (Windows, macOS, Linux) 和嵌入式系統中建立豐富的應用程式體驗——這一切都來自單一、共用的應用程式程式碼庫。Flutter 應用程式使用 Dart 程式語言編寫。Flutter 由 Google 支援並使用。
Flutter 最初於 2014 年以 Sky 的名稱推出,Flutter 1.0 於 2018 年 12 月在 Flutter Live 期間正式發佈。
Flutter 開發者社群規模龐大且高度活躍,提供持續的改進與支援。Flutter 允許使用由 Flutter 和 Dart 生態系統中的開發者貢獻的共用軟件包。
Kotlin Multiplatform
Kotlin Multiplatform (KMP) 是由 JetBrains 開發的開源技術,允許開發者為 Android、iOS、Web、桌面 (Windows, macOS, Linux) 和伺服器端建立應用程式,使他們能夠在這些平台間高效地重複使用 Kotlin 程式碼,同時保留原生程式設計的優點。
透過 Kotlin Multiplatform,您有各種選擇:您可以共用除應用程式入口點以外的所有程式碼、共用單一邏輯部分(如網路或資料庫模組),或在保持 UI 原生的同時共用商務邏輯。
Kotlin Multiplatform 最初作為 Kotlin 1.2 的一部分於 2017 年推出。2023 年 11 月,Kotlin Multiplatform 進入穩定階段。在 Google I/O 2024 期間,Google 宣佈支援 Kotlin Multiplatform,用於在 Android 和 iOS 之間共用商務邏輯。
如果您想了解更多關於 Kotlin Multiplatform 的一般發展方向,請參閱我們的部落格文章:Kotlin Multiplatform 與 Compose Multiplatform 的後續發展。
Compose Multiplatform
您可以使用 Compose Multiplatform 編寫跨多平台的共用 UI 程式碼,這是 JetBrains 開發的現代宣告式架構,建置於 Kotlin Multiplatform 和 Google 的 Jetpack Compose 之上。
Compose Multiplatform 目前在 iOS 上已穩定、Android 和桌面端也已穩定,而 Web 端則處於 Beta 階段。
我們的專屬文章概述了 Compose Multiplatform 與 Jetpack Compose 之間的關係,並強調了關鍵差異。
Kotlin Multiplatform 與 Flutter:概覽
| Kotlin Multiplatform | Flutter | |
| 建立者 | JetBrains | |
| 語言 | Kotlin | Dart |
| 靈活性與程式碼重複使用 | 分享您想要的部分程式碼庫,包括商務邏輯及/或 UI,比例從 1% 到 100%。 | 控制應用程式的每個像素,以建立自訂且具適應性的設計,並在所有平台間實現 100% 的程式碼共用。 |
| 軟件包、相依性與生態系統 | 軟件包可從 Maven Central 和其他存儲庫獲取,包括 klibs.io (Alpha 版本),旨在簡化對 KMP 程式庫的搜尋。 此清單包含了一些最受歡迎的 KMP 程式庫與工具。 | 軟件包可從 Pub.dev 獲取。 |
| 建置工具 | Gradle(針對 Apple 裝置的應用程式還需加上 Xcode)。 | Flutter 命令列工具(底層使用 Gradle 和 Xcode)。 |
| 程式碼共用 | Android、iOS、Web、桌面與伺服器端。 | Android、iOS、Web、桌面與嵌入式裝置。 |
| 編譯 | 針對桌面與 Android 編譯為 JVM 位元組碼,在 Web 上編譯為 JavaScript 或 Wasm,並針對原生平台編譯為平台特定的二進位檔案 | 偵錯組建在虛擬機中執行 Dart 程式碼。 發行組建針對原生平台輸出平台特定的二進位檔案,針對 Web 則輸出 JavaScript/Wasm。 |
| 與原生 API 的通訊 | 原生 API 可使用 expect/actual 宣告 直接從 Kotlin 程式碼存取。undefined | 與主機平台的通訊可使用 platform channels 進行。 |
| UI 渲染 | Compose Multiplatform 可用於跨平台共用 UI,其基於 Google 的 Jetpack Compose,並使用相容於 OpenGL、ANGLE(將 OpenGL ES 2 或 3 呼叫轉換為原生 API)、Vulkan 和 Metal 的 Skia 引擎。 | Flutter Widget 使用自訂的 Impeller 引擎渲染於螢幕上,該引擎根據平台與裝置直接與 GPU 通訊(使用 Metal、Vulkan 或 OpenGL)。 |
| UI 開發的反覆運算 | 即使在共用程式碼中也可進行 UI 預覽。 透過 Compose Hot Reload ,您可以立即看到 UI 變更,而無需重新啟動應用程式或丟失其狀態。undefined | VS Code 和 Android Studio 均有可用的 IDE 外掛程式。 |
| 使用該技術的公司 | Forbes、Todoist、McDonald’s、Google Workspace、Philips、9gag、Baidu、Autodesk、TouchLab、Instabee 等更多公司列於我們的 KMP 案例研究中。 | Xiaomi、Wolt、Universal Studios、Alibaba Group、ByteDance、Geico、eBay Motors、Google Pay、So Vegan 等更多公司列於 Flutter Showcase 中。 |
您也可以查看 Google 的部落格文章:讓開發者更輕鬆地進行跨平台開發,該文章為您的專案選擇合適的技術堆疊提供了指引。
如果您正在尋找 Kotlin Multiplatform 與 Flutter 之間的額外比較,也可以觀看 Philipp Lackner 的 KMP vs. Flutter 影片。在此影片中,他在程式碼共用、UI 渲染、效能以及這兩項技術的未來方面分享了一些有趣的觀察。
透過仔細評估您的特定商務需求、目標和任務,您可以找到最符合您需求的跨平台解決方案。
