当前位置: 首页 > news >正文

使用 Gradle 版本目录进行依赖管理 - Android

  /  前言  /

在软件开发中,依赖管理是一个至关重要的方面。合理的依赖版本控制有助于确保项目的稳定性、安全性和可维护性。

Gradle版本目录(Version Catalogs)是 Gradle 构建工具的一个强大功能,它为项目提供了一种集中管理依赖版本的方式,使得团队协作更为高效。

/  什么是版本目录?/

Gradle版本目录是 Gradle 6.8 版本引入的一项新功能,它允许开发者将项目中使用的所有第三方依赖的版本信息集中管理在一个地方。

通过定义一个版本目录,你可以在一个文件中指定所有依赖的版本号,而不必在每个模块或构建文件中重复声明。

/  示例  /

1. 新建一个空项目

首先创建一个空白的 Android 项目,默认情况下我们的 Gradle 文件如下:

图片

可以看到所有的依赖都是以字符串形式呈现,到后期项目越来越庞大时,对于开发者而言维护工作会大大增加。当然Gradle版本目录我相信在后期的 Android Studio 中以默认的形式存在。

不难看出,Android中的依赖项基本都是由相同部分组成,什么意思呢?即冒号(:)之前的就是所谓的依赖组,你可以理解为一个依赖组捆绑了多个相关的依赖项,冒号之后的就是它的组成部分。例如:

  • 依赖组:androidx.compose.ui

  • 间隔:冒号(:)

  • 具体依赖:ui-graphics

2. 创建版本目录

在 gradle 文件中添加一个名为 libs.versions.toml 文件,添加完成后,点击 Sync 同步一下。

图片

文件包含三个部分:版本块、依赖库块、插件块。

 

[versions]

[libraries]

[plugins]

3. 开始迁移依赖

回到 build.gradle 文件中,你会发现依赖项弹出了黄色高亮提示。

图片

根据IDE提示可以智能的识别到版本目录的存在,然后一键替换,替换后会报错,我们需要同步一下即可。

图片

来到版本目录,IDE自动地把依赖放到了对应的位置,如下图:

图片

剩余的依赖同上依次迁移过去到版本目录即可,需要注意的是,像类似 compose-bom 已经统一了版本号的物料清单,被包含的依赖不再需要定义版本号并且不需要使用 module,而是使用 group。name 代表了具体的名字。

图片

图片

3. 迁移插件

接下来需要处理的另一处是我们的项目的插件部分,当然这部分没有提示,需要我们手动迁移过去。

图片

迁移前

图片

迁移后

在同步完成之后,如果 libs 出现以下报错问题可以参考博客解决:

图片

博客:

https://github.com/gradle/gradle/issues/22797

源码:

https://github.com/AAnthonyyyy/VersionCatalogsGuide

相关文章:

使用 Gradle 版本目录进行依赖管理 - Android

/ 前言 / 在软件开发中,依赖管理是一个至关重要的方面。合理的依赖版本控制有助于确保项目的稳定性、安全性和可维护性。 Gradle版本目录(Version Catalogs)是 Gradle 构建工具的一个强大功能,它为项目提供了一种集中管理依赖…...

CS_上线三层跨网段机器(完整过程还原)

