versions部分仅声明版本号别名,如kotlin = "1.9.20",只允许键值对;libraries部分绑定坐标并引用version.ref,如androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "androidx-core" }。

versions部分只管“声明版本号”,不写坐标也不写逻辑
这个 section 的唯一职责是给版本号起个名字,比如 junit、agp、kotlin。它不关心谁用、怎么用,只是登记一个可被引用的字符串值。
常见错误现象:[versions] kotlin = "1.9.20" 写成 kotlin = { version = "1.9.20" } 或加 group/name 字段 —— TOML 会直接报错,因为 [versions] 下只接受键值对。
- 别名允许含短划线(
androidx-core-ktx)和下划线(core_ktx),但不能以数字开头 - 同一个版本号如果被多个库共用(比如多个
androidx库都用1.12.0),就只在[versions]里定义一次,后面统一version.ref = "androidx-core" - 不要在这里写动态表达式,例如
my-lib = "$rootDir/../mylib/version.txt"——libs.versions.toml是纯静态配置,不支持读文件或执行代码
libraries部分负责“绑定坐标+引用版本”,必须用 version.ref
[libraries] 是真正把“名字”变成可用依赖的地方。每个条目是一个别名,对应一个完整的 Maven 坐标,并通过 version.ref 指向 [versions] 里的声明。
典型错误:漏掉 .ref,写成 version = "1.12.0" 或 version = libs.versions.androidx-core —— 这两种写法都不合法,Gradle 会提示 Could not resolve version for library xxx。
- 推荐写法:
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "androidx-core" } - 支持简写
module字段:jsch = { module = "com.jcraft:jsch", version.ref = "jsch" },等价于分别写group和name - 如果某个库没有版本号(比如本地
fileTree或项目模块),可以省略version相关字段,但需确保build.gradle中使用时明确指定作用域,例如implementation(project(":mylib"))不走libs查找
别名命名要能一眼看出用途,避免泛化命名冲突
别名不是随便起的,它最终会成为 libs.xxx 的调用路径。如果多个团队成员都用 network 作为 Retrofit 和 OkHttp 的别名,libs.network 到底指哪个?编译不会报错,但维护时极易混淆。
- 建议按 “领域+库名” 组合,例如:
retrofit-core、okhttp-android、coil-compose - Android 官方推荐前缀区分类型:
androidx-benchmark-macro、google-material,比单纯叫benchmark或material更安全 - 避免全大写或驼峰混用,TOML 对大小写敏感,
MyLib和mylib是两个不同别名
build.gradle 里引用时,别名路径固定为 libs.xxx
无论你在 [libraries] 里怎么起名,引用方式永远是 libs.你的别名。它不是变量、不是函数,只是一个由 Gradle 自动生成的类型安全访问器。
容易忽略的点:如果别名含短划线(如 androidx-core-ktx),Kotlin DSL 中必须用引号包裹:implementation(libs."androidx-core-ktx");Groovy DSL 可直接写 implementation libs."androidx-core-ktx" 或 implementation libs.androidxCoreKtx(Gradle 会自动转换下划线为驼峰)。
- 不支持嵌套调用,例如
libs.androidx."core-ktx"是非法的 ——libs后只能跟一级别名 - 如果别名拼错,IDE 可能不报红,但构建时报
Unresolved reference: xxx,此时优先检查libs.versions.toml拼写和是否漏加[libraries]section - 修改
libs.versions.toml后,需同步项目(点击 Android Studio 右上角 “Sync Now” 或运行./gradlew --refresh-dependencies)才能让新别名生效
实际项目中最容易卡住的,不是语法写错,而是 versions 和 libraries 两层之间没对齐:版本名写了 coreKtx,引用时却写 version.ref = "androidx-core-ktx",或者别名用了 core-ktx 但忘记在 [versions] 里声明对应项。这种错不会在编辑器里高亮,得靠构建失败信息反查。











