原创

如何解决 Android Studio 上远程依赖包重复的问题(com.android.dex.DexException)

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

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

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

举个例子:

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

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

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

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;

重点看这个错误:

com.android.dex.DexException

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

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

再举个例子:

 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’的方式就能够解决了。

 

来自:http://godcoder.me/2017/05/10/如何解决 Android Studio 上远程依赖包重复的问题/

 

正文到此结束
Loading...