Android版本依赖Version catalog

曾经我们使用config.gradle文件进行版本依赖配置,然后在project的build.gradle.kts中使用如下方式引入:

apply(from = "./config.gradle")

缺点:在project的module中引用无任何提示,无法跳转到指定引用

一、创建version catalog文件

创建catalog文件步骤如上图,名称使用默认名libs(也可以修改名称,在settings中引入的时候使用修改的文件明就行)创建libs.version.toml

此文件生成之后在如下目录,此时文件不用在settings.gradle中进行配置,如果文件名不是libs还是需要自行引入。

建议:文件名仍然使用libs,但是将文件libs.versions.toml移动到Project的根目录,然后在settings.gradle中显示引入。

版本目录TOML文件格式,TOML 文件由 4 个主要部分组成

  1. [versions] 用于声明可以被依赖项引用的版本
  2. [libraries] 用于声明引用的依赖包的别名
  3. [bundles] 用于声明依赖包,可以将步骤2中定义的依赖包统一引入
  4. [plugins] 用于声明插件

举例:

[versions]
groovy = "3.0.5"
ksp = "1.9.21-1.0.16"

[libraries]
groovy-core = { module = "org.codehaus.groovy:groovy", version.ref = "groovy" }
groovy-json = { module = "org.codehaus.groovy:groovy-json", version.ref = "groovy" }
groovy-nio = { module = "org.codehaus.groovy:groovy-nio", version.ref = "groovy" }

[bundles]
groovy = ["groovy-core", "groovy-json", "groovy-nio"]

[plugins]
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }

例如在app.module中可以单独引入 libraties中的依赖包或者引入bundles中的一组依赖包


dependencies {

    implementation(libs.bundles.groovy)

    // 或者分开引入
    implementation(libs.groovy.core)
    implementation(libs.groovy.json)
    implementation(libs.groovy.nio)
   
}

二、Settings.gradle中引入libs.versions.toml

dependencyResolutionManagement {
    ......

    // 引入Catalogs
    versionCatalogs {
        create("libs") {
            from(files("./libs.versions.toml"))
        }
    }
}

三、在project build.gradle和module的build.gradle都能开始使用

libs.versions.toml文件

[versions]
compileSdk = "34"
minSdk = "24"
targetSdk = "34"
versionCode = "1"
versionName = "1.0"
# 插件
application = "8.3.2"
kotlin = "1.9.10"
ksp = "1.9.21-1.0.16"
# 三方库
core-ktx = "1.10.1"
appcompat = "1.6.1"
material = "1.10.0"
constraintlayout = "2.1.4"
junit = "4.13.2"
android-junit = "1.1.5"
espresso-core = "3.5.1"
room = "2.5.1"
moshi = "1.15.1"


[libraries]
core-ktx = { module = "androidx.core:core-ktx", version.ref = "core-ktx" }
appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" }
material = { module = "com.google.android.material:material", version.ref = "material" }
constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "constraintlayout" }
junit = { module = "junit:junit", version.ref = "junit" }
android-junit = { module = "androidx.test.ext:junit", version.ref = "android-junit" }
espresso-core  = { module = "androidx.test.espresso:espresso-core", version.ref = "espresso-core" }
room-runtime = { module = "androidx.room:room-runtime", version.ref = "room" }
room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" }
room-ktx = { module = "androidx.room:room-ktx", version.ref = "room" }
room-testing = { module = "androidx.room:room-testing", version.ref = "room" }
moshi = { module = "com.squareup.moshi:moshi-kotlin-codegen", version.ref = "moshi" }

[bundles]
room = ["room-runtime"]

[plugins]
application = { id = "com.android.application", version.ref = "application" }
kotlin = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }

3.1 引用插件

Project build.gradle

plugins {
    alias(libs.plugins.application) apply false
    alias(libs.plugins.kotlin) apply false
    alias(libs.plugins.ksp) apply false
}

App module build.gradle

plugins {
    alias(libs.plugins.application)
    alias(libs.plugins.kotlin)
    alias(libs.plugins.ksp)
}

3.2 引入版本

android {
    compileSdk = libs.versions.compileSdk.get().toInt()

    defaultConfig {
        applicationId = "xxxxxx"
        minSdk = libs.versions.minSdk.get().toInt()
        targetSdk = libs.versions.targetSdk.get().toInt()
        versionCode = libs.versions.versionCode.get().toInt()
        versionName = libs.versions.versionName.get()

    }
    
}

3.3 引入依赖

