一个简单的 Android 版本目录(Version catalog)实现指南

news2024/12/24 8:19:35

一个简单的 Android 版本目录实现指南


使用 TOML 格式
在本文中,我们将探讨版本目录以及如何实现它。

版本目录

Gradle 版本目录使您能够以可扩展的方式添加和维护依赖项和插件。因此,不必在各个构建文件中硬编码依赖项名称和版本,而是在目录中定义它们,并在所有模块中使用。

实现

要实现版本目录,我们可以在 settings.gradle 文件的 dependencyResolutionManagement 块中定义目录(查看此链接以了解更多详细信息),但我们将使用 TOML 格式来实现它…

https://docs.gradle.org/current/userguide/platforms.html

1- 创建一个版本目录文件

在根项目的 gradle 文件夹中,创建一个名为 libs.versions.toml 的文件。Gradle 默认在 libs.versions.toml 文件中查找目录,因此建议使用这个默认名称。

2- 定义您的版本、库和插件…

libs.versions.toml 中,我们可以定义我们的表…"

[versions]
kotlin = "1.8.10"
compose = '1.4.0'
material3 = '1.1.0-rc01'
...

[libraries]
compose-ui = { module = "androidx.compose.ui:ui", version.ref = "compose" }
compose-material3 = { module = "androidx.compose.material3:material3", version.ref = "material3" }
...

[plugins]
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
...

基本上,[versions][libraries] 是一组键/值对(如 kotlin = "1.8.10")的集合,称为 Tables…

https://toml.io/en/v1.0.0#table

这些表将从所有构建文件的libs.table.key处访问,因此我们稍后将在构建文件中使用它们。

请注意,我们使用了版本引用(version.ref = "xxx")而不是硬编码版本。这样可以使我们的版本可重复使用 😃

注意:您可以使用分隔符,例如 -、_、.,Gradle 将它们归一化为 .,并允许您创建子部分。因此,compose-ui 将成为 compose.ui

3- 定义 bundles(可选)

优化的做法是声明依赖束,这是常用在一起的“依赖项组”。例如…

[bundles]
compose = [
    "compose-ui",
    "compose-material3"
]

4- 最后,在您的模块中使用它们 🤩

同步项目,嘿!您现在拥有了一切,可以轻松地使用类型安全的自动完成来定义依赖项… ,

plugins {
    alias libs.plugins.kotlin.android
    ...
}

dependencies {
    // compose
    implementation libs.compose.ui
    implementation libs.compose.material3

    // or you can use bundles
    implementation libs.bundles.compose
}

实际上就是这样 😃 现在您只需同步项目,解决 Gradle 抛出的数千个错误,然后就可以开始了

以下是一些有用的注意事项…

  • 1- 您可以不使用库的完整 ID…,
compose-ui = { module = "androidx.compose.ui:ui", ...}

而是分开定义库的组和名称…,

androidx-ktx = { group = "androidx.core", name = "core-ktx", ... }
  • 2- 通常,版本名称使用驼峰命名(例如,hiltCompose),而库、捆绑包和插件使用短横线命名(例如,androidx-ktx)。

  • 3- 在我们的 TOML 文件中声明的版本也可以通过类型安全的访问器访问,使它们可以用于更多用例,而不仅仅是依赖版本。例如,如果您正在使用 compose… "

composeOptions {
    kotlinCompilerExtensionVersion libs.versions.compose.get()
}

版本目录(Version catalog)的优势

  • 1- 使用类型安全的自动完成轻松添加依赖项。
  • 2- 所有依赖项都在一个地方进行管理,并对所有模块可见。
  • 3- 集中式版本控制。
  • 4- 捆绑包功能令人惊叹

缺点

  • 1- 没有依赖项更新建议。(但您可以使用此插件来帮助您保持库的最新状态)
  • 2- 迁移项目可能会比较繁琐(使用 Copilot 或向懂行的人寻求帮助吧)。

参考链接

https://github.com/infoilyasipek/satellite/commit/f516054ae393eca2cf1c8bdd58735aa1819aabbc
https://docs.gradle.org/current/userguide/platforms.html
https://developer.android.com/build/migrate-to-catalogs#groovy
https://proandroiddev.com/better-dependencies-management-using-buildsrc-kotlin-dsl-eda31cdb81bf

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows 10 关于进程出现 已挂起,导致无法结束任务,或者taskkill 命令也被拒绝访问等问题解决方法

理解 也就是说,平时电脑启动的是快速启动配置,相当于是休眠,但是有可能会存在一些 bug ,所以,作为开发者来说,最好是取消这个快速启动的配置,不然 bug 满天飞,当然这只是有可能。 …

MYSQL练习三答案

练习3 构建数据库 数据库 数据表 answer开头表为对应题号答案形成的数据表 表结构 表数据 答案 1、写一条SQL查询语句,找出所有属于"Electronics"类 别的产品信息。 SQL语句 select * from products where category Electronics;结果: 2…

安防视频管理平台GB设备接入EasyCVR, 如何获取RTMP与RTSP视频流

安防视频监控平台EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力,比…

微信小程序中使用echarts方法

小程序中使用echarts echarts是一个基于JS的数据可视化图标库,它提供了直观,生动,可交互,可个性定制的数据可视化图表。一般在vue中会使用到,并且官网也详细的说明了如何在vue中使用,但是今天我想来探讨的…

python面试宝典1

