iT邦幫忙

2022 iThome 鐵人賽

DAY 29
0

雖然 Jetpack Compose 可以從 Android 近乎無痛的用於 Desktop 開發,但實務上 Mobile 平台和 Desktop 環境還是有許多本質上的差異,不論是 Desktop 特有的元件、事件類型及互動方式…等。在耕讀筆記的尾聲,筆者想要整理一下使用 Compose 開發不同平台時的差異處,做為開發時的提醒檢查表。

較簡單的 Life Cycle 與較少的權限限制

相較於 Mobile 複雜的使用情境(比方說 App 前景背景切換、螢幕旋轉、使用者中斷操作),Desktop 在開發時有較為簡單的 Life Cycle。且相較於 Mobile 作業系統的權限限制(檔案系統存取、App 權限),Desktop App 在開發時的限制較少。不過要注意的是,若要開發支援多個不同 Desktop 作業系統的 App,仍需注意各作業系統在權限設計上的不同。

Desktop 才有的元件

在使用 Compose for Desktop 時,有些元件是 Desktop 平台才有的,最明顯的就是 WindowMenu 了。許多 App 在操作時會需要多個 Window 同時出現,而固定於 Window 上方的 Menu 或 macOS 置頂式的 Menu 也是 Desktop 作業系統上的經典設計。

除了 WindowMenu 外,為捲動內容而生的 Scrollbar、為提示元件功能而生的 Tooltip 也都是 Desktop 上才有的元件。而 Tray 的設計,讓 App 的入口更多元,搭配 Notification 就能推播通知。在使用 Compose for Desktop 時,別忘了善用這些元件,才能提供更符合 Desktop 環境的使用體驗。

不同的 UI 風格

在 Android 上,Google 已發佈 Material Design 做為 UI 設計的建議風格。雖然 Compose for Desktop 也能使用 Material Theme,但畢竟 Material Design 是為 Mobile 環境而設計的,在 Desktop 用滑鼠點擊預防使用者按不到而特別將尺寸放大的按鈕就顯得不那麼合適,這點在使用 Compose for Desktop 建構 UI 時需要額外考量。

雖然目前 Compose for Desktop 還沒有官方的 UI 函式庫可供直接套用,但已有社群打造的 Aurora UI 函式庫,提供了更適合 Desktop 環境而設計的 UI 元件庫,從示範檔中可以看到常見的 App 操作介面都有對應的元件可立即套用。

Desktop 才有的事件類型

有別於 Mobile 都是用手指操作,Desktop 則是透過實體的鍵盤和滑鼠互動。所以在 Desktop 上會有更多的滑鼠事件,比方說 MouseEnter、MouseExit、MouseMove…等,鍵盤的部份,Desktop 雖然無法根據設定更改配置,但可以綁定功能快速鍵。

不同的開發生態系

雖然 Compose 讓 Mobile 和 Desktop 可以共用 UI,但撇除 UI 開發後的其他部份,使用的函式庫卻大不相同。

首先要認知到的,就是 Compose for Desktop 沒辦法使用 Mobile 上的函式庫,比方說 ViewModelNavigationRoomHilt…等,也沒有 Play Service、Firebase…等這些 Android 開發常會用的服務。

不過好消息是,既然 Compose for Desktop 是運行在 JVM 上,所有 JVM 生態系裡成熟的函式庫也都可以拿來用。而且很幸運的是,上面提到 Android-only 的函式庫,也大多可以找到替代的選擇。比方說可以用 Decompose 取代 Navigation、用 SqlDelight 取代 Room、用 Dagger 取代 Hilt、用 Arbor 取代 Timber…等。

不同的發佈方式

雖然現在各作業系統都有提供應用程式商店(俗稱 App Store),一方面方便開發者上架 App,一方面讓使用者取得 App 更簡單也更安全。不過,或許是因為各家平台的規範及流程都不同,大多數的軟體發行商及使用者還是習慣走官網下載、自行安裝的流程。對於開發者來說,無法完全依賴平台的應用程式商店做軟體散佈及更新,所以若 App 要有自動更新的功能,就得自行用 update4j 這一類的套件實作。

另外,由於每個作業系統對安全性的要求不同,若是要將 App 發佈在 macOS 上,在打包時也別忘了簽證及公證的手續。

儘早規畫多平台架構

使用 Kotlin 並搭配 Compose 可以讓多平台開發變得更可行,不過多平台開發需要很多技術決策的支持,因此在筆者實際體驗 Compose Multiplatform 的開發後,會建議讀者在開發多平台 App 時,儘早甚至 Day One 就要針對多平台的需求設計架構,不論是 UI 設計風格、UI 元件的共用、各平台應用程式架構、合適的函式庫…等,才能降低重工、並實作出好維護的 App。


上一篇
第 28 天:使用 Qodana 檢查程式碼
下一篇
第 30 天:Compose for Desktop 學習資源
系列文
傳教士的 Compose for Desktop 耕讀筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言