【Jetpack Compose】BOM是什么?

前言

本篇旨在帮助小伙伴们了解和使用Compose中BOM相关的知识,在Compose的开发过程中更加便捷、统一的管理相关依赖信息。

BOM基础知识

Compose推出的BOM为物料清单的意思,BOM全称为Bill Of Materials,Compose推出BOM的意义旨在通过指定的BOM版本来管理所有Compose库版本,比如我们要添加compose.material3和compose.ui的依赖,在未使用BOM的前提下,我们需要找到对应的版本,然后再添加依赖;然而在使用BOM的情况下,我们可以不用再去查找依赖对应的版本,直接在dependencies{}中添加他们就行,下面我们来详细看看BOM的使用方法。

BOM最早在2022/10/24推出了第一个版本:androidx.compose.compose-bom-2022.10.00

截止目前已经推出了16个版本,最新版本为:androidx.compose.compose-bom-2023.10.00

很巧合第一个和目前的最新版本尾部都是10.00,哈哈😄

目前使用AS版本为: Android Studio Giraffe | 2022.3.1 Patch 1 ,不同版本可能表现不一致

使用ComposeBOM

目前我们使用AS创建一个Compose项目之后,在app/build.gradle中默认会添加BOM依赖,但是版本会比较陈旧

图中标红的就是添加BOM的方式,添加的是2023.03.00版本,目前BOM最新2023.10.00,在10月05日发布。

知晓了BOM的添加方式之后,我们再来看看下面关于Compose相关依赖是如何添加的,比如标红下方的compose.ui依赖是直接通过implementation("androidx.compose.ui:ui")添加,这一行并没有涉及到版本信息,却也能正常引入compose.ui相关依赖

上图就是引入的compose.ui相关依赖库,在没有声明具体版本的情况下,也可以通过BOM获取到对应的版本,compose.ui在指定的BOM版本都有对应的版本,此处BOM的2023.03.00对应ui库的1.4.0版本。文章的后面我会将所有BOM版本对应的Compose依赖版本映射关系列举出来,方便大家日后参照。

到这小伙伴们是不是有种疑问,如果我添加了BOM依赖,是不是不用再额外添加其它的Compose库,非也非也~即使你添加了BOM依赖,还是得显式的添加下其它你需要的依赖,只是在依赖信息中省略了版本号而已。如果添加BOM就将所有的Compose库都引入到工程中,那么会造成依赖浪费的情况。

BOM和显式添加版本号是否冲突

在上面我们了解去如何去使用BOM的知识,接下来我们再看看在添加了BOM的情况下,再显式的添加其它依赖并加上版本号的情况。详细看下面的代码示例:

implementation(platform("androidx.compose:compose-bom:2023.03.00"))
implementation("androidx.compose.ui:ui:1.5.3")

我们先引入2023.03.00的BOM版本,然后在显式的添加compose.ui:1.5.3的依赖库,这是大家想一下会造成何种结果呢?此版本BOM清单中ui库对应的版本应该是1.4.0,会不会将我们需要的1.5.3直接忽视采用BOM对应的版本呢?答案是否的,在这种情况下Gradle会采用我们显式声明的ui库版本号,这样我们就既可以统一的管理Compose的版本信息,又不用过度受BOM的版本限制。下面是上述代码的依赖情况:

UI相关依赖版本号都变成了1.5.3,其余的还是保持BOM映射的版本号。

BOM所有版本

  1. androidx.compose.compose-bom-2022.10.00
  2. androidx.compose.compose-bom-2022.11.00
  3. androidx.compose.compose-bom-2022.12.00
  4. androidx.compose.compose-bom-2023.01.00
  5. androidx.compose.compose-bom-2023.03.00
  6. androidx.compose.compose-bom-2023.04.00
  7. androidx.compose.compose-bom-2023.04.01
  8. androidx.compose.compose-bom-2023.05.00
  9. androidx.compose.compose-bom-2023.05.01
  10. androidx.compose.compose-bom-2023.06.00
  11. androidx.compose.compose-bom-2023.06.01
  12. androidx.compose.compose-bom-2023.08.00
  13. androidx.compose.compose-bom-2023.09.00
  14. androidx.compose.compose-bom-2023.09.01
  15. androidx.compose.compose-bom-2023.09.02
  16. androidx.compose.compose-bom-2023.10.00

BOM版本映射关系

库组版本 (2022.10.00)版本 (2022.11.00)版本 (2022.12.00)版本 (2023.01.00)版本 (2023.03.00)版本 (2023.04.00)版本 (2023.04.01)版本 (2023.05.00)版本 (2023.05.01)和 (2023.06.00)版本 (2023.06.01)版本 (2023.08.00)版本 (2023.09.00)版本 (2023.09.01)版本 (2023.09.02)版本 (2023.10.00)
androidx.compose.animation:animation1.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.animation:animation-core1.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.animation:animation-graphics1.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.foundation:foundation1.3.01.3.11.3.11.3.11.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.foundation:foundation-layout1.3.01.3.11.3.11.3.11.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.material:material1.3.01.3.11.3.11.3.11.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.material:material-icons-core1.3.01.3.11.3.11.3.11.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.material:material-icons-extended1.3.01.3.11.3.11.3.11.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.material:material-ripple1.3.01.3.11.3.11.3.11.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.material3:material31.0.01.0.11.0.11.0.11.0.01.0.11.0.11.0.11.1.01.1.11.1.11.1.11.1.21.1.21.1.2
androidx.compose.material3:material3-window-size-class1.0.01.0.11.0.11.0.11.0.01.0.11.0.11.0.11.1.01.1.11.1.11.1.11.1.21.1.21.1.2
androidx.compose.runtime:runtime1.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.runtime:runtime-livedata1.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.runtime:runtime-rxjava21.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.runtime:runtime-rxjava31.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.runtime:runtime-saveable1.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.ui:ui1.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.ui:ui-geometry1.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.ui:ui-graphics1.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.ui:ui-test1.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.ui:ui-test-junit41.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.ui:ui-test-manifest1.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.ui:ui-text1.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.ui:ui-text-google-fonts1.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.ui:ui-tooling1.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.ui:ui-tooling-data1.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.ui:ui-tooling-preview1.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.ui:ui-unit1.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.ui:ui-util1.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3
androidx.compose.ui:ui-viewbinding1.3.01.3.11.3.21.3.31.4.01.4.11.4.21.4.31.4.31.4.31.5.01.5.11.5.11.5.21.5.3

