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

大家是否是会常常遇到这样的一个错误:com.android.dex.DexException: Multiple dex files define XXXX,通常状况下,是咱们项目中引用了重复的库或者jar包引发的,咱们找到去掉便可解决,可是若是你远程依赖的两个库里,同时引用了同一个库,你该怎么解决呢?把那两个库都下载下来,本身修改?去掉,再本地引入吗?今天告诉大家一个简单的方法。java

说实话,随着如今轮子愈来愈多,并且不少人都乐于分享和封装一些控件或者开源的库,来共享给你们一块儿使用。可是常常不少的人封装都在本身库里引发不少其余的第三方库,这就难免有时会发生你引用的两个库都同时引用了同一个第三方库,最坑人的就是他们封装的开源库里使用的都是直接引用,而不是使用 Provided 的方式暴露给你,而是本身直接用了。android

我知道有不少人都用强迫症,在使用远程依赖惯了之后,不习惯本地导入的,感受不舒服了。因此不免就得想办法解决这个问题。程序员

举个例子:api

好比:你在使用了一个能生成你符合需求二维码的库,而这个库在内容引用了zxing。可是这里面的扫一扫界面并很差看,你发现了另一个库里的扫一扫,正好符合你的需求,因此你就在扫一扫这个功能上用了另一个库,可是这个库也引用了zxing。微信

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

若是,就像例子中那样作,你去编译运行项目时,这时,你就会看到一个错误,大约以下意思:ide

Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexException: Multiple dex files define Lcom/google/zxing/BarcodeFormat;ui

重点看这个错误:google

com.android.dex.DexException
这就说明你引用的库或者jar包有重复的地方,因此,这时,你就须要从你引用的远程依赖或者jar中找到重复的,去删掉一个就能够解决了。spa

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

再举个例子:

compile('com.loonggg.saoyisao.lib:1.1.0')
compile('com.timmy.qrcode.lib:1.4.1') {
        exclude group: 'com.google.zxing'
}复制代码

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'的方式就可以解决了。

欢迎你们关注个人技术分享公众号:非著名程序员(smart_android)。技术文章均先首发于个人技术分享的微信公众号。

相关文章
相关标签/搜索