目录标题 python基础1、代码中修改不可变数据会出现什么问题?什么异常?2、a1,b2,不用中间变量交换 a 和 b 的值?3、print调用python中底层的什么方法?4、理解下面代码,结果输出5、对input()函数的理解6、理解代码&…

誉天程序员-常用网站

学习方法六大招 日常你是如何学习新知识的?(面试官爱问哦) 1、百度百科概念了解 2、技术官网简单了解 3、同类产品技术选型 4、百度搜索入门案例 5、泛读百文瘦弱圆润 6、遇到问题问AI助手(chatGPT)噢 技术路线图&a…

C#中未能找到为main方法指定的XXX.Program怎么解决

有时在修改项目名称后,报错未能找到为main方法指定的XXX.Program 解决办法: 点击进入项目属性,将启动对象设置为空或者你要指定的XXX.Program(改名后的)

基于SDRAM的串口回环测试

文章目录 前言一、SDRAM简介二、SDRAM芯片手册解析2.1 芯片信息2.2 功能描述2.3 指令集 三、SDRAM配置3.1 初始化3.2 自动刷新3.3 突发写操作3.4 突发读操作3.5 仲裁3.5 FIFO控制3.5 FIFO数据读 四、结果验证 前言 本文将介绍在AWC_C4MB开发板上进行基于串口的SDRAM数据回环测试…

能直接运营的校园跑腿代买拿寄取小程序开发

​说到做跑腿生意,除了做同城跑腿配送外,校园跑腿可是即成本又低又好操作的一个项目。 一般省会城市大学大专基本都是有好几所的,学校的特点是人员密集,跑腿配送周期短,且配送人员好招募,推广人员好招募。…

css - Media Query

使用bootstrap的grid system可以在一个较为粗糙的范围得到较好的响应性,但是通过viewport可以看到网站在具体哪个像素点处变得丑陋,再通过css media query来精细调整网页布局。 可以通过media query来提高网页移动响应能力。

网络安全 Day17-计算机网络知识02(复杂物理原件)

计算机网络知识02(复杂物理原件) 1. 交换机2. 路由器 1. 交换机 什么是交换机 实现一个网络内多台主机之间通讯的设备用于电信号转发和放大的网络设备 常见的交换机:以太网交换机,电话交换,光纤交换机交换机的种类 二…

MySQL基础(三十一)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、概述 1. 什么是数据库 2. 数据库能干什么 2.1 企业应用 2.2 金融行业 2.3 电子商务 2.4 社交媒体 2.5 物联网 3. 为什么要用数据库,优势、特性&…

C#常见技能_参数传递

大家好,我是华山自控编程朱老师 前几天一个学员在学习C#与参数传递交互时,也不知道参数传递可以用来做什么 。下面我们就详细讲讲C# 和参数传递交互的相关知识。 C#是一种面向对象的编程语言,支持多种参数传递方式,包括传值和传引用两种方式…

Ubuntu18.04 下配置Clion

配置Clion 安装gcc、g、make Ubuntu中用到的编译工具是gcc©,g(C),make(连接)。因此只需安装对应的工具包即可。Ubuntu下使用命令安装这些包: (1)安装gcc sudo apt install gcc&am…

Mysql错误日志、通用查询日志、二进制日志和慢日志的介绍和查看

一.日志 1.日志和备份的必要性 日志刷新 2.mysql的日志类型 (1)错误日志 查看当前错误日志和是否记录警告设置 (2)通用查询日志 查看通用查询日志的设置 (3)二进制日志 查看二进制文件的设置&…

【Java基础教程】(四十五)IO篇 · 中:转换流、内存流和打印流(探索装饰设计模式与PrintStream类的进阶),文件操作案例实践、字符编码问题~

Java基础教程之IO操作 中 🔹本节学习目标1️⃣ 转换流2️⃣ 案例:文件复制3️⃣ 字符编码4️⃣ 内存流5️⃣ 打印流5.1 打印流设计思想——装饰设计模式5.2 打印流5.3 PrintStream 类的改进 🌾 总结 🔹本节学习目标 掌握内存操作…

C++初阶 - 5.C/C++内存管理

目录 1.C/C的内存分布 2.C语言中动态内存管理方式:malloc、calloc、realloc、free 3.C内存管理方式 3.1 new/delete操作内置类型 3.2 new 和 delete操作自定义类型 4.operator new 与 operator delete 函数(重要点) 4.1 operator new 与…

Go语言开发者的Apache Arrow使用指南:扩展compute包

在本系列文章的第4篇《Go语言开发者的Apache Arrow使用指南:数据操作》[1]中我们遇到了大麻烦:Go的Arrow实现居然不支持像max、min、sum这样的简单聚合计算函数:(,分组聚合(grouped aggregation)就更是“遥不可期”。要想对从CSV读取的数据[2…

如何在代码中用宏定义确定VS编译器版本

我们经常需要将同一个代码文件在不同的编译器下编译,实际上对应着不同的代码,这个时候就可以使用宏定义来进行判断,比如如下代码: #if _MSC_VER >1900 // VS2015或者以上 #ifndef _CRT_SECURE_NO_WARNINGS #define _CRT_SECUR…

第十四届蓝桥杯大赛青少年省赛C++组试题真题 2023年5月

一、选择题 第 1 题 单选题 C中,bool类型的变量占用字节数为 ( )。 A. 1 B. 2 C. 3 D. 4 第 2 题 单选题 以下关于C结构体的说法,正确的是 ( )。 A. 结构体中只能包含成员变量,不能包含成员函数 B. 结构体不能从另一个结构体继承 …