Android 依赖
版本目录
我们使用 版本目录 来管理项目中直接使用的所有库。这是添加依赖的 唯一允许方法。在目录之外添加依赖是严格禁止的,以保持一致性和可追溯性。
使用版本目录的好处
- 集中管理:所有依赖都定义在一个地方(
gradle/libs.versions.toml
),使追踪和更新变得更加容易。 - 一致性:确保所有模块使用相同版本的共享依赖。
- 简化更新:使整个项目中的依赖更新变得更加容易。
管理依赖和锁定文件
本项目利用 Gradle 的 依赖锁定 功能,通过追踪所有使用库的精确版本,以确保构建的一致性和可重现性。
为什么使用依赖锁定
- 可重现的构建:通过锁定所有依赖的确切版本,确保不同环境中的构建一致。
- 避免意外:防止意外更新会破坏构建的传递依赖。
更新依赖和锁定文件
在 gradle/libs.versions.toml
中添加或更新依赖时,重要的是要同时更新相应的锁定文件。锁定文件捕获所有直接和传递依赖的确切版本。
要更新锁定文件,请从项目根目录运行以下命令:
./gradlew alldependencies --write-locks
该命令解析所有依赖并更新每个模块中的 gradle.lockfile。
info
如果版本目录被更新但锁定文件未更新,CI 管道将会失败。
使用 Renovate 自动化依赖更新
为简化依赖管理,我们将 Renovate 集成到存储库中。Renovate 自动创建拉取请求以更新依赖和锁定文件。
Renovate 的工作原理
- 自动更新:Renovate 扫描项目中的过时依赖,并创建拉取请求以更新它们。
- 锁定文件更新:Renovate 确保锁定文件与依赖一起更新。
- 自定义配置:Renovate 被配置为遵循项目的版本策略和更新策略。
note
Renovate 被配置为在库的新版本发布后等待 3 天再打开拉取请求。这个延迟允许早期采用者识别和报告任何明显的问题。
使用 Renovate 的好处
- 节省时间:自动化检查和更新依赖的繁琐过程。
- 降低风险:确保更新一致地应用并通过 CI 管道进行测试。
- 提高安全性:保持依赖更新,降低漏洞风险。
使用非稳定版本
尽管我们希望与所使用的库保持最新,但我们优先考虑稳定性。因此,我们避免使用 alpha
、beta
、rc
或其他非稳定版本。
note
在非常特定的情况下,我们已经同意通过拉取请求使用 alpha
版本来获取新特性。然而,这将伴随在每次更新后解决问题的成本,因为 API 不稳定。一个显著的例子是 wear-compose-material
库。