Jetpack Compose-依赖版本管理(BOM)

前言

BOM为Bill of Material的缩写

原本是制造业中的一个概念,比如组装一个手机,BoM包括屏幕、手机壳、芯片、主板、电池等,按照既定的物料清单采购好配件,工厂进行组装生产

对于我们开发者来说, 有什么作用的?

像compose的一系列依赖,版本众多,更新且又频繁,且又相互有所依赖,对于我们开发来说,理清这些层层次次关系足以头大,然后还有个致命问题,我们几个库使用不同版本,可能还会导致编译直接报错,出现依赖版本等冲突问题。

使用BOM管理版本后,后续的compose相关的库,都不需要写版本号了,由BOM默认指定版本

BOM版本和Compose版本的对应关系

https://developer.android.google.cn/develop/ui/compose/bom/bom-mapping?hl=zh-cn

在使用FlowRow的时候,发现组件还处于实验阶段,更新到下面的版本就已经可以解除实验标记了。

1
implementation("androidx.compose.foundation:foundation-layout:1.8.2")

但是项目中并没有指定版本的地方,原来是BOM来管理了。

项目配置

build.gradle.kts

1
2
3
4
5
6
7
8
9
10
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.ui)
implementation(libs.androidx.ui.graphics)
implementation(libs.androidx.ui.tooling.preview)
implementation(libs.androidx.material3)

androidTestImplementation(platform(libs.androidx.compose.bom))
androidTestImplementation(libs.androidx.ui.test.junit4)
debugImplementation(libs.androidx.ui.tooling)
debugImplementation(libs.androidx.ui.test.manifest)

libs.versions.toml 中指定版本

1
2
3
4
5
6
7
8
9
10
11
12
13
[versions]
composeBom = "2024.09.00"

[libraries]
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" }
androidx-ui = { group = "androidx.compose.ui", name = "ui" }
androidx-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" }
androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
androidx-material3 = { group = "androidx.compose.material3", name = "material3" }

androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" }
androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }

可以看到

compose相关的依赖就不用指定版本了。

我这里要用foundation-layout:1.8.2,所以切换版本就行了

1
composeBom = "2025.05.01"

注意

不要自己指定某个依赖的版本,会出现不兼容的情况。