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 {......// 引入CatalogsversionCatalogs {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 falsealias(libs.plugins.kotlin) apply falsealias(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)// Roomimplementation(libs.room.runtime)annotationProcessor(libs.room.compiler)// To use Kotlin Symbol Processing (KSP)ksp(libs.room.compiler)// optional - Kotlin Extensions and Coroutines support for Roomimplementation(libs.room.ktx)// 测试数据库testImplementation(libs.room.testing)// moshiksp(libs.moshi)
}

代码:PractiseProject

参考

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

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

Sharing dependency versions between projects

Using Plugins

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/674682.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何全面规避医疗数据安全风险?“一中心三大管控域”打开新思路!

作为医院的核心基础设施,数据库已然演变成了一种具有“资产”属性的重要元素。而随着不断变化的医疗业务场景和日趋严格的合规性要求,如何让安全全方位贯穿医疗数据的生命周期,是一项系统性的建设工作,难点诸多。 基于多年的数据…

js 图片渐变

1. 点击图片,使其渐变为另一张图片 通过定义keyframes来创建一个淡入淡出的动画效果。当图片被点击时,先添加淡出动画使图片透明度从0渐变到1,然后在1秒后切换图片源并添加淡入动画使新图片透明度从0渐变到1,实现图片渐变效果。 …

交易复盘-20240507

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 一支股票 10%的时候可以操作, 90%的时间适合空仓等待 蔚蓝生物 (5)|[9:25]|[36187万]|4.86 百合花…

深入理解nginx http响应限速功能

目录 1. 引言2. 配置参数2.1 limit_rate 配置指令2.2 limit_rate_after 配置指令2.3 其他限速配置 3. 源码分析 1. 引言 在现代互联网应用中,服务器的性能和响应速度是至关重要的。为了保证服务器的稳定性和可靠性,限制客户端对服务器的访问速度是一项重…

嵌入式linux学习第三天汇编语言点灯

嵌入式linux学习第三天汇编语言点灯 今天学习如何在linux板子上点灯。 I.MX6U GPIO 详解 我们发现I.MX6U GPIO是分为两类的,:SNVS 域的和通用的。在讨论i.MX6U或类似的复杂微处理器时,了解其GPIO(通用输入输出)引脚…

docker jenkins 部署springboot项目

1、创建jenkins容器 1,首先,我们需要创建一个 Jenkins 数据卷,用于存储 Jenkins 的配置信息。可以通过以下命令创建一个数据卷: docker volume create jenkins_data启动 Jenkins 容器并挂载数据卷: docker run -dit…

笔记本连接不上远程桌面,笔记本无法连接远程桌面的可能原因及解决方法

在使用远程桌面功能时,笔记本无法成功连接的情况可能由多种原因引起。为了有效地解决这个问题,我们需要逐一排查这些可能的原因,并采取相应的解决措施。 首先,网络连接稳定性是远程桌面连接成功的关键。请确保笔记本和远程计算机之…

【Linux】Docker 安装部署 Nacos

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 【Linux】Docker 安装部署 Nacos docker搜索na…

跟TED演讲学英文:4 pillars of college success in science by Freeman Hrabowski

4 pillars of college success in science Link: https://www.ted.com/talks/freeman_hrabowski_4_pillars_of_college_success_in_science Speaker: Freeman Hrabowski Date: February 2013 文章目录 4 pillars of college success in scienceIntroductionVocabularyTranscr…

IP规划案例

整个OSPF环境IP基于172.16.0.0/16划分 172.16.0.0/16 先分成2个网段(OSPF RIP),借1位172.16.0.0/17 ---OSPF 再按区域划分(5个区域),借3位 172.16.0.0/20 ---Area 0 三个环回 MGRE 4个网…

1-2 ARM单片机GPIO

def:通用输入输出口 GPIO输出模式原理讲解 1:推挽输出 2:复用推挽输出 电流最大是20mA,对于单片机来说总体的输出是由范围的 开漏/复用开漏输出 外部接上拉电阻的开漏输出 线与的概念 注: 与的概念:全1为1&…

解决Python中的 `ModuleNotFoundError: No module named ‘fcmeans‘` 错误

ModuleNotFoundError: No module named fcmeans 解决Python中的 ModuleNotFoundError: No module named fcmeans 错误如何解决这个错误fcmeans 库简介应用实例 解决Python中的 ModuleNotFoundError: No module named fcmeans 错误 在进行数据科学或机器学习项目时,…