这个概念对于用过SpringBoot的同学来说很容易理解,咱们还是从头说起。
什么是BoM?
说咱们的Android Compose BoM,BoM=Bill of Material,直译为:物料清单。原本是制造业中的一个概念,比如组装一个手机,BoM包括屏幕、手机壳、芯片、主板、电池等,按照既定的物料清单采购好配件,工厂进行组装生产。
软件中“BoM”干啥用?
软件为什么借用这个概念?现在Android开发中用到的库越来越多,而且库之间相互依赖,有特定版本的要求,如果对不上就不能正常编译、运行,手动管理这些依赖配置非常繁琐和耗时。这个问题不仅在Android上,Linux、Spring开发都有类似的问题,SpringBoot中的解决版本和Compose BoM类似,而且感觉更加彻底。解决方法,就是把常用的依赖库,能搭配的版本整理成一个公共列表,这个列表其实就是BoM。BoM有不同的版本,保证每个版本中的各个库版本可以正常工作。这样,在工程中先引用BoM,然后正常的引用各个需要的依赖库,但是依赖库不用指定版本号,默认使用BoM中的库版本(指定版本号,可以覆盖BoM中的库版本),可以避免多个库直接依赖不匹配的问题。
借助 Compose 物料清单 (BoM),只需指定 BoM 的版本,即可管理所有 Compose 库版本。BoM 本身包含指向不同 Compose 库的稳定版的链接,以便它们能够很好地协同工作。在应用中使用 BoM 时,无需向 Compose 库依赖项本身添加任何版本。更新 BoM 版本时,使用的所有库都会自动更新到新版本。
怎么通过BoM引用库版本?
在 build.gradle 依赖项部分中,保留 BoM 平台的导入内容。在导入库依赖项时,指定所需的版本。例如,如果使用 Alpha 版 Material 3,声明依赖项的方法如下:
dependencies {
// Import the Compose BOM
implementation platform('androidx.compose:compose-bom:2022.12.00')
// Override Material Design 3 library version with a pre-release version
implementation 'androidx.compose.material3:material3:1.1.0-alpha01'
// Import other Compose libraries without version numbers
// ..
implementation 'androidx.compose.foundation:foundation'
}
使用BoM是不是一下子把所有库都引入到工程里了?
不是。要在应用中实际添加和使用 Compose 库,必须在模块Gradle 文件(app/build.gradle)中将每个库声明为单独的依赖项行。使用 BoM 可确保应用中的任何 Compose 库版本兼容,但 BoM 实际上并不会将这些 Compose 库添加到您的应用中。
已经提供的几个BoM和库版本映射参考
库组 | 版本 (2022.10.00) | 版本 (2022.11.00) | 版本 (2022.12.00) |
---|---|---|---|
androidx.compose.animation:animation | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.animation:animation-core | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.animation:animation-graphics | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.foundation:foundation | 1.3.0 | 1.3.1 | 1.3.1 |
androidx.compose.foundation:foundation-layout | 1.3.0 | 1.3.1 | 1.3.1 |
androidx.compose.material:material | 1.3.0 | 1.3.1 | 1.3.1 |
androidx.compose.material:material-icons-core | 1.3.0 | 1.3.1 | 1.3.1 |
androidx.compose.material:material-icons-extended | 1.3.0 | 1.3.1 | 1.3.1 |
androidx.compose.material:material-ripple | 1.3.0 | 1.3.1 | 1.3.1 |
androidx.compose.material3:material3 | 1.0.0 | 1.0.1 | 1.0.1 |
androidx.compose.material3:material3-window-size-class | 1.0.0 | 1.0.1 | 1.0.1 |
androidx.compose.runtime:runtime | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.runtime:runtime-livedata | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.runtime:runtime-rxjava2 | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.runtime:runtime-rxjava3 | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.runtime:runtime-saveable | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.ui:ui | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.ui:ui-geometry | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.ui:ui-graphics | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.ui:ui-test | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.ui:ui-test-junit4 | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.ui:ui-test-manifest | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.ui:ui-text | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.ui:ui-text-google-fonts | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.ui:ui-tooling | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.ui:ui-tooling-data | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.ui:ui-tooling-preview | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.ui:ui-unit | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.ui:ui-util | 1.3.0 | 1.3.1 | 1.3.2 |
androidx.compose.ui:ui-viewbinding | 1.3.0 | 1.3.1 | 1.3.2 |