列举了BOM从第一个版本到目前最新版本的映射关系,后续BOM更新了我也会及时的将这张表格做响应的更新,希望小伙伴们喜欢哈~

写在最后

BOM在使用过程中还是比较容易上手的,也是极大程度上帮助开发者更轻松的管理Compose相关依赖信息,感兴趣的小伙伴们赶紧上手体验下吧~

Android 学习笔录

Android 性能优化篇:https://qr18.cn/FVlo89
Android Framework底层原理篇:https://qr18.cn/AQpN4J
Android 车载篇:https://qr18.cn/F05ZCM
Android 逆向安全学习笔记:https://qr18.cn/CQ5TcL
Android 音视频篇:https://qr18.cn/Ei3VPD
Jetpack全家桶篇(内含Compose):https://qr18.cn/A0gajp
OkHttp 源码解析笔记:https://qr18.cn/Cw0pBD
Kotlin 篇:https://qr18.cn/CdjtAF
Gradle 篇:https://qr18.cn/DzrmMB
Flutter 篇:https://qr18.cn/DIvKma
Android 八大知识体:https://qr18.cn/CyxarU
Android 核心笔记:https://qr21.cn/CaZQLo
Android 往年面试题锦:https://qr18.cn/CKV8OZ
2023年最新Android 面试题集:https://qr18.cn/CgxrRy
Android 车载开发岗位面试习题:https://qr18.cn/FTlyCJ
音视频面试题锦:https://qr18.cn/AcV6Ap

### Android Compose 基本使用教程 #### 1. 设置开发环境 为了开始使用 Jetpack Compose 进行开发,首先需要配置好开发环境。这包括设置 Gradle 文件来引入必要的依赖项。具体来说,在 `build.gradle` 中应加入如下 BOM 配置[^3]: ```groovy dependencies { implementation platform('androidx.compose:compose-bom:2024.04.01') } ``` 此版本管理工具可以帮助简化库版本控制。 #### 2. 创建第一个 Composable 函数 Jetpack Compose 的核心概念是可组合函数 (Composable function),这些函数用于定义界面组件及其行为。下面是一个简单的例子展示如何创建并调用一个名为 `Greeting` 的 composable 函数: ```kotlin import androidx.compose.material.Text import androidx.compose.runtime.Composable @Composable fun Greeting(name: String) { Text(text = "Hello $name!") } // 调用该函数的地方可以像这样: // Greeting("World") ``` 这段代码展示了最基础的文本显示功能[^1]。 #### 3. 使用状态和事件处理 在实际应用中,UI 组件通常不是静态不变的;它们可能会响应用户的交互或其他逻辑变化而更新其外观或内容。为此,Jetpack Compose 提供了一套机制来管理和监听状态的变化以及触发相应的 UI 更新操作。例如,通过 `remember`, `mutableStateOf` 和其他 API 可以轻松实现这一点。 ```kotlin var text by remember { mutableStateOf("") } TextField( value = text, onValueChange = { newText -> text = newText } ) ``` 上述片段演示了一个双向绑定输入框的例子,其中变量 `text` 是被追踪的状态对象,当用户修改输入框内的文字时它会被自动同步更新。 #### 4. 导入主题和支持深色模式 为了让应用程序看起来更加美观和谐统一,可以通过自定义颜色方案来自适应不同的设备设定和个人偏好。比如定义一套浅色调色板(light color palette),并通过条件判断切换到暗黑风格的主题布局下工作。 ```kotlin private val LightColorPalette = lightColors( primary = Blue700, secondary = Teal200 ) MaterialTheme(colors = if (darkModeEnabled) DarkColorPalette else LightColorPalette){ // Your app content here... } ``` 这里利用了预先准备好的两个不同类型的配色模板,并根据当前是否启用了黑暗模式来进行选择性的渲染[^4]。 #### 5. 处理异步任务与网络请求 对于涉及后台服务或者远程服务器通信的任务,则推荐采用协程(Coroutines) 或者 RxJava 来完成。需要注意的是,在编写基于 RxJava 的接口时不应标记为挂起(suspend)方法以免造成 JSON 序列化错误等问题发生[^5]。 ```kotlin val apiService = Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build().create(ApiService::class.java) apiService.getData() // 不要在这里加 suspend 关键字 ``` 以上就是关于 Jetpack Compose 初学者入门所需掌握的一些基础知识要点介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值