【Compose Multiplatform】專案轉移探討與開發指南

前言

Compose Multiplatform (CMP) 為開發者提供了跨平台開發的強大工具
但從 Compose 專案轉移到 CMP 也面臨一些挑戰
本文將詳細介紹轉移過程中的關鍵點和注意事項

前期轉移成本

CMP 開發時需要熟悉多個資料夾的結構:
Cover

共通代碼放在 commonMain 中:
Cover

在各環境下導入需要的庫:
Cover

因預設使用lib.version.toml來配置
需了解.toml
這邊有以前寫的筆記
可參考

Compose Project 到 CMP Project 庫的轉移參考


  • 假設我們原本製作Android專案都是用一些較常用的lib、或是官方推薦的(如表格左邊)
    嘗試用CMP寫之後我們使用的lib 轉移成本會嚐到一些紅利(如表格右邊)
    因為大多是你寫compose會用過的東西
Feature Compose Project CMP Project
API okhttp + retrofit2 Ktor + Ktorfit
navigation navigation-compose navigation-compose
design material 3 material 3
DI hilt koin
UI jetpack compose jetpack compose
JSON kotlinx.serialization kotlinx.serialization
Database room SqlDelight
Image coil coil
Push FCM, UM, HW 可能需自行實作各平台
Splash splashscreen 可能需自行實作或用 Compose 實現
可能遇到的問題
  1. 跨平台需求差異:
    例如 Android 需要 Context,iOS 不需要:

    完整筆記:【Compose Multiplatform 】跨平台App但Android需要context作法並搭配Koin
  2. 平台特定實現:
    像是手機端常用本地持久化儲存
    在Android會使用dataStore去處理這個相關問題
    那要怎麼在多平台去使用呢?
    使用 expect 和 actual 關鍵字:
    不過儘管需要各自實作
    但一些常用的library
    CMP有支援以kotlin實作的library
    所以就算分平台實作還是可以用純.kt去寫
    就像是上面的iosMain中實作的dataStore一樣

    完整筆記:【Compose Multiplatform】手機本地持久化儲存DataStore實作

  3. CMP庫的兼容性問題或Bug持續修正中:
    例如 SqlDelight 2.0.0 版本在 iOS 上的Build會錯誤:
未來展望

Google 在 2024 年 5 月 14 日的博客中提到了對 KMP 的支持:
Cover
這可能意味著未來會有更多庫得到支持。

總結
  • CMP 提供了強大的跨平台開發能力,但需要適應新的專案結構
  • 大部分常用庫都有對應的 CMP 版本
  • 處理平台差異時,使用 expect 和 actual 關鍵字很有幫助
  • 注意庫的版本兼容性問題
  • 關注 Google 和社區的最新動態,以獲得更多支持和資源

You might also enjoy