AGP7.0依赖版本管理version catalogs使用

news2025/1/10 22:54:23

AGP7.0依赖版本管理 version catalogs使用

概念

version catalogs是AGP7.0之后推出的一种依赖版本管理的方式;

好处
  • 对所有module可见,可统一管理所有module的依赖
  • 支持声明依赖bundles,组合打包依赖减少重复代码
  • 支持在单独的libs.versions.toml文件中配置依赖,支持在项目间共享依赖。
环境要求
环境工具最低版本
Android-gradle-plugin7.0
SDK Build TOOL30.0.0
NDK23.1.XXX
JDK11
Gradle Wrapper7.0
API
版本管理类型类型描述举例用法举例app/build.gradle
libraryaar、jar版本管理library(‘appcompat’, ‘androidx.appcompat’, ‘appcompat’).version(‘1.4.1’)api libs.appcompat
bundle依赖聚合管理bundle(“androidx”, [“'appcompat”," fragment"])api libs.bundles.androidx
version版本号常量管理version('compilesdk", ‘33’)compilesdk:libs.versions.compilesdk.toInt()
plugingradle插件版本管理plugin(" agp", " com.android.tools.build:gradle").version(“1.7.0”)id : libs.plugins.agp
使用
  1. 在setting.gradle中开启version catalogs

    enableFeaturePreview('VERSION_CATALOGS')
    

    这一步,在gradle8.0以后不需要,7.0的时候还需要设置一下;

  2. 使用versionCatalogs创建分组,在每个组中可以使用library、bundle 、version、plugin创建版本管理

library【arr,jar版本管理】

1、在setting.gradle中做如下操作

enableFeaturePreview('VERSION_CATALOGS')//8.0的不需要这个
dependencyResolutionManagement {
    // 配置项目下载的maven源
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }

    //引入versionCatalogs
    versionCatalogs {
        //创建分组
        create('androidxLibs') {
            //library的参数分别对应 别名、group、artifact、version
            library('core-ktx', 'androidx.core', 'core-ktx').version('1.8.0')
            library('appcompat', 'androidx.appcompat', 'appcompat').version('1.4.1')
            library('constraintlayout', 'androidx.constraintlayout', 'constraintlayout').version('2.1.3')
			
        }
    }

}

2,比如在app模块中引入library依赖

dependencies {
    implementation androidxLibs.core.ktx
    implementation androidxLibs.appcompat
    implementation androidxLibs.constraintlayout
    
}
bundle【依赖聚合管理】

1、在setting.gradle中做如下操作

enableFeaturePreview('VERSION_CATALOGS')//8.0的不需要这个
dependencyResolutionManagement {
    // 配置项目下载的maven源
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }

    //引入versionCatalogs
    versionCatalogs {
        //创建分组
        create('androidxLibs') {
            //library的参数分别对应 别名、group、artifact、version
            library('core-ktx', 'androidx.core', 'core-ktx').version('1.8.0')
            library('appcompat', 'androidx.appcompat', 'appcompat').version('1.4.1')
            library('constraintlayout', 'androidx.constraintlayout', 'constraintlayout').version('2.1.3')

            // androidX通用依赖
            bundle('androidx', ["core-ktx", 'appcompat', 'constraintlayout'])
        }
    }

}

2,比如在app模块中引入bundle依赖

dependencies {
    implementation androidxLibs.bundles.androidx
}
version【版本号常量管理】

1、在setting.gradle中做如下操作

enableFeaturePreview('VERSION_CATALOGS')//8.0的不需要这个
dependencyResolutionManagement {
    // 配置项目下载的maven源
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }

    //引入versionCatalogs
    versionCatalogs {
        //创建分组
        /**
         * 在app/build.gradle中
         * compileSdk:buildsdk.versions.compilesdk.get().toInteger()
         */
        create('buildsdk') {
            version('compileSdk', '33')
            version('minSdk', '24')
            version('targetSdk', '33')
        }
    }

}

