2022 年 10 月 24 日,Android 发布了 Compose 的新稳定版本 ,其中包含 Compose BOM (Bill of Materials)
。
什么是 BOM?
Bill of Materials (BOM)
BOM 是一个 Maven 模块,它声明了一组库及其版本。允许通过仅指定 BOM 的版本来管理所有 Compose 库版本。BOM 包含指向不同 Compose 库的稳定版本的链接,在使用 BOM 时,无需向 Compose 库依赖项本身添加任何版本信息。当更新 BOM 版本时,正在使用的所有库都会自动更新为其新版本,因此从稳定版本迁移到稳定版本会简单得多。
第一个 BOM 版本 2022.10.00
带来了对 Staggered Grids, drawing Text directly to Canvas, Pull to Refresh, 以及性能改进和错误修复的支持。
Compose BOM 的特点:
-
Compose 各个库独立进行版本控制,每个库的最新稳定版本都经过测试并保证可以很好地协同工作。但是,找到每个库的最新稳定版本可能很困难,而 BOM 可帮助您自动使用这些最新版本。
-
使用 BOM 可确保您的应用程序中任何 Compose 库的版本都是兼容的。
-
BOM 也适用于版本目录。可以在版本目录中包含 BOM 本身,并省略其他 Compose 库版本:
[libraries]
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "androidxComposeBom" }
androidx-compose-foundation = { group = "androidx.compose.foundation", name = "foundation" }
// 在模块的 build.gradle 中导入 BOM
dependencies {
val composeBom = platform(libs.androidx.compose.bom)
implementation(composeBom)
androidTestImplementation(composeBom)
// import Compose dependencies as usual
}
- 使用 BOM 实际上并没有将所有 Compose 库添加到应用程序中,必须在 Gradle 文件中将每个库声明为依赖项。
Compose Compiler
编译器库不包含在 BOM 中。
- 可以手动添加每个依赖项的版本。 BOM 不是强制性的,可用使用与 BOM 中指定的库版本不同的库版本:
dependencies {
// 导入 Compose BOM
implementation platform('androidx.compose:compose-bom:2022.10.00')
// 使用 alpha 版本覆盖 Compose BOM 中的 Material Design 3 库版本
implementation 'androidx.compose.material3:material3:1.1.0-alpha01'
// 导入其他的 Compose 库,不需要版本号
// ..
implementation 'androidx.compose.foundation:foundation'
}
如何使用 BOM?
在 app/build.gradle
文件中添加以下 Compose BOM 依赖项。如下所示:
dependencies {
// 导入 Compose BOM
implementation platform('androidx.compose:compose-bom:2022.10.00')
// 声明所需要 Compose 库的依赖项,无需版本信息
implementation 'androidx.compose.foundation:foundation'
implementation "androidx.compose.ui:ui"
implementation "androidx.compose.material:material"
implementation "androidx.compose.ui:ui-tooling-preview"
implementation 'androidx.activity:activity-compose'
androidTestImplementation 'androidx.compose.ui:ui-test-junit4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
...
}
要了解哪些 Compose 库版本映射到特定 BOM 版本,请查看 BOM 到库版本映射。
注意,添加 BOM 作为一种有用的方式来简化依赖关系并使升级更容易。仍然可以选择使用硬编码版本信息来定义依赖项。