gradle导入依赖(解决gradle依赖库冲突)

:暂无数据 2026-04-23 06:00:02 0
关于gradle导入依赖,有一个概念至关重要,那就是解决gradle依赖库冲突。它为何如此重要?且听我们慢慢道来。

本文目录

解决gradle依赖库冲突

在做开发的时候,我们经常会导入一些库,库里面又会依赖其他的一些库,这就会导致有时候库版本冲突了,导致编译不能过!昨天刚好群里有个哥们问了一个这个错误,怎么解决,这里记录一下!(You should manually set the same version via DependenyResolution)

在进行解决这个之前,我们先了解一下,依赖时候填写的那一段长长的字符串是什么意思,类似以下的导入

                 ***** 是分组,也就是group 

                C***ecutiveScroller 是module

                 ***** 是版本号

有了上面知识,我们继续

1.依赖树

当发生了错误,我们需要知道是哪些库引入导致的冲突,这时候就需要依赖树了,gradle给我们提供了对应的查看命令,在我们Android Studio软件窗口的右边,分别点击 Gradle--(对应的module)--Tasks--help--dependencies (需要哪个module就选择哪个)

点击后会在build生成依赖树,这时候查找哪些库会额外导入冲突的库

通过依赖树找到哪些库导致的版本不一致,这时候字需要修改导入,就能解决问题

比如还有A库引入了livedata,那你这样修改,mudule和group请看顶部的知识点

处理Gradle依赖冲突

    在Android开发过程中会总会引入一些第三方依赖库,无可避免的会遇到jar/aar包冲突,Manifest合并冲突,资源冲突等问题

    基于此本次主要记录下如何处理类冲突,jar/aar版本冲突。先由常见的***** found in modules alicloud-android-utdid-2.*** android-utdid冲突入手,常见于支付宝sdk和友盟Sdk的冲突。

磨刀不误砍材工,在处理冲突问题前,要先了解下如何查看Gradle依赖树,在AS的Terminal里输入 gradle :app:dependencies 即可查看gradle依赖树。输出结果如下(示意)

输出依赖树后,在里面搜索android-utdid,会发现有多个第三方库对utdid存在引入关系。

经过查看得知utdid我依赖为:*****:alicloud-android-utdid:*****

该依赖库的Group为*****为alicloud-android-utdid

下面要做的就是去除其他依赖对utdid的引入,仅保留一次有效的引用关系即可。

implementation (’*****:yyy:*****’){

        exclude module: ’alicloud-android-utdid’

    }

implementation (’*****:bbb:***’){

        exclude module: ’alicloud-android-utdid’

    }

    常规查阅资料大家推荐去除重复引入的方法都是exclue group。实际上如该group下的依赖项较多,且只想去除某一个依赖时,这时使用exclude module能更细节且准确的控制去除某一项的引用关系。

以上为utdid的处理方式

关于微信sdk冲突的处理方式

    问题背景:我方已集成wechat-sdk-android-with-mta sdk用作分享和支付功能,随着业务发展需要接入一个第三方业务Sdk,该Sdk内部具备支付功能,他们也进行了wechat-sdk-android-with-mta的引入,且两个微信sdk的版本不一致。

    此时如果进行打包就会爆出各种*****的类冲突。

    处理方式参照支付宝sdk的冲突方式

    implementation (’*****:zzz:***’){

        exclude module: ’wechat-sdk-android-with-mta’

    }

  关于百度地图API_KEY冲突的处理方式

  百度地图需要在主工程的Manifest里注册一个API_KEY。如此时引入的第三方Sdk里同样有百度地图,且已经在内部注册了*****_KEY。

  此时会出现*****的合并冲突。解决方式为增加tools:replace="android:value"属性即可

          《meta-data

            android:name="*****_KEY"

            android:value=""

            tools:replace="android:value"/》

    在开发中不同第三方Sdk对基础依赖的版本会发生变化,比如ktx和compact的版本。需要强制指定这些基础依赖的版本统一

    方式为在*****(app)里增加

    configurati***.all{

    *****’*****:core-ktx:***.0-alpha01’

    }

    后续将持续添加AndroidStudio里各种冲突的处理方式。

gradle 解决重复依赖

一、查看重复依赖

如果出现重复依赖一般会出现以下错误:

通过gradle命令查看重复依赖,在android studio命令窗口中输入以下命令:

稍等片刻,会出来一个树状图,其中用"-》"会标示出冲突的部分
二、去除重复依赖

1.如果两个独立的重复依赖包,去除之一即可;

***隐藏网址***

Done!

使用gradle构建时添加一下依赖在哪

在构建中加入Ivy仓库
我们可以通过URL地址或本地文件系统地址,将Ivy仓库加入到我们的构建中。
如果想通过URL地址添加一个Ivy仓库,我们可以将以下代码片段加入到*****文件中:
1
2
3
4
5

repositories {
ivy {
***隐藏网址***
}
}
如果想通过本地文件系统地址添加一个Ivy仓库,我们可以将以下代码片段加入到*****文件中:
1
2
3
4
5

repositories {
ivy {
url "../ivy-repo"
}
}
小贴士:如果你想要获得更多关于Ivy仓库配置的信息,你可以参考以下资源:
Section ***** Ivy Repositories of the Gradle User Guide
The API documentation of the IvyArtifactRepository
我们继续,下面是如何在构建中加入Maven仓库。
在构建中加入Maven仓库
与Ivy仓库很类似,我们可以通过URL地址或本地文件系统地址,将Maven仓库加入到我们的构建中。
如果想通过URL地址添加一个Maven仓库,我们可以将以下代码片段加入到*****文件中:
1
2
3
4
5