2,比如在app模块中引入version依赖

android {
    namespace 'com.version.catalogs'
    compileSdk buildsdk.versions.compileSdk.get().toInteger()//引入

    defaultConfig {
        applicationId "com.version.catalogs"
        minSdk buildsdk.versions.minSdk.get().toInteger()//引入
        targetSdk buildsdk.versions.targetSdk.get().toInteger()//引入
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
plugin【gradle插件版本管理】

versionCatalogs下载插件是从gradlePluginPotal中下载的;

一、发布到gradlePluginPortal的插件

​ 1、在setting.gradle中做如下操作

enableFeaturePreview('VERSION_CATALOGS')//8.0的不需要这个
dependencyResolutionManagement {
    // 配置项目下载的maven源
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }

    //引入versionCatalogs
    versionCatalogs {
        //1、只需在app/build.gradle中alias(pluginLibs.plugins.hilt.android)即可
        create('pluginLibs') {
            plugin('hilt-android', 'com.google.dagger.hilt.android').version('2.41')
        }
    }

}

2,比如在app模块中引入plugin依赖[app.gradle]

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    alias(pluginLibs.plugins.hilt.android)
}

二、对于没有发布到gradlePluginPortal的插件,暂时沿用老的模式,

1、在项目的build.gradle模块中加入老的依赖

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    dependencies {
        // 对于没有发布到gradlePluginPortal的插件,暂时沿用老的模式,即buildScript { dependencies{  classpath 'xxx.xxx.xxx:1.0.0'}}
        classpath 'com.alibaba:arouter-register:1.0.2'
    }
}

plugins {
    id 'com.android.application' version '8.0.1' apply false
    id 'com.android.library' version '8.0.1' apply false
    id 'org.jetbrains.kotlin.android' version '1.8.20' apply false

}

2、在app模块引入

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    alias(pluginLibs.plugins.hilt.android)
    id 'com.alibaba.arouter'
}

以上是一种依赖版本管理的方式,还有一种以为文件的形式进行管理;
1、在工程目录下创建一个libs.version.toml文件,如下图
在这里插入图片描述
2、libs.version.toml文件里面编写version 、plugins、libraires、bundles

[versions]
compileSdk = '33'
minSdk = '24'
targetSdk = '33'

[plugins]
android-application = { id = "com.android.application", version = "7.4.1" }
android-library = { id = "com.android.library", version = "7.4.1" }

[libraries]
appcompat = { module = "androidx.appcompat:appcompat", version = "1.4.1" }
material = { module = "com.google.android.material:material", version = "1.5.0" }
core-ktx = { module = "androidx.core:core-ktx", version = "1.7.0" }

[bundles]
androidx = ['appcompat', 'material', 'core-ktx']

3、把libs.version.toml文件加加载进来來

//开启version-catalogs,新版本8.0不需要這句話
enableFeaturePreview('VERSION_CATALOGS')
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        mavenLocal()
        google()
        mavenCentral()
    }
    //使用versionCatalogs标签
    versionCatalogs {
        //把libs.version.toml文件加加载进来來
        create('libs') {
            from(files("libs.version.toml"))
        }
    }
}

4、在app.gradle中使用

dependencies {
    //以library方式引入依赖
    implementation libs.appcompat
    implementation libs.material
    implementation libs.core.ktx

    //以bundle方式引入依赖
    implementation libs.bundles.androidx
    
}
plugins {
    //id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    alias libs.plugins.android.application
}

