如何解决 Android Studio 上远程依赖包重复的问题

你们是不是会经常遇到这样的一个错误:com.android.dex.DexException: Multiple dex files define XXXX,一般情况下,是我们项目中引用了重复的库或者jar包引起的,我们找到去掉即可解决,但是如果你远程依赖的两个库里,同时引用了同一个库,你该怎么解决呢?把那两个库都下载下来,自己修改?去掉,再本地引入吗?今天告诉你们一个简单的方法。

说实话,随着现在轮子越来越多,而且很多人都乐于分享和封装一些控件或者开源的库,来共享给大家一起使用。但是经常很多的人封装都在自己库里引起很多其他的第三方库,这就不免有时会发生你引用的两个库都同时引用了同一个第三方库,最坑人的就是他们封装的开源库里使用的都是直接引用,而不是使用 Provided 的方式暴露给你,而是自己直接用了。

我知道有很多人都用强迫症,在使用远程依赖惯了以后,不习惯本地导入的,感觉不舒服了。所以难免就得想办法解决这个问题。

举个例子:

比如:你在使用了一个能生成你符合需求二维码的库,而这个库在内容引用了zxing。但是这里面的扫一扫界面并不好看,你发现了另外一个库里的扫一扫,正好符合你的需求,所以你就在扫一扫这个功能上用了另外一个库,但是这个库也引用了zxing。

当然了,我只是举了一个极端的例子,不会经常发生如上的例子,但是这个错误确实很常见。

如果,就像例子中那样做,你去编译运行项目时,这时,你就会看到一个错误,大约如下意思:

重点看这个错误:com.android.dex.DexException这就说明你引用的库或者jar包有重复的地方,所以,这时,你就需要从你引用的远程依赖或者jar中找到重复的,去删掉一个就可以解决了。

是不是很简单,这是在你控制的前提下,如果就像我刚才举得例子一样,如果你远程依赖的两个库,不是本地的哈,同时引用同一个第三方,那该怎么解决呢?

再举个例子:

com.loonggg.saoyisao.lib:1.1.0 这个依赖里引用了第三方zxing。com.timmy.qrcode.lib:1.4.1这个依赖里也引用了zxing这个库,在com.timmy.qrcode.lib:1.4.1的依赖里添加语句 exclude group: ‘com.google.zxing’,意思是编译的时候将group为com.google.zxing的所有library都去除在外,这样com.timmy.qrcode.lib:1.4.1就会自动去引用com.loonggg.saoyisao.lib:1.1.0项目里的zxing依赖了。这样问题就解决了。

但是,到这里我们就需要注意一点:这个exclude group: 'xxx.xxx.xxx'的方法,只能去除远程依赖的库,如果是你引用的两个远程依赖库A和B,A中是本地依赖的zxing.jar,而B中也是本地依赖的zxing.jar包,那就无解了,只能把A和B这两个库,下载下来自己去修改了,去掉了。当然,如果你项目中同时远程依赖的A和B这两个库,又都重复远程依赖了同一个库,那解决方法跟我上面说的就好解决了。如果一个是远程依赖,一个是本地引用jar包的方式,那也好解决,在远程依赖的那个库,你引用的时候,通过exclude group: 'xxx.xxx.xxx'的方式就能够解决了。

原文发布于微信公众号 - 非著名程序员(non-famous-coder)

原文发表时间:2017-05-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏林德熙的博客

win10 uwp Markdown 输入需求文件文件格式文件类保存设置界面拼写检查云创建Html创建pdfGit

输入标题方式可以使用快捷键,也可以手动输入“#”,一个“#” 表示一级标题,两个个“#” 表示二级标题,三个“#” 表示三级标题,其他表示多级标题。

11630
来自专栏Albert陈凯

2018-09-03 简单问题:VIM中 查找 “上一个” 的快捷键是什么?G 移动光标到指定行#. 例如: 5G-> 光标下反向搜索关键词 (search the word under cursor

https://blog.csdn.net/qq_31307253/article/details/78652494

1.7K10
来自专栏西安-晁州

jenkins学习之多项目构建

多项目构建,即指的是同时构建多个源代码中的项目,我所知道的有两种方法,一种是在某个项目“构建完成后操作”中设置如下: ? 另外一种是借助于插件——Multi...

42900
来自专栏大数据钻研

谈谈JS中的函数节流

好吧,一直在秋招中,都没怎么写博客了。。。今天赶紧来补一补才行。。。我发现,在面试中,讲到函数节流好像可以加分,尽管这并不是特别高深的技术,下面就聊聊吧! ^_...

35680
来自专栏程序员互动联盟

【盟友分享】vim学习之路-vim基本操作

前言:说到我的学习之路是从arm嵌入式开发开始的,基本上在学校学习都时windows开发开始的,转到ubuntu上嵌入式开发刚开始非常的不习惯。不用鼠标很难受的...

34960
来自专栏mySoul

中止请求和超时 跨域的HTTP请求 认证方式 JSONP

作为同源策略的一部分,XMLHttpRequest对象可以发起HTTP请求,由于同源的影响,导致必须是同源的,

15020
来自专栏java思维导图

IntelliJ IDEA 最常用配置详细图解,新手入门必看!

刚刚使用IntelliJ IDEA 编辑器的时候,会有很多设置,会方便以后的开发,磨刀不误砍柴工。

14820
来自专栏Golang语言社区

Go语言基于Socket编写服务器端与客户端通信的实例

在golang中,网络协议已经被封装的非常完好了,想要写一个Socket的Server,我们并不用像其他语言那样需要为socket、bind、listen、re...

1K50
来自专栏微信公众号:Java团长

IntelliJ IDEA 详细图解最常用的配置,适合刚刚用的新人。

刚刚使用IntelliJ IDEA 编辑器的时候,会有很多设置,会方便以后的开发,磨刀不误砍柴工。

10210
来自专栏Golang语言社区

Go语言基于Socket编写服务器端与客户端通信的实例

在golang中,网络协议已经被封装的非常完好了,想要写一个Socket的Server,我们并不用像其他语言那样需要为socket、bind、listen、re...

30350

扫码关注云+社区

领取腾讯云代金券