repositories {
maven {
***隐藏网址***
}
}
如果想通过本地文件系统地址添加一个Maven仓库,我们可以将以下代码片段加入到*****文件中:
1
2
3
4
5

repositories {
maven {
url "../maven-repo"
}
}
在加入Maven仓库时,Gradle提供了三种“别名”供我们使用,它们分别是:
mavenCentral()别名,表示依赖是从Central Maven 2 仓库中获取的。
jcenter()别名,表示依赖是从Bintary’s JCenter Maven 仓库中获取的。
mavenLocal()别名,表示依赖是从本地的Maven仓库中获取的。
如果我们想要将Central Maven 2 仓库加入到构建中,我们必须在*****文件中加入以下代码片段:
1
2
3

repositories {
mavenCentral()
}
小贴士:如果你想要获取更多关于Maven仓库配置的信息,你可以参考这篇文章:
section ***** Maven Repositories of the Gradle User Guide
我们继续,下面是如何在构建中加入Flat Directory仓库。

Gradle 传递依赖

假设我们有项目, ProjectA, ProjectB 和 ProjectC, 此时, A依赖B, B依赖C, 那么这种依赖就是传递依赖

例如上面的例子, 我们打印出当前依赖jar的位置

回顾全文,关于解决gradle依赖库冲突gradle导入依赖中的作用,你能用自己的话复述出来吗?
本文编辑:admin

更多文章:


java是纯面向对象语言吗(J**A编程语言是面向对象么)

java是纯面向对象语言吗(J**A编程语言是面向对象么)

本文是您理解java是纯面向对象语言吗的最后一站。我们将通过剖析J**A编程语言是面向对象么,帮你打通任督二脉,彻底领悟。

2026年4月23日 07:40

js生成结构化(什么叫做结构化程序设计,面向对象的程序设计,以及其特点)

js生成结构化(什么叫做结构化程序设计,面向对象的程序设计,以及其特点)

您是否曾想过,js生成结构化究竟是怎么一回事?它与什么叫做结构化程序设计,面向对象的程序设计,以及其特点之间又有什么联系?本文将为您一探究竟。

2026年4月23日 07:20

魔方教程一步一步图解 入门 第3讲(三阶魔方公式步骤图)

魔方教程一步一步图解 入门 第3讲(三阶魔方公式步骤图)

有没有觉得魔方教程一步一步图解 入门 第3讲听起来很高深?别怕,今天我们就把它和三阶魔方公式步骤图一起,拆解成易懂的小知识点。

2026年4月23日 07:00

plotly(plotly求函数极值)

plotly(plotly求函数极值)

各位老铁们好,相信很多人对plotly都不是特别的了解,因此呢,今天就来为大家分享下关于plotly以及plotly求函数极值的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年4月23日 06:40

c语言中struct(C语言结构体中struct和typedef struct有什么区别)

c语言中struct(C语言结构体中struct和typedef struct有什么区别)

当大家谈论c语言中struct时,总免不了提及C语言结构体中struct和typedef struct有什么区别。它们之间究竟有何玄机?读完本文你便了然于胸。

2026年4月23日 06:20

gradle导入依赖(解决gradle依赖库冲突)

gradle导入依赖(解决gradle依赖库冲突)

关于gradle导入依赖,有一个概念至关重要,那就是解决gradle依赖库冲突。它为何如此重要?且听我们慢慢道来。

2026年4月23日 06:00

html格式化快捷键(html怎样格式化输出JSON数据)

html格式化快捷键(html怎样格式化输出JSON数据)

您是否正在为搞不清html格式化快捷键和html怎样格式化输出JSON数据的关系而烦恼?恭喜,这篇干货就是您的“及时雨”。

2026年4月23日 05:40

软件源程序和安装程序有什么不同(源代码与程序有什么区别么)

软件源程序和安装程序有什么不同(源代码与程序有什么区别么)

上一篇文章我们介绍了软件源程序和安装程序有什么不同的基础,今天我们将深入其核心环节——源代码与程序有什么区别么,看看它如何承前启后。

2026年4月23日 05:20

编程基础c语言第五版电子版(C语言基础编程)

编程基础c语言第五版电子版(C语言基础编程)

有没有这种经历:明明想搞懂编程基础c语言第五版电子版,却被C语言基础编程卡住了脖子?今天这篇文章,就是专治这种“卡脖子”问题的。

2026年4月23日 05:00

如何定义一个随机数组java(java 定义随机数组)

如何定义一个随机数组java(java 定义随机数组)

正如一位名家所言:“弄懂java 定义随机数组,是通往如何定义一个随机数组java殿堂的捷径。” 今天,我们就来走一走这条捷径。

2026年4月23日 04:40

最近更新

plotly(plotly求函数极值)
2026-04-23 06:40:02 浏览:0
热门文章

split函数 sql(求sql split函数的用法)
2026-03-26 20:40:01 浏览:1
phpweb 采用wamp(php环境搭建)
2026-03-28 14:00:01 浏览:1
floatleft是什么意思(displayflex和floatleft的区别)
2026-04-17 04:40:03 浏览:0
标签列表