android {
    namespace 'xxxxxx'
    compileSdk libs.versions.compileSdk.get().toInteger()

    defaultConfig {
        applicationId "xxxxxxx"
        minSdk libs.versions.minSdk.get().toInteger()
        targetSdk libs.versions.targetSdk.get().toInteger()
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

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

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

相关文章

Day43 力扣动态规划 :309.最佳买卖股票时机含冷冻期|714.买卖股票的最佳时机含手续费 |股票总结

Day43 力扣动态规划 :309.最佳买卖股票时机含冷冻期|714.买卖股票的最佳时机含手续费 |股票总结 309.最佳买卖股票时机含冷冻期第一印象看完题解的思路dp数组递推公式初始化遍历顺序 实现中的困难感悟代码 714.买卖股票的最佳时机含手续费第一印象看完题…

OpenCV实现手势音量控制

前言: Hello大家好,我是Dream。 今天来学习一下如何使用OpenCV实现手势音量控制,欢迎大家一起前来探讨学习~ 一、需要的库及功能介绍 本次实验需要使用OpenCV和mediapipe库进行手势识别,并利用手势距离控制电脑音量。 导入库&am…

“轻松管理收支明细,随时筛选借款信息,财务清晰无忧“

作为现代人,我们每天都在与金钱打交道。无论是个人还是企业,都需要对收支情况进行详细的管理和分析。然而,繁琐的财务数据往往让人头疼。现在,我们为您推荐一款强大的财务管理工具,让您轻松管理收支明细,随…

17. 机器学习 - 随机森林

Hi,你好。我是茶桁。 我们之前那一节课讲了决策树,说了决策树的优点,也说了其缺点。 决策树实现起来比较简单,解释解释性也比较强。但是它唯一的问题就是不能拟合比较复杂的关系。 后来人们为了解决这个问题,让其能…

Android - 编译 openssl 踩坑之路

一、简述 如果你想快速在项目中使用上 openssl,可以使用网上其他开发者提供好的预编译库: OpenSSL(All):https://builds.viaduck.org/prebuilts/openssl/OpenSSL(3.1.*) :https://github.com/217heidai/openssl_for_android以上的预编译库可能最低只支持 API 21(即 Andro…

SpringCloud-Alibaba之OSS对象存储服务

阿里云的 OSS 服务进行云端的文件存储 用户认证需要上传图片、首页轮播需要上传图片&#xff0c;OSS分布式文件服务系统可以提供服务。 一、依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>aliyun-oss-spring-boot-starter</…

【Linux】第十一站:冯诺依曼与操作系统

文章目录 一、冯诺依曼体系结构&#xff08;硬件层面&#xff09;1.冯诺依曼体系结构2.数据流向3.总结 二、操作系统1.概念2.设计操作系统的目的3.定位4.如何管理5.系统调用和库函数概念 一、冯诺依曼体系结构&#xff08;硬件层面&#xff09; 1.冯诺依曼体系结构 我们常见的…

C语言--一个球从100m高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求它在第10次落地时共经过多少米,第10次反弹多高

一.思路分析 这是一个简单的物理题目&#xff0c;解题思路比较明确。程序使用 for 循环来模拟球的下落和反弹过程&#xff0c;通过多次计算得到最终结果&#xff0c;最后使用 printf 函数将结果输出。 定义初始高度 height 和总共经过的米数 distance 的变量&#xff0c;初始化…

ICP学习记录

1. 流程图 ICP&#xff08;一&#xff09;原理详解_icp原理-CSDN博客 ICP算法详解——我见过最清晰的解释-CSDN博客 ICP算法理解-CSDN博客 ICP知识点梳理笔记_icp非凸_KalutSirocco的博客-CSDN博客 【精选】【图像配准】点云配准ICP算法介绍&#xff1a;基础流程、ICP算法…

游戏开发中的“御用中介“

点击上方亿元程序员关注和★星标 引言 大家好&#xff0c;我是亿元程序员&#xff0c;一位有着8年游戏行业经验的主程。 本系列是《和8年游戏主程一起学习设计模式》&#xff0c;让糟糕的代码在潜移默化中升华&#xff0c;欢迎大家关注分享收藏订阅。 游戏开发中的"御用…

【SpringSecurity】简介

SpringSecurity简介 Spring Security 的前身是Acegi Security&#xff0c;在被收纳为Spring 子项目后正式更名为Spring Security。Spring Security目前已经到了6.x&#xff0c;并且加入了原生OAuth2.0框架&#xff0c;支持更加现代化的密码加密方式。可以预见&#xff0c;在Ja…

ElasticSearch高级功能详解与原理剖析

ES数据预处理 Ingest Node Elasticsearch 5.0后&#xff0c;引入的一种新的节点类型。默认配置下&#xff0c;每个节点都是Ingest Node&#xff1a; 具有预处理数据的能力&#xff0c;可拦截lndex或Bulk API的请求对数据进行转换&#xff0c;并重新返回给Index或Bulk APl 无…

React实现一个拖拽排序组件 - 支持多行多列、支持TypeScript、支持Flip动画、可自定义拖拽区域

一、效果展示 排序&#xff1a; 丝滑的Flip动画 自定义列数 &#xff08;并且宽度会随着屏幕宽度自适应&#xff09; 自定义拖拽区域&#xff1a;&#xff08;扩展性高&#xff0c;可以全部可拖拽、自定义拖拽图标&#xff09; 二、主要思路 Tip&#xff1a; 本代码的CSS使用…

Ubuntu22.04下挂载共享文件夹

1.在自己Windows任意地方建一个文件夹 2.打开虚拟机做如下配置 3.开启虚拟机&#xff0c;打开终端 4.输入&#xff1a;vmware-hgfsclient 看到物理机共享文件夹 5.输入&#xff1a;sudo mkdir /mnt/hgfs 创建虚拟机中的共享文件夹 6.输入&#xff1a;sudo vmhgfs-fuse .h…

Android---App 的安装过程

Android 系统中两个比较重要的服务 ActivityManagerService(AMS) 和 WindowManagerService(WMS)&#xff0c;这篇文章中通过分析 apk 的安装过程&#xff0c;来了解 Android 中另一个比较重要的系统服务 -- PackageManagerService(PMS)。 编译阶段 在分析安装过程之前&#x…

项目实战:service业务逻辑组件引入

1、第一层DAO层 1.1、FruitDao接口 package com.csdn.fruit.dao; import com.csdn.fruit.pojo.Fruit; import java.util.List; //dao &#xff1a;Data Access Object 数据访问对象 //接口设计 public interface FruitDao {void addFruit(Fruit fruit);void delFruit(String fn…

Java--类和对象

目录 面向对象一.类1.类的创建默认初始化2.类的实例化3.注意事项利用类的创建来交换值 二.this1.使用this2.可使用this来调用其他构造方法来简化 三.构造方法3.1概念3.2特性3.3不带参数的构造方法3.4带参数的构造方法当使用自定义的构造方法后&#xff0c;再删除时&#xff0c;…

【Linux系统编程】系统用户和权限的操作

目录 一&#xff0c;Linux的用户 1&#xff0c;用户之间的切换 2&#xff0c;超级用户权限的使用 二&#xff0c;Linux的文件权限 1&#xff0c;文件信息的介绍 2&#xff0c;文件权限的修改 3&#xff0c;用户的修改 3-1&#xff0c;拥有者的更改 3-2&#xff0c;所属…

chinese-stable-diffusion中文场景文生图prompt测评集合

腾讯混元大模型文生图操作指南.dochttps://mp.weixin.qq.com/s/u0AGtpwm_LmgnDY7OQhKGg腾讯混元大模型再进化&#xff0c;文生图能力重磅上线&#xff0c;这里是一手实测腾讯混元的文生图在人像真实感、场景真实感上有比较明显的优势&#xff0c;同时&#xff0c;在中国风景、动…

“一键批量拆分HTML文本,高效整理文件,提升工作效率“

您是否曾经被大量的HTML文本文件困扰&#xff0c;难以找到所需的特定信息&#xff1f;现在&#xff0c;我们向您推荐一款强大的工具&#xff0c;它能够一键拆分HTML文本&#xff0c;让您轻松实现文件整理&#xff0c;提高工作效率&#xff01; 首先&#xff0c;在首助编辑高手…