dependencies {
    implementation(libs.core.ktx)
    implementation(libs.appcompat)
    implementation(libs.material)
    implementation(libs.constraintlayout)
    testImplementation(libs.junit)
    androidTestImplementation(libs.android.junit)
    androidTestImplementation(libs.espresso.core)

    // Room
    implementation(libs.room.runtime)
    annotationProcessor(libs.room.compiler)
    // To use Kotlin Symbol Processing (KSP)
    ksp(libs.room.compiler)
    // optional - Kotlin Extensions and Coroutines support for Room
    implementation(libs.room.ktx)
    // 测试数据库
    testImplementation(libs.room.testing)
    // moshi
    ksp(libs.moshi)
}

代码:PractiseProject

参考

Android中国官网:将 build 迁移到版本目录

android官网:将 build 迁移到版本目录

Sharing dependency versions between projects

Using Plugins

<think>好的,我需要解决用户在Version Catalog中声明ToastUtils版本或替换现有可用版本的问题。首先,用户提到的ToastUtils版本不存在,可能是指依赖库的版本在仓库中不可用,或者版本号写错了。Version Catalog是Gradle的一个功能,用于集中管理依赖版本,所以用户可能在尝试添加ToastUtils时遇到了问题。 首先,我应该确认用户是否正确配置了Version Catalog文件,通常是`libs.versions.toml`。用户需要在这个文件中定义库的别名、组、名称和版本。例如,如果ToastUtils的组是com.example,名称是toast-utils,版本是1.0.0,那么在TOML文件中应该添加对应的条目。如果版本不存在,可能需要检查仓库是否有该版本,或者是否有拼写错误。 另外,用户可能需要替换为现有的可用版本。这时候需要查看该库的官方文档或仓库,找到最新的可用版本号,并更新到Version Catalog中。例如,如果最新版本是1.2.0,用户需要将版本号更改为这个,并同步项目。 还有可能用户使用的库已经被废弃或迁移到了新的名称下,这时候需要替换为新的依赖项。例如,可能ToastUtils被合并到了另一个库中,或者改名了,这时候需要调整组和名称。 另外,参考用户提供的引用信息中,关于版本不匹配的问题,比如Java中的版本错误,可能需要类比到Gradle的依赖管理中。如果依赖的库版本与Gradle或插件版本不兼容,也可能导致问题。但这里用户的问题更直接是关于Version Catalog的配置。 综合这些情况,我应该指导用户如何正确在Version Catalog中添加或修改ToastUtils的版本,并建议检查版本是否存在,或者替换为已知可用的版本。同时,提醒用户同步项目,确保配置生效。 可能还需要建议用户检查仓库配置,确保依赖库所在的仓库(如Maven Central或JitPack)已经正确添加到项目的settings.gradle或build.gradle文件中。如果仓库中没有该版本,自然无法解析依赖。 最后,可能需要提供示例代码,展示如何在TOML文件中声明依赖,并在模块的build.gradle中使用它。如果用户需要替换版本,给出修改版本号的步骤,并说明如何验证是否解决。</think>在Version Catalog中声明或替换依赖版本可以通过以下步骤实现: ### 一、检查当前依赖声明 1. 打开项目根目录的`gradle/libs.versions.toml`文件 2. 查找现有ToastUtils声明(若存在): ```toml [versions] toastUtils = "1.0.0" # 假设当前版本不存在 [libraries] toast-utils = { group = "com.example", name = "toast-utils", version.ref = "toastUtils" } ``` ### 二、声明可用版本 #### 方案1:直接声明版本号 ```toml [versions] toastUtils = "2.1.5" # 替换为实际存在的版本号 [libraries] toast-utils = { group = "com.example.android", name = "toast-utils", version.ref = "toastUtils" } ``` #### 方案2:使用动态版本(谨慎使用) ```toml [versions] toastUtils = "2.1+" # 匹配2.1.x最新版 ``` ### 三、验证版本可用性 通过仓库地址检查版本是否存在: 1. Maven Central: ``` https://repo1.maven.org/maven2/com/example/android/toast-utils/ ``` 2. JitPack: ``` https://jitpack.io/#com.example.android/toast-utils ``` ### 四、替换为替代库(如必要) 若原库已不可用,可在`libs.versions.toml`中替换: ```toml [libraries] toast-utils = { group = "com.another.lib", name = "toastx", version.ref = "toastxVersion" } [versions] toastxVersion = "3.0.0" ``` ### 五、同步依赖配置 1. 执行Gradle同步操作 2. 检查模块级`build.gradle`中是否正确引用: ```groovy dependencies { implementation libs.toast.utils } ``` ### 六、常见问题排查 1. 检查仓库配置是否包含对应源(如mavenCentral()) 2. 验证网络访问权限(企业内网可能需要代理) 3. 清除Gradle缓存: ```bash ./gradlew clean build --refresh-dependencies ``` 版本管理建议采用语义化版本规范(SemVer),注意主版本号变更可能包含不兼容修改[^2]。若出现类版本不匹配错误,可参考Java版本兼容性处理方式[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃骨头不吐股骨头皮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值