Android 專用元件
Compose Multiplatform 建置於 Jetpack Compose 之上。Compose Multiplatform 的大部分功能都可用於所有平台。然而,有些 API 與程式庫只能在 Android 目標中使用。這可能是因為它們是 Android 專用的,或者是因為它們尚未移植到其他平台。此頁面總結了 Compose Multiplatform API 的這些部分。
有時在 Jetpack Compose 文件 或社群撰寫的文章中,您可能會發現只能在 Android 目標中使用的 API。如果您嘗試在
commonMain程式碼中使用它,您的 IDE 會告訴您該 API 不可用。
Android 專用 API
Android 專用 API 是針對 Android 特有的,且在其他平台上不可用。這是因為其他平台不需要 Android 所使用的某些概念。該 API 通常使用來自 android.* 套件的類別,或設定 Android 專用的行為。以下是 Android 專用 API 的一些範例:
android.context.Context類別LocalContext與LocalConfiguration變數android.graphics.BitmapFactory與android.graphics.Bitmap類別ImageBitmap.asAndroidBitmap()函式android.app.Activity類別android.app.Activity.setContent()函式ComposeView類別LocalView變數Modifier.pointerInteropFilter()函式- Hilt 相依注入程式庫
通常,沒有強大的理由將這類 API 的部分通用化,因此最好僅保留在 androidMain 中。
簽章中包含 Android 類別的 API
Compose Multiplatform 中的某些 API 在其簽章中使用 android.*、androidx.*(不包括 androidx.compose.*),但其行為也適用於其他平台:
- 資源管理:
stringResource、animatedVectorResource、Font以及用於資源管理的*.R類別。若要了解更多,請參閱圖片與資源。 - 導覽。若要了解更多,請參閱導覽與路由。
ViewModel類別。若要了解更多,請參閱 Multiplatform ViewModel。- Paging 程式庫。
ConstraintLayout配置。- Maps 程式庫。
- 預覽 工具以及用於預覽 桌面 應用程式的外掛程式。
WebView類別。- 其他尚未移植到 Compose Multiplatform 的 Jetpack Compose 程式庫。
根據複雜程度和需求,它們將來可能會被移植到 commonMain。
開發應用程式時常用的 API,例如權限、裝置(藍牙、GPS、相機)和 IO(網路、檔案、資料庫),超出了 Compose Multiplatform 的範疇。
簽章中不含 Android 類別的 API
即使 API 的簽章中不包含 android.* 或 androidx.* 類別,且該 API 適用於其他平台,某些 API 的部分內容仍可能僅適用於 Android 目標。這背後的原因通常是實作使用了許多平台特性,且為其他平台撰寫其他實作需要時間。
通常,這類 API 會在 Android 目標的 Jetpack Compose 中引入後,再移植到 Compose Multiplatform。
在 Compose Multiplatform 1.9.3 中,以下 API 部分在 commonMain 中 不可用:
Modifier.imeNestedScroll()函式Modifier.systemGestureExclusion()函式Modifier.magnifier()函式LocalOverscrollConfiguration變數AnimatedImageVector.animatedVectorResourceAPI- material3-adaptive 程式庫
- material3-window-size-class 程式庫
請求移植 Android API
對於每個可以從 Android 移植的 API,在 Compose Multiplatform 的 YouTrack 中都有一個開放的問題 (issue)。如果您看到某個 API 可以從 Android 移植並通用化,且目前尚未存在相關問題,請建立一個。
