我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android三方依赖冲突Gradle中exclude的使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android三方依赖冲突Gradle中exclude的使用

一、场景

Android项目的开发过程中,我们项目中的gradle的dependencies闭包中会引入很多三方依赖库,引入的库越多,越容易产生库之间的依赖冲突。

列举冲突的场景:

  • 1、同一个依赖库引入多个版本;
  • 2、重复引入了同一个依赖库;

编译报错信息一般为:Program type already present

二、如何查看项目中的三方依赖?

方案一: Gradle task工具查看

 按照如图目录找到dependencise双击,会在Run控制台输出打印。

结果如下:

方案二:Terminal控制台查看

在windows上Android studio Terminal中使用这个命令:

gradlew :app:dependencies

在MacOS中使用下面的命令:

gradlew :app:dependencies

其中的“app”为module名称。

这个命令会将gradle执行的各个步骤都打印出来,包括releaseUnitTestRuntimeClasspath,releaseUnitTestCompileClasspath,releaseRuntimeClasspath,releaseCompileClasspath,lintClassPath,debugUnitTestRuntimeClasspath等等,反正会打印很多很多。

 这种就可以把依赖树都打印出来。因为存在这种依赖树的问题,所以很容易导致依赖冲突,因为你不知道别的依赖库有没有和另外一个依赖库引入的依赖库或者自己导入的依赖库发生了冲突。同一个依赖库版本不同很容易导致依赖冲突。

这时候我们就需要过滤一下(window):很多资料提示是(gradlew :app:dependencies --configuration compile,这种compile是以前的方式引入依赖,现在换成implementation)

gradlew :app:dependencies --configuration implementation

打印如下:

 但不知道为啥这种不打印出来依赖树。

接下来我又试了一下下面这个过滤条件:

gradlew :app:dependencies --configuration releaseRuntimeClasspath

这样就可以打印出依赖树了:

 这样对项目中的依赖就可以一目了然。然后ctrl + f 查找你认为有问题有冲突的依赖。

三、使用exclude解决依赖冲突的问题

1、以下面这个例子来示范:

 这个cardview是material依赖库下的一个依赖。

 这个是我在module app的MainActivity里面正常使用。

现在假如有另外一个依赖库中也包含了androidx.cardview这个依赖库包的其他版本,注意是也存在的其他版本,就会可能发生冲突。冲突造成的错误,后面遇到再贴出来。

2、那么我们要怎么解除这种依赖库引起的编译问题呢?

//    implementation 'com.google.android.material:material:1.2.1'
    implementation('com.google.android.material:material:1.2.1') {
        exclude group: 'androidx.cardview', module: 'cardview'
    }

现在我使用gradle中的exclude的关键字,来排除app.gradle文件中的这个cardview依赖库。

解释一下:exclude是groovy中的一个函数,group是要排除的包名,module是模块名。

用图说更清楚:

 但正常情况下,写group也就行,不写module也行。

那么排除后的效果是什么?

 排除之后,这个CardView就找不到了。这样就可以使用和这个冲突的另一个CardView的版本,就可以把Android中的依赖库冲突给解决了。(tips:我这里没演示出冲突的问题)

四、总结

上面是介绍了Android查看项目中使用到那些依赖库的几种方案,以及介绍了Android中使用exclude如何处理依赖库存在冲突的问题。当然解除依赖库冲突不止这一种方案,但这种我觉得是比较方便的一种。

到此这篇关于Android三方依赖冲突Gradle中exclude的使用的文章就介绍到这了,更多相关Android  exclude使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android三方依赖冲突Gradle中exclude的使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何在android中使用Gradle添加依赖

这期内容当中小编将会给大家带来有关如何在android中使用Gradle添加依赖,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。AndroidStudio使用Gradle构建添加依赖compile com.
2023-05-31

如何使用replace属性来避免Composer的依赖冲突

这篇文章将为大家详细讲解有关如何使用replace属性来避免Composer的依赖冲突,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Composer 文档提供了两个基本的示例。 我将尝试解释一下:列出被该
2023-06-09

Android依赖注入框架Dagger2的使用方法

Dagger2是一款基于Java的依赖注入框架,可以帮助Android开发者管理和组织应用的依赖关系。通过使用注解和代码生成技术,可以实现自动化的依赖注入,减少手动编写代码的工作量
2023-05-19

你的应用有漏洞吗?使用第三方依赖需谨慎

开源对软件的发展可以说具有深远的意义,它帮助我们共享成果,重复使用其他人开发的软件库,让我们能够专注于我们自己的创新,它推进了技术的快速发展。据不完全统计78% 的企业都在使用开源,但是其中有多少企业关注第三方开园依赖的安全呢?其中仅有13
2023-06-04

详解Spring依赖注入的三种方式使用及优缺点

这篇文章主要介绍了spring依赖注入的三种方式的使用方法,以及优缺点的介绍,通过代码示例介绍的非常详细,感兴趣的小伙伴可以参考一下
2023-05-16

android使用fat-aar打包,本地aar和第三方依赖库以及遇到的问题

android使用fat-aar打包,本地aar和第三方依赖库以及遇到的问题 为什么会用到fat-aar如何使用打出来的aarlib中存在多个架构,例如x86\x86_64我在打包okhttp和retrofit的时候遇到的问题
2023-08-18

【ijkplayer】编译 Android 版本的 ijkplayer ⑦ ( 使用 AS 打开源码 | 重新设置 AGP 和 Gradle 版本号 | 设置依赖仓库 | 设置依赖 | 编译运行 )

文章目录 一、Android Studio 打开编译后的 ijkplayer 源码二、重新设置 Android Gradle 插件版本号和 Gradle 构建工具版本号三、设置依赖仓库1、取消 jcenter 仓库2、添加 goog
2023-08-16

Android中使用定时器的三种方法

本文实例为大家分享了Android中使用定时器的三种方法,供大家参考,具体内容如下 图示:因为都比较简单,所以就直接贴代码(虑去再次点击停止的操作),有个全局的Handler负责接收消息更新UI 第一种方法:Thread.sleep();方
2022-06-06

浅析Node.js中使用依赖注入的相关问题及解决方法

最近,我转向使用依赖注入来帮助理解分离代码的简单途径,并有助测试。然而,Node.js中的模块依赖Node提供的系统API,这很难判断私有依赖被恰当的使用。一般的依赖注入很难在这种情况下使用,但现在不要放弃希望。 requireCauses
2022-06-04

PHP中trait的使用和同时引入多个trait时同名方法冲突的处理方法

这篇文章主要介绍了PHP中trait的使用和同时引入多个trait时同名方法冲突的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-18

Android开发中synchronized的三种使用方式详解

这篇文章主要介绍了Android开发中synchronized的三种使用方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2023-05-16

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录