Android 依赖统一配置管理(Version Catalogs)
最近升级了Android Studio版本到Koala Feature Drop | 2024.1.2,新建项目后发现项目配置又有变化,默认开始使用了一个名叫 Gradle 版本目录
的东西,当然也可以称之为依赖统一配置管理
,一开始还有点陌生,但是经过一番了解之后,发现其实看着变化挺大,但总得来说还是比较容易上手,当然了之前的配置方式还是可以继续使用,但是官方既然推荐,那么还是很有必要学习下的,毕竟码农也还是要与时俱进的。
依赖统一配置管理
借助 Gradle 版本目录,您能够以可扩容的方式添加和维护依赖项和插件。使用 Gradle 版本目录,您可以在拥有多个模块时更轻松地管理依赖项和插件。您不必对各个 build 文件中的依赖项名称和版本进行硬编码,也不必在每次需要升级依赖项时都更新每个条目,而是可以创建一个包含依赖项的中央版本目录,各种模块可在 Android Studio 协助下以类型安全的方式引用该目录。
上面这一段是官方的描述,应该都能看明白,Gradle 版本目录
新项目是通过名为libs.versions.toml
的文件进行配置的,因此我们就先从该文件入口一步一步看看是如何配置和使用的。
依赖和插件配置方式
在项目中会多出来一个libs.versions.toml的文件,该文件的存放目录在项目根目录中的gradle文件夹中,其结构如下:
[versions]
...[libraries]
...[plugins]
...
不难看出内容结构分为三个部分,其作用如下:
[versions]: 定义了项目中使用的依赖项或者插件的版本变量。可以在后续代码块(libraries 和 plugins 代码块)中使用这些变量。
[libraries]: 定义了项目中需要使用的依赖项。(适用于远程二进制文件或本地库模块,貌似是废话~)。
[plugins]: 定义了项目中需要使用的插件。
接着让我们来用一个完整的示例来看它具体是如何配置依赖项和插件的:
[versions]
agp = "8.6.0"
appcompat = "1.6.1"[libraries]
appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
这里在[versions]
中配置了两个版本号变量,一个是名为agp(安卓gradle插件)的版本为8.6.0,另一个是名为appcompat依赖的版本为1.6.1。
在[libraries]
中完整的配置了名为appcompat的依赖项变量,等号右边大括号中的version.ref则是对[versions]
配置中的appcompat版本号的引用,然后group和name则是真实依赖的信息,完整的配置下来的话,依赖为:“androidx.appcompat:appcompat:1.6.1”。
在[plugins]
中完整的配置了名为android-application的插件变量,等号右边大括号中version.ref则引用了[versions]
中配置的agp版本号,id这里就不再描述了~。
此外,关于变量命名方式,官方建议使用kebab case方式进行命名。
Kebab case(或称为snake case的全小写版本)是一种用于编写变量名、文件名和其他标识符的命名约定。在kebab case中,所有的字母都是小写的,并且每个单词之间用连字符(-)分隔。
说到这里,配置这块应该都有一个大致的了解了吧,如果还不明白的话,可以这么认为,libs.versions.toml
是一个类,[versions]
是一个键为String,值为String的公有集合;[libraries]
是一个键为String,值为librarie对象(三个变量group、name、version)的公有集合;[plugins]
是一个键为String,值为plugin对象(两个变量id、version)的公有集合,就跟我们用java或者kotlin写代码是一样的,这个类主要是用来通过这些变量和对象配置我们项目中需要引入的依赖或者插件信息,后续需要使用的时候通过这里配置的信息名称引用即可,可能我这个描述不不太恰当,但大致意思应该就是这样。
项目中引用
插件引用
插件引用,通过libs.plugins进行配置的插件变量的引用,并将变量名中的下划线和短划线转换为圆点。还是以上面的例子继续,插件的引入方式:
根目录下的build脚本:
plugins {alias(libs.plugins.android.application) apply false
}
模块下的build脚本:
plugins {alias(libs.plugins.android.application)
}
依赖引用
在需要添加依赖的模块中的 build 脚本中添加对依赖项别名的引用。从 build 脚本引用依赖变量时,需要以libs.开头进行访问,不需要包含 libraries 限定符,例如:
dependencies {implementation(libs.appcompat)
}
版本号引用
版本号引用需要以libs.versions开头进行引用, versions版本号引用,实际应该极少有使用的场景,其实跟上面两个类似,这里就不再举例了。
总结
以上就是本篇文章的全部内容。是不是觉得还是比较简单的,通过以上内容,想必有些同学也能看出来,使用依赖统一配置确实好处多多,特别是针对多module的项目,依赖集中管理、减少重复、提高可读性。更重要的是引用简单,可以显著提高依赖管理的可维护性。
相关文章:
Android 依赖统一配置管理(Version Catalogs)
最近升级了Android Studio版本到Koala Feature Drop | 2024.1.2,新建项目后发现项目配置又有变化,默认开始使用了一个名叫 Gradle 版本目录的东西,当然也可以称之为依赖统一配置管理,一开始还有点陌生,但是经过一番了解…...
如何为数据看板产品接入实时行情接口并展示行情
在金融科技领域,实时数据是分析和决策的关键因素。通过AllTick的实时行情API,您可以轻松将实时市场数据集成到数据看板产品中,为用户提供丰富的市场洞察。本文将详细介绍如何使用AllTick API,通过WebSocket协议接收并展示实时市场…...

