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类。有关更多信息,请参阅多平台 ViewModel。- Paging 库。
ConstraintLayout布局。- Maps 库。
- 预览工具以及用于预览桌面应用程序的插件。
WebView类。- 其他尚未移植到 Compose Multiplatform 的 Jetpack Compose 库。
这些内容可能会在未来根据复杂程度和需求被移植到 commonMain。
开发应用程序时经常使用的 API,例如权限、设备(蓝牙、GPS、相机)和 IO(网络、文件、数据库),不属于 Compose Multiplatform 的范畴。
签名中不含 Android 类的 API
即使某些 API 的签名不包含 android.* 或 androidx.* 类,且该 API 适用于其他平台,它们也可能仅在 Android 目标中可用。这背后的原因通常是该实现在很大程度上使用了平台特性,编写其他平台的实现需要一定时间。
通常,这类 API 会在 Jetpack Compose 的 Android 目标中引入后,被移植到 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 中都有一个待解决的问题。如果您发现某个 API 可以从 Android 移植并通用化,但目前还没有相关的问题,请创建一个。