为何Jetpack Compose依赖在build.gradle.kts中采用libs.X格式?
Android Studio Iguana 依赖声明变更说明
你遇到的implementation(libs.androidx...)不是恶意改动,这是Gradle的**版本目录(Version Catalog)**特性,Android Studio Iguana开始新建项目默认启用这个方式来管理依赖,目的是让版本管理更集中、依赖声明更简洁。
为什么用这种形式?
- 之前的写法是在依赖里硬编码版本号,分散在各个build文件中,升级时要逐个修改;现在把所有依赖的版本信息集中到一个配置文件里,统一维护,减少重复工作。
- 这是Gradle 7.4及以上版本支持的官方特性,AS现在默认用它来优化依赖管理流程。
如何查看、修改依赖版本?
版本信息都存在项目根目录的gradle/libs.versions.toml文件里:
- 打开这个文件,
[versions]块里是所有依赖的版本号,比如coreKtx = "1.12.0"; [libraries]块里是依赖的坐标映射,比如androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" },这里的version.ref就是引用[versions]里的版本值;- 修改版本时,直接改
[versions]里对应的数值,所有引用该版本的依赖会自动同步更新。
举个libs.versions.toml的示例片段:
[versions] coreKtx = "1.12.0" lifecycleRuntimeKtx = "2.6.2" composeBom = "2023.08.00" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" } androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" }
如何固定特定版本?
如果想给某个依赖单独固定版本,有两种方式:
- 方式1:在
libs.versions.toml中直接指定版本
把该依赖的version.ref改成具体版本号,比如:
这样就不会跟随androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version = "1.12.0" }[versions]里的统一版本更新。 - 方式2:在build.gradle.kts中强制指定版本
在依赖声明里添加版本约束,比如:
这种方式会强制使用指定版本,即使其他地方有更高版本的依赖也不会覆盖。implementation(libs.androidx.core.ktx) { version { strictly("1.12.0") } }
新依赖声明(Android Studio Iguana)
dependencies { implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.activity.compose) 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) testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(platform(libs.androidx.compose.bom)) androidTestImplementation(libs.androidx.ui.test.junit4) debugImplementation(libs.androidx.ui.tooling) debugImplementation(libs.androidx.ui.test.manifest) }
旧依赖声明(1个月前)
dependencies { implementation("androidx.core:core-ktx:1.12.0") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2") implementation("androidx.activity:activity-compose:1.7.0") implementation(platform("androidx.compose:compose-bom:2023.08.00")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-graphics") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.material3:material3") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") androidTestImplementation(platform("androidx.compose:compose-bom:2023.08.00")) androidTestImplementation("androidx.compose.ui:ui-test-junit4") debugImplementation("androidx.compose.ui:ui-tooling") debugImplementation("androidx.compose.ui:ui-test-manifest") }
内容的提问来源于stack exchange,提问作者RJA
相关产品推荐
相关产品推荐