数据结构 C/C++(实验一:线性表)
(大家好,今天分享的是数据结构的相关知识,大家可以在评论区进行互动答疑哦~加油!💕) 目录 提要:实验题目 一、实验目的 二、实验内容及要求 三、算法思想 实验1 实验2 四、源程序及注释 …...

使用WebStorm开发Vue3项目
记录一下使用WebStorm开发Vu3项目时的配置 现在WebStorm可以个人免费使用啦!🤩 基本配置 打包工具:Vite 前端框架:ElementPlus 开发语言:Vue3、TypeScript、Sass 代码检查:ESLint、Prettier IDE…...
Linux高阶——1103——Signal信号机制
1、信号机制 在linux和unix系统下,如果想要处置(挂起,结束)进程,可以使用信号,经典消息机制,所以进程包括系统进程都是利用信号处置进程的 kill -l——查看所有系统支持的信号 1-31号信号——Unix经典信号ÿ…...
如何编写STM32的定时器程序
编写STM32的定时器程序通常涉及以下步骤: 1. 选择定时器和时钟配置 首先,你需要选择一个可用的定时器(TIM),并配置其时钟源。时钟源可以是内部时钟或外部时钟,通常通过RCC(Reset and Clock Con…...

【C++】C++的单例模式、跟踪内存分配的简单方法
二十四、C的单例模式、跟踪内存分配的简单方法 1、C的单例模式 本小标题不是讨论C的语言特性,而是一种设计模式,用于确保一个类在任何情况下都只有一个实例,并提供一个全局访问点来获取这个实例。即C的单例模式。这种模式常用于资源管理&…...

构建一个导航栏web
<!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>*{margin: 0;padding: 0;}#menu{background-color:purple;width: 100px;height: 50px;}.item{float: left;/* 浮动标签可以让块标签,…...
【Linux】Linux安全与密钥登录指南
在使用Linux服务器时,确保服务器的安全至关重要。本文将为你介绍一些关键的Linux安全措施,包括开启密钥登录、查看登录日志、限制登录IP以及查看系统中能够登录的账号。以下内容适合小白用户,通过简单的操作就能有效提升服务器的安全性。 目录…...

数据采集之scrapy框架
本博文使用基本框架完成搜房网或者其他网站的数据爬取(重点理解 scrapy 框架的构建过程,使用回调函数,完成数据采集和数据处理) 包结构目录如下图所示: 主要代码: (sfw.py) # -*- …...

ReactPress—基于React的免费开源博客CMS内容管理系统
ReactPress Github项目地址:https://github.com/fecommunity/reactpress 欢迎提出宝贵的建议,感谢Star。 {int sum 0;…...

期权交易策略 v0.1
一.概述 1.参考 <期权波动率与定价> 2.期权价格 标的现价100元,到期日价格可能情况如下。 价格 80 90 100 110 120 概率 20% 20% 20% 20% 20% 持有标的时,期望收益为0.如果持有100的看涨期权,忽略期权费,期望收益为(100-100)*0.2…...

pytorch学习:矩阵分解:奇异值分解(SVD分解)
前言 矩阵分解(Matrix Decomposition)是将一个矩阵分解成多个矩阵的乘积的过程,这种分解方法在计算、机器学习和线性代数中有广泛应用。不同的分解方式可以简化计算、揭示矩阵的内在结构或提高算法的效率。 奇异值分解 奇异值分解…...

接口测试用例设计的关键步骤与技巧解析!
简介 接口测试在需求分析完成之后,即可设计对应的接口测试用例,然后根据用例进行接口测试。接口测试用例的设计也需要用到黑盒测试用例设计方法,和测试流程与理论章节的功能测试用例设计的方法类似,设计过程中还需要增加与接口特…...

CSS画icon图标系列(一)
目录 前言: 一、向右箭头 1.原理: 2.代码实现 3.结果展示: 二、钟表 1.原理: 2.代码展示: 3.最终效果: 三、小手机 1.原理: 2.代码展示: 3.最后效果: 四、结…...
【数据结构-合法括号字符串】【华为笔试题】力扣1190. 反转每对括号间的子串
给出一个字符串 s(仅含有小写英文字母和括号)。 请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。 注意,您的结果中 不应 包含任何括号。 示例 1: 输入:s “…...

qt QFileInfo详解
1、概述 QFileInfo是Qt框架中用于获取文件信息的工具类。它提供了与操作系统无关的文件属性,如文件的名称、位置(路径)、访问权限、类型(是否为目录或符号链接)等。此外,QFileInfo还可以获取文件的大小、创…...

金华迪加 现场大屏互动系统 mobile.do.php 任意文件上传漏洞复现
0x01 产品简介 金华迪加现场大屏互动系统是一种集成了先进技术和创意设计的互动展示解决方案,旨在通过大屏幕和多种交互方式,为观众提供沉浸式的互动体验。该系统广泛应用于各类活动、展览、会议等场合,能够显著提升现场氛围和参与者的体验感。 0x02 漏洞概述 金华迪加 现…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
[特殊字符] 手撸 Redis 互斥锁那些坑
📖 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作,想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁,也顺便跟 Redisson 的 RLock 机制对比了下,记录一波,别踩我踩过…...

门静脉高压——表现
一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构:由肠系膜上静脉和脾静脉汇合构成,是肝脏血液供应的主要来源。淤血后果:门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血,引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...
视觉slam--框架
视觉里程计的框架 传感器 VO--front end VO的缺点 后端--back end 后端对什么数据进行优化 利用什么数据进行优化的 后端是怎么进行优化的 回环检测 建图 建图是指构建地图的过程。 构建的地图是点云地图还是什么信息的地图? 建图并没有一个固定的形式和算法…...