最新要闻
- 环球速读:51岁已被游客喊了十多年谭爷爷!熊猫饲养员谭金淘“出圈”
- 全球快讯:17岁少年骑共享单车52天5000公里!成都-拉萨-新疆 穿越无人区
- 当前快看:12岁男孩玩游戏一个月花掉10多万!家长申请退款却遭拒绝
- 聊一聊:iOS 16.5 RC准正式版推送!iOS 16系统更新要绝唱了
- 每天坐高铁上下班是什么体验?一个月2400元
- 拒绝爆显存!RTX 4060 Ti 16GB曝新料:功耗增加5W|环球观点
- 工程粉墙合同范本(实用4篇)
- 环球新资讯:长征九号、长征十号火箭发动机好消息!200吨、载人可复用
- 男子淄博吃烧烤吐槽扇贝肉指甲大 网友:应该去青岛|世界最新
- 再也不用担心爱车被破坏!理想官方详解哨兵模式:三大优势|环球观热点
- 要闻速递:昔日安卓手机王者!HTC U23 Pro官宣:搭载骁龙7芯片
- 当前讯息:观战台:曼城阿森纳继续隔空对话 巴萨赢球即夺冠
- 精选!2022年全球电动车销量排行榜前十名出炉:中国霸气占7席
- 这届年轻人“断亲”或已成常态 90后/00后几乎都不走亲戚:原因无奈
- 看点:杲杲冬日光明暖真可爱什么意思-杲杲冬日光明暖真可爱
- 男子报案在香港中环码头遭遇抢劫 其周杰伦演唱会门票被抢走
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
迁移到 Gradle 7.x 使用 Version Catalogs 管理依赖
一、根目录下 build.gradle 变更
变更前:
buildscript { ext.kotlin_version = "1.5.0" repository { repository { mavenCentral() jcenter() } dependencies { classpath "com.android.tools.build:gradle:4.0.2" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10" classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.17" // 自定义 gradle 插件 classpath "com.sharpcj.plugin:abc:1.0.6" }}allprojects { repositories { mavenCentral() jcenter() maven { url "http://xx.xx.xx.xx:xxxx/xx/xx/" } } }
变更后:
根目录下的 buildscript 变更到 settings.gradle 中
【资料图】
setting.gradle
pluginManagement { repositories { gradlePluginPortal() google() mavenCentral() maven { allowInsecureProtocol = true url "http://xx.xx.xx.xx:xxxx/xx/xx/" }}dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() maven { url "https://jitpack.io" } maven { allowInsecureProtocol = true url "http://xx.xx.xx.xx:xxxx/xx/xx/" } }}
gradle 7.0.x 以上对于 http 协议的的仓库地址,需要显示声明:allowInsecureProtocol = true
根目录下 build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.// 全局 buildescript 依旧可以用buildscript { ext.kotlin_version = "1.5.0" // 自定义 gradle 插件 dependencies { classpath "com.sharpcj.plugin:abc:1.0.6" }}plugins { id "com.android.application" version "7.3.1" apply false id "com.android.library" version "7.3.1" apply false id "org.jetbrains.kotlin.android" version "1.7.20" apply false id "com.google.protobuf" version "0.8.17" apply false}
二、引入 aar 包gradle
7.0.x 以前:
将aar文件复制到libs文件夹中
在 model 下 build.gradle 中的 android {} 外层添加:
repositories { flatDir { dirs "libs" }}
- 在 dependencies 中加入
implementation files("libs/xxx.jar")
或者:
implementation(fileTree("libs"));
7.0.x 以上:
- 将aar文件复制到libs文件夹中
- build.gradle的dependencies中加入:
implementation(fileTree("libs"));
三、Version Catalogs —— 全新的管理依赖方式
3.1 此前的 Android 统一依赖管理的方式
3.1.1 传统apply from的方式
为了对模块进行统一管理,会在根目录新建一个config.gradle文件或者在根目录的build.gradle定义一些变量
ext { // ...}
模块下的 build.gradle 使用则通过 apply
方式引入。 添加
apply from "config.gradle"
3.1.2 buildSrc方式
什么是 buildSrc
当运行 Gradle 时会检查项目中是否存在一个名为 buildSrc 的目录。然后 Gradle 会自动编译并测试这段代码,并将其放入构建脚本的类路径中, 对于多项目构建,只能有一个 buildSrc 目录,该目录必须位于根项目目录中, buildSrc 是 Gradle 项目根目录下的一个目录,它可以包含我们的构建逻辑,与脚本插件相比,buildSrc 应该是首选,因为它更易于维护、重构和测试代码
特点
共享 buildSrc 库工件的引用,全局只有一个地方可以修改它。
优点
支持自动补全,支持跳转。
缺点
依赖更新将重新构建整个项目。
3.1.3 Composing builds
什么是Composing builds
复合构建只是包含其他构建的构建. 在许多方面,复合构建类似于 Gradle 多项目构建,不同之处在于,它包括完整的 builds ,而不是包含单个 projects。
特点
拥有buildSrc的优点,同时依赖更新不用重新构建整个项目
3.2 Verison Catalogs 管理
3.2.1 Version Catalogs 特点
- 对所有module可见,可统一管理所有module的依赖,Gradle会为每个依赖目录生成一个类型安全的访问器,如:libs.coreKtx。 每个依赖目录对构建项目都是可见的,确保依赖项的版本适用于每个子项目或模块
- 依赖项除了可以声明为单个依赖目录,还可以将多个依赖项声明为依赖目录组。即支持声明依赖bundles, 即总是一起使用的依赖可以组合在一起,
- 支持版本号与依赖名分离,可以在多个依赖间共享版本号
- 支持在单独的libs.versions.toml文件中配置依赖
- 支持在项目间共享依赖
3.2.2 启用 version Catalogs
由于此前 Version Catalogs 属于孵化中的特效,使用它之前需要启用该特性。在 settings.gradle 中添加如下代码:
settings.gradlepluginManagement { ...}// VERSION_CATALOGS当前并不是稳定版本功能// 所以需要预先开启功能预览 enableFeaturePreview("FEATURE")enableFeaturePreview("VERSION_CATALOGS")dependencyResolutionManagement {...}
但是当我使用 gradle 8.0 的时候,我发现该特性已经是稳定版本了,直接使用即可。无需再启用。在网上看到有说是从 gradle-7.4.1-src
版本开始转为正式版的。有待考证。实际使用的时候,如果编译报错提示了就加上。
3.2.3 使用 version catalog
声明 version catalogs
一种方式是直接在 Settings.gradle 中声明,如下:
settings.gradledependencyResolutionManagement { ...... // 编写版本目录的依赖库 versionCatalogs { libs { // 分别声明依赖别名("coreKtx"),groupId("androidx.core"),artifactId("core-ktx")以及版本("1.7.0") alias("coreKtx").to("androidx.core", "core-ktx").version("1.7.0") alias("appcompat").to("androidx.appcompat", "appcompat").version("1.3.0") alias("material").to("com.google.android.material", "material").version("1.4.0") alias("constraintlayout").to("androidx.constraintlayout", "constraintlayout").version("2.0.4") alias("junit-junit").to("junit", "junit").version("4.13.2") alias("junit-ext").to("androidx.test.ext", "junit").version("1.1.3") alias("junit-espresso").to("androidx.test.espresso", "espresso-core").version("3.4.0") // 针对对个相同版本号的依赖,我们可以定一个通用版本号,即将依赖与版本单独声明并引用 version("lifecycle", "2.2.0") alias("lifecycleExtensions").to("androidx.lifecycle", "lifecycle-extensions").versionRef("lifecycle") alias("lifecycleRuntime").to("androidx.lifecycle", "lifecycle-runtime-ktx").versionRef("lifecycle")// 除了单个依赖声明,我们也可以将多个依赖项声明为一个依赖组 bundle("appBaseLib", ["coreKtx", "appcompat", "material", "constraintlayout"]) // 声明一个插件 alias("kotlin-kapt").toPluginId("org.jetbrains.kotlin.kapt").version("1.7.0") alias("kotlin-parcelize").toPluginId("org.jetbrains.kotlin.plugin.parcelize").version("1.7.0")} }}
使用 version catalogs
plugins {...... // 使用版本目录中声明的插件 alias libs.plugins.kotlin.kapt alias libs.plugins.kotlin.parcelize}......dependencies { // 依赖单个制定的版本目录 implementation libs.coreKtx implementation libs.appcompat implementation libs.material implementation libs.constraintlayout implementation libs.lifecycleExtensions implementation libs.lifecycleRuntime testImplementation libs.junit.junit androidTestImplementation libs.junit.ext androidTestImplementation libs.junit.espresso // 依赖版本目录组 // implementation libs.bundles.appBaseLib}
通过 TOML 文件声明 version catalogs
除了在 settings.gradle
文件中直接声明依赖目录,官方更推荐使用 TOML 文件来声明依赖目录
首先在项目根目录下创建 libs.versions.toml
文件,文件名可以任意取,并编写如下依赖内容:
[versions]kotlin = "1.7.0"appcompat = "1.3.0"material = "1.4.0"constraintlayout = "2.0.4"lifecycle = "2.2.0"[libraries]coreKtx = { module = "androidx.core:core-ktx", version.ref = "kotlin" }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" }lifecycleExtensions = { module = "androidx.lifecycle:lifecycle-extensions", version.ref = "lifecycle" }lifecycleRuntime = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "lifecycle" }junit-junit = { module = "junit:junit", version = "4.13.2" }junit_ext = { module = "androidx.test.ext:junit", version = "1.1.3" }junit_espresso = { module = "androidx.test.espresso:espresso-core", version = "3.4.0" }[bundles]appBaseLib = ["coreKtx", "appcompat", "material", "constraintlayout"][plugins]kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" }kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" }
随后在 setting.gradle 中引用该 TOML 文件
settings.gradledependencyResolutionManagement { ...... // 第二种方式使用版本目录 libs { from(files("./libs.versions.toml")) }}
然后在app build.gradle 中使用 TOML 文件中声明的依赖
......dependencies { implementation libs.bundles.appBaseLib implementation libs.lifecycleExtensions implementation libs.lifecycleRuntime testImplementation libs.junit.junit androidTestImplementation libs.junit.ext androidTestImplementation libs.junit.espresso}
TOML 文件的使用说明
- TOML 文件由4个主要部分组成[versions] 用于声明可以被依赖项引用的版本[libraries] 用于声明依赖的别名[bundles] 用于声明依赖包(依赖组)[plugins] 用于声明插件
不可随意自定义 TOML 文件中的节点,否则会报错提示只能使用 versions
、libraries
、bundles
、plugins
、metadata
中的一个。关于 metadata
的作用暂且不清楚,查阅 gradle 官方文档也只提到前四个。
在使用 TOML 文件时,默认名是 libs, 如果创建的文件放置于
project/gradle/
目录下面,则在 settings.gradle 文件中可以省略声明。建议显示声明。声明
libraries
时,可以使用
coreKtx = { module = "androidx.core:core-ktx", version.ref = "kotlin" }
或者
coreKtx = { group = "androidx.core", name = "core-ktx", version.ref = "kotlin" }
- TOML 文件中变量命名大小写敏感,且以小写字母开头, 命名中可以如包含
-
或者_
或者.
,在相当于分组了。举例说明:
coreKtx = { module = "androidx.core:core-ktx", version.ref = "kotlin" }lifecycle_runtime = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "lifecycle"}lifecycle-viewmodel = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "lifecycle"}
在使用时分别为:
implementation libs.coreKtximplementation libs.lifecycle.runtimeimplementation libs.lifecycle.viewmodel
- 最后 TOML 还可以发布到远程仓库
四、参考资料
【Gradle7.0】依赖统一管理的全新方式,了解一下~
Version Catalog(中央依赖声明,即:版本目录)
Android 官方建议迁移至 Version Catalogs
Version Catalogs Gradle 官方页面
关键词:
-
迁移到 Gradle 7.x 使用 Version Catalogs 管理依赖
一、根目录下build gradle变更变更前:buildscript{ext kotlin_version=& 39;1 5 0& 39;repository{reposit
来源: -
【LeetCode剑指offer#04】包含min函数的栈、栈的压入、弹出序列(辅助栈的应用)
包含min函数的栈https: leetcode cn problems bao-han-minhan-shu-de-zhan-lcof 定义栈的数据结构,请在该
来源: 迁移到 Gradle 7.x 使用 Version Catalogs 管理依赖
焦点热议:线段树
【LeetCode剑指offer#04】包含min函数的栈、栈的压入、弹出序列(辅助栈的应用)
环球速读:51岁已被游客喊了十多年谭爷爷!熊猫饲养员谭金淘“出圈”
全球快讯:17岁少年骑共享单车52天5000公里!成都-拉萨-新疆 穿越无人区
当前快看:12岁男孩玩游戏一个月花掉10多万!家长申请退款却遭拒绝
聊一聊:iOS 16.5 RC准正式版推送!iOS 16系统更新要绝唱了
使用go-cqhttp搭建qq机器人
每天坐高铁上下班是什么体验?一个月2400元
拒绝爆显存!RTX 4060 Ti 16GB曝新料:功耗增加5W|环球观点
WSL Ubuntu 安装 minikube 世界热消息
工程粉墙合同范本(实用4篇)
环球新资讯:长征九号、长征十号火箭发动机好消息!200吨、载人可复用
男子淄博吃烧烤吐槽扇贝肉指甲大 网友:应该去青岛|世界最新
再也不用担心爱车被破坏!理想官方详解哨兵模式:三大优势|环球观热点
要闻速递:昔日安卓手机王者!HTC U23 Pro官宣:搭载骁龙7芯片
当前讯息:观战台:曼城阿森纳继续隔空对话 巴萨赢球即夺冠
精选!2022年全球电动车销量排行榜前十名出炉:中国霸气占7席
这届年轻人“断亲”或已成常态 90后/00后几乎都不走亲戚:原因无奈
瑞吉外卖day4
看点:杲杲冬日光明暖真可爱什么意思-杲杲冬日光明暖真可爱
男子报案在香港中环码头遭遇抢劫 其周杰伦演唱会门票被抢走
世嘉公布《魔界战记7》角色“彼岸绝胜斋”中文版介绍影像 为最恶毒剑士
人气手游《赛马娘》樱花进王1/7比例手办现已开定 将于10月发售
《爱恋冰果室》即将登陆XboxS 为恋爱经营模拟游戏
【世界新视野】4月新能源销量排名:最亮眼的 竟然不是比亚迪
当前速读:为什么面粉没有以前的香?加了添加剂安全吗?
焦点信息:员工病假15年起诉IBM:认为工资无法赶上通胀
舞台剧《全职猎人》在东京银河剧场举行公开彩排 讲述小杰等人故事
《圣斗士星矢》真人电影在北美上映 烂番茄新鲜度已降至17%
《塞尔达传说:王国之泪》官方推出系列周边 包括T恤与水杯等产品
小岛秀夫纪录片即将上线翠贝卡电影节首映 时长约为90分钟
《SD高达激斗同盟》新DLC水星的魔女现已发售 国区定价为48元
90后跆拳道女运动员娜娜摆摊卖水果 积极向上态度引发网友赞叹
【世界新视野】Python学习之五_字符串处理生成查询SQL
spring框架_@AutoWiredAnnotationBeanPostProcessor执行分析 今日聚焦
中国恒大公告:许家印成被执行人,涉及金额超 60 亿元-世界热门
某考研机构欲花百万请孟羽童代言 网友热议:赢麻了|当前快报
男子剪鼻毛致鼻腔感染住院12天 医生提醒:非常危险|每日信息
全球看点:将乔峰、郭靖等改写成大学生!金庸生前诉江南案终审宣判:获赔188万
Hyper Demon拆解 当前速看
新疆维吾尔自治区阿勒泰市2023-05-13 12:01发布暴雨蓝色预警 全球热闻
女子辞年薪50万工作照顾瘫痪奶奶:只想陪她走完最后一程-全球微头条
世界快播:国人最爱买啥车?2023新车购买意向研报出炉:比亚迪夺冠
券后9块9!汤臣倍健维生素D钙片大促:手慢真的无
环球新动态:苏享茂家属称收到翟欣欣660万还款,后者被判退还千万财物
热门:恒大汽车公告:剥离地产业务因资金不足已暂缓生产恒驰5
世界快资讯丨理想城市NOA测试画面曝光 马斯克:看起来有点眼熟
世界热门:AI出来后第一个失业的是孙燕姿?歌迷齐呼:等你的演唱会
天天速讯:夜莺初探四·mtail插件采集日志指标
《首次公开募股(IPO)企业品牌建设指南》标准立项暨“IPO企业品牌辅导专项行动”正式启动_动态
撑起国产芯片!华为继续摸索半导体核心技术:新专利带来更高效封装 天天微头条
伐木累暗示速激12
怎样查询个人养老保险缴纳的情况信息 怎样查询个人养老保险缴纳的情况|信息
当前资讯!男童酒店客房误食用过的安全套 家长与酒店吵翻:网友直呼太巧合
90后宝爸拽脚倒提1岁女儿摸金鱼 妈妈称没危险:网友吐槽为啥要摸 世界微资讯
今日热议:广西:5月13日至15日开展高考志愿填报演练
世界快播:分布式系统常见问题
百度手机曝光:后置双摄+4G网络 世界快资讯
骁龙888再就业!荣耀新平板入网:13英寸超大LCD屏_全球速看
德普拿下超级香水合约
速递!AI出来后第一个失业的是孙燕姿:为什么说她的音色不受法律保护
天天最资讯丨中国地形地貌最全的省份:你可能想不到
专家称睡满8小时是误区:张朝阳曾称四小时足够 睡多浪费
项目一个不留!OPPO放弃ZEKU自研芯片业务:多大代价都是最小代价 世界快资讯
法网公布奖金分配:总额提升12.3%,低排位选手获利,冠军230万欧-世界今日报
全球今热点:地位远超iPhone!苹果Reality Pro头显12月大规模量产:售价超2万
环球快播:小白也能辨别!买独显轻薄本必须要看的四大规格
马斯克:当Linda Yaccarino准备好时,我们会在Twitter Spaces进行实时音频对话,欢迎提问任何事情。-每日报道
有赞一面:亿级用户DAU日活统计,有几种方案?-每日速递
每日快播:gazebo+rviz 仿真
OPPO放弃自研芯片!马里亚纳X/Y官网页面悄然404_环球微速讯
天天快报!国外玩家质疑《塞尔达传说:王国之泪》涉嫌抄袭:照搬游戏机制
二次圆满成功!中国可重复火箭发动机传喜讯 今头条
在美国加州 我亲眼见到了Google对AI的孤注一掷_每日热闻
性能秒RTX 4060?AMD新显卡性能实测 光追是短板 今日报
庄河市气象局发布雷电黄色预警【III级/较重】【2023-05-13】
成都惠蓉保报销有等待期吗? 当前播报
4K【龙与地下城:侠盗荣耀】
苹果MacBook新专利公布 掌托与触控板位置实现触控交互
深圳一公司通知母亲节放假3天 每位员工将收到一套礼盒
全国多地气温开始火速上升 北方将迎来今年首轮高温天气过程
电影《灌篮高手》宣布密钥延期 将延长上映至6月19日
DC电影公布《闪电侠》国内首波口碑 将于6月16日全国上映
bilibili云剪辑将于今年5月31日下线 其访问入口关闭
电视剧《庆余年2》宣布正式开机 其海报细节涉嫌抄袭国外艺术家
林志颖首次现身珠海赛车场 身体状态颇为不错
京都动画工作室纵火杀人案9月5日公审 为平成时代最致命案件
迪士尼真人巨制《小美人鱼》即将上映 现已宣布内地版配唱阵容
当前关注:第三章.数据库系统(重点)
使用Pandoc构建Acm模板-焦点简讯
Epic下周神秘游戏喜加4:不是老头环、大表哥2|世界要闻
6死20余伤!广州宝马X3撞人案动机公开:发泄个人情绪 焦点信息
苏丹首都喀土穆等地的武装冲突12日仍在持续|每日速递
剑指 Offer 03. 数组中重复的数字-头条
REITs审核关注事项优化 突出以“管资产”为核心
【新华解读】科创50ETF期权上市启动 丰富市场风险管理工具
先到先停!上海一男子交停车费,回来没有车位停,觉得保安在狡辩
卫士重生_世界新动态
《塞尔达传说:王国之泪》被玩家仅用94分钟通关|当前消息