以前讲过用cs_smb_beacon上线不出网机器,但是真实的网络拓扑肯定不止这么一层的网络! 所以我就来搭建一个复杂一点的网络环境!! 当然了,这三台电脑之间都是不同的网段,(但是同属于一个域环境&a…...

crpto 的AES算法解密为空

1. 需求 对用户密码加密存入数据库,修改密码时取出密码在前端解密(保证密码前后端传输过程中为密文)。 文档地址:CryptoJS - CryptoJS (gitbook.io) 2. 原代码 2.1 加密 var userpass "123456"; var aseKey &quo…...

13.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-如果没有工具就创造工具

内容参考于: 易道云信息技术研究院VIP课 上一个内容 :12.游戏网络通信存在的问题 现在把游戏网络的架构看了一个小小的大概,可以用它的接口发数据接收数据了,如果真正想用它这一套东西,真正核心不在于它的接口而在于…...

配置artifactory的反向代理和域名访问

一、概述 在许多情况下,组织会通过反向代理来提供对 Artifactory 的访问。在某些情况下,例如使用 Artifactory 作为 Docker 注册表,这种设置甚至是强制性的。为了简化反向代理的配置,Artifactory 提供了生成反向代理的功能&#x…...

python爬虫之协程知识点记录

一、协程 概念 协程 又称微线程(纤程),是一种用户态的轻量级线程 子程序 在所有的语言中都是层级调用的,比如A中调用B,B在执行过程中调用C,C执行完返回,B执行完返回,最后是A执行完毕。这是通过栈实现的&a…...

安卓开发1- android stdio环境搭建

安卓开发1-android stdio环境搭建 Jdk环境搭建 1. 准备Jdk,这边已经准备好了jdk1.8.0,该文件直接使用即可 2. 系统变量添加 %JAVA_HOME%\bin JAVA_HOME 3. 系统变量,Path路径添加 4. 添加完成后,输入命令javac / java -version,验证环…...

qt QRadioButton 及QButtonGroup 使用

QRadioButton 放在组合框QGroupBox中,再点击时,即使有多个QRadioButton按钮,同时选中的也就只有一个。 如下图所示, 对于多个QRadioButton,每个按钮都写一个槽函数是不太明智的选择,需要将QRadioButton放在…...

【LeetCode-178】最长重复子串(动归)

目录 LeetCode718.最长重复子串 题目描述 解法1:动态规划 代码实现 题目链接 题目描述 给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。 示例: 输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出&…...

1、jQuery介绍、css()、选择器、事件、动画

一、jQuery介绍&#xff1f; 1、什么是jQuery&#xff1f; 是一个JavaScript函数库 2、jQuery特点 写的少&#xff0c;做的多 3、jQuery的安装 直接下载引入 <script src"jquery-1.10.2.min.js"></script>通过cdn引入 <script src"https…...

ArcEngine 调用GP工具时,出现C++ R6034错误

1、Arcengine 调用GP工具时&#xff0c;遇到正试图在 os 加载程序锁内执行托管代码 问题 使用&#xff1a;把VS菜单的 调试->异常->Managed Debuggin Assistants->LoaderLock 的选中状态去掉。不会弹出该错误。 2 编译后运行EXE时&#xff0c;出现C R6034问题 ArcEng…...

windows下基于docker-desktop 安装 mysql 5.7

0.背景 docker-desktop v4.27.1Windows 11 22H2 docker-desktop 需要wsl的支持,一般win11新机子都默认开启了,安装docker-desktop 一路next即可.win10老版本需要自行安装开启wsl.一个小建议是,如果你的win10安装wsl时各种错误无法解决,建议升级到win11大概率解决,本人亲身经历…...

什么是Rust 语言

Rust 是一种专注于性能和内存安全的系统编程语言&#xff0c;其设计目标包括提供&#xff1a;零开销抽象、移动语义、内存安全、线程无数据竞争、类型安全和实时 gc 等功能。Rust 使用 RAII&#xff08;Resource Acquisition Is Initialization&#xff09;管理资源&#xff0c…...

2024年四川媒体新闻发布渠道,媒体邀约资源表

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 四川有哪些媒体新闻发布渠道&#xff0c;媒体邀约资源表&#xff1f; 2024年四川媒体新闻发布渠道&#xff0c;媒体邀约资源表 四川本地媒体&#xff1a;如四川日报、华西都市报、成都商…...

14:00面试,14:07就出来了,问的问题过于变态了。。。

我从一家小公司转投到另一家公司&#xff0c;期待着新的工作环境和机会。然而&#xff0c;新公司的加班文化让我有些始料未及。虽然薪资相对较高&#xff0c;但长时间的工作和缺乏休息使我身心俱疲。 就在我逐渐适应这种高强度的工作节奏时&#xff0c;公司突然宣布了一则令人…...

利用 Python 抓取数据探索汽车市场趋势

一、引言 随着全球对环境保护意识的增强和技术的进步&#xff0c;新能源汽车作为一种环保、高效的交通工具&#xff0c;正逐渐受到人们的关注和青睐。在这个背景下&#xff0c;对汽车市场的数据进行分析和研究显得尤为重要。 本文将介绍如何利用 Python 编程语言&#xff0c;结…...

新闻网站封锁AI爬虫 AI与新闻媒体博弈继续

随着ChatGPT等新兴AI模型的兴起&#xff0c;它们所依赖的网络爬虫正面临来自全球主流新闻网站的大规模封锁。Richard Fletcher博士团队对十个国家主流新闻网站的统计发现&#xff0c;到2023年底&#xff0c;48%的网站屏蔽了OpenAI的爬虫&#xff0c;24%屏蔽了Google的爬虫。那么…...

Python Web开发记录 Day5:jQuery(JavaScript库)

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 五、jQuery1、jQuery-选择器和菜单案例①快速上…...

前端-Vue3递归组件自定义Tree

需求 PS&#xff1a;写在前面&#xff0c;需求想要一个Tree 形结构展示当前的组织机构&#xff0c;最末层节点可以选择&#xff0c;层级明确。第一选择网上npm官网或者github 找找成型的东西 element-ui Tree 没有组织结构线js-tree 好看&#xff0c;但是适配Vue3 有点费劲&a…...

《TCP/IP详解 卷一》第12章 TCP初步介绍

目录 12.1 引言 12.1.1 ARQ和重传 12.1.2 滑动窗口 12.1.3 变量窗口&#xff1a;流量控制和拥塞控制 12.1.4 设置重传的超时值 12.2 TCP的引入 12.2.1 TCP服务模型 12.2.2 TCP可靠性 12.3 TCP头部和封装 12.4 总结 12.1 引言 关于TCP详细内容&#xff0c;原书有5个章…...

28、absolute定位,如果父亲不是relative,那么是参考谁?

目录 一、先给一个标准面试回答 二、最关键的一句话 三、什么叫“已定位祖先元素”&#xff1f; 四、如果父元素不是 relative&#xff0c;到底参考谁&#xff1f; 情况 1&#xff1a;父元素不是 relative&#xff0c;但更上层祖先里有非 static 元素 情况 2&#xff1a;…...

如何快速为视频添加字幕:VideoSrt自动字幕生成完整指南

如何快速为视频添加字幕&#xff1a;VideoSrt自动字幕生成完整指南 【免费下载链接】video-srt-windows 这是一个可以识别视频语音自动生成字幕SRT文件的开源 Windows-GUI 软件工具。 项目地址: https://gitcode.com/gh_mirrors/vi/video-srt-windows 你是否正在为视频字…...

告别串口调试!用虫洞ESP32S3-EYE开发板,5分钟把你的旧摄像头变成免驱USB摄像头

5分钟魔改指南&#xff1a;用ESP32S3-EYE将旧摄像头变身免驱USB设备 你是否曾在抽屉深处发现过几个落灰的OV2640摄像头模块&#xff1f;这些曾经活跃在创客项目中的小玩意&#xff0c;如今只需一块虫洞ESP32S3-EYE开发板&#xff0c;就能重获新生为即插即用的USB摄像头。与动辄…...

LoRa物理层CSS调制原理与抗干扰性能优化实践

1. LoRa物理层CSS调制技术揭秘 第一次接触LoRa的CSS调制时&#xff0c;我被它独特的鸟鸣般信号波形惊艳到了。这种听起来像海豚叫声的技术&#xff0c;实际上是一种名为Chirp Spread Spectrum&#xff08;线性扩频&#xff09;的物理层调制方案。想象一下用口哨吹出一段从低音滑…...

如何在Vibe Kanban中创建和使用自定义标签:提升任务管理效率的完整指南

如何在Vibe Kanban中创建和使用自定义标签&#xff1a;提升任务管理效率的完整指南 【免费下载链接】vibe-kanban Get 10X more out of Claude Code, Codex or any coding agent 项目地址: https://gitcode.com/GitHub_Trending/vi/vibe-kanban Vibe Kanban是一款高效的…...

网络协议深度解析

网络协议深度解析&#xff1a;揭开数字通信的神秘面纱 在数字化时代&#xff0c;网络协议是互联网通信的基石&#xff0c;它们像无形的交通规则&#xff0c;确保数据能够高效、安全地传输。这些协议背后的工作原理却鲜为人知。本文将从多个角度深入解析网络协议的核心机制&…...

ejabberd实时统计与报表:监控平台运行状态的有效方法

ejabberd实时统计与报表&#xff1a;监控平台运行状态的有效方法 ejabberd作为一款强大的即时通讯服务器平台&#xff0c;其实时统计与报表功能为系统管理员提供了全面的运行状态监控能力。通过内置的统计模块和监控工具&#xff0c;您可以轻松掌握服务器性能指标&#xff0c;…...

实战解析--内核移植卡在starting kernel的排查与解决

1. 问题现象与初步分析 当你兴致勃勃地给开发板移植新内核&#xff0c;串口突然卡在"Starting kernel..."不动时&#xff0c;那种感觉就像等快递显示"正在派送"却永远等不到敲门声。最近我在瑞萨RZ系列开发板上就遇到了这个经典问题&#xff1a;bootloader…...

如何永久保存微信聊天记录?用WeChatMsg打造你的专属数字记忆库

如何永久保存微信聊天记录&#xff1f;用WeChatMsg打造你的专属数字记忆库 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/…...

UG/NX高级加工与仿真模块许可证管理要点

UG/NX高级加工跟仿真模块许可证管理要点你是做研发的&#xff0c;肯定知道&#xff0c;软件许可证不单是买来就管够的。你经历过项目上线前夜&#xff0c;软件全被占用了&#xff0c;你只能干瞪眼&#xff1b;也注意啊到&#xff0c;每年花大几千乃至几十万买的高级模块&#x…...