Android Studio的Gradle添加重复依赖的问题

Posted 蘑菇君520

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Studio的Gradle添加重复依赖的问题相关的知识,希望对你有一定的参考价值。

Multiple dex files define Lcom/nineoldandroids/animation/Animator$AnimatorListener;android Studio里build项目时不会报错,但是run项目的时候就会报上面的那个错误。这个问题纠结了我整整一天啊,虽然最终的确是解决了,然而到现在我还是没能完全弄懂原理。记录一下我解决这个问题的过程。

首先,遇到这个问题的时候,意料之外,情理之中。因为在用eclipse写Android的时候,也遇到过同样的问题,我知道是重复引用包的问题。当时将自己开发的项目里libs文件夹重复的jar包删掉就行,会自动引用library项目里的jar包。顺着这个思路,我将gradle文件里的compile ‘com.nineoldandroids.library:2.4.0’注释掉,然而并没有什么用。

然后,我思考了一下,觉得应该是其他依赖里也引用了nineoldandroids,可是这我就没办法了呀,这是通过gradle自动下载配置的呀。然后我就百度(再再再次强调,搜这种技术上的问题时,千千万万记得用Google,这次就又栽坑里了)了一下,大部分都是些重复的资料,或者是没人回复的求助信息。说来也惭愧,自己也没能帮助做些什么,希望篇博文能帮助到大家。

最后我去加入的几个Android学习交流群去提问。有人提示我说他也遇到过这个问题,他是将依赖的项目下载下来,作为module来引入到自己的项目里。我也将引用了nineoldandroids的那个项目下载下来这样去做,可是还是报错。实在是没办法了,采用终极办法,就是将依赖的那个项目源码和res文件直接copy到自己的项目里。好了,世界终于清静了,可是这种曲线救国的行为实在是很差的一种解决方式。不仅扰乱了自己的项目结构,也是治标不治本,假如下次又遇到这种问题,不是又得把源码粘贴复制过来?

第二天,接着写项目,实在是忍不了那杂乱的包,一定要解决这个问题才肯罢休!这次我翻过了那道墙,用了google来搜索这个问题。终于让我找到了解决方式。

compile('com.mxn.soul:flowingdrawer-core:1.2.0')
compile('com.rengwuxian.materialedittext:library:2.1.4') 
        exclude group: 'com.nineoldandroids'

flowingdrawer-core这个依赖里的libs文件夹下有nineoldandroids2.4.0.jar这个jar包。
materialedittext这个依赖里的gradle里compile ‘com.nineoldandroids.library:2.4.0’
所以会导致重复引用了jar包。在materialedittext的依赖里添加语句 exclude group: ‘com.nineoldandroids’,意思是编译的时候将group为com.nineoldandroids的所有library都去除在外,这样materialedittext就会自动去引用flowingdrawer-core项目里的nineoldandroids2.4.0.jar包了。到此问题解决了。

不过,我又进行了其他的尝试,我改成如下配置

compile('com.mxn.soul:flowingdrawer-core:1.2.0')
       exclude group: 'com.nineoldandroids'

compile('com.rengwuxian.materialedittext:library:2.1.4') 

这样还是会出问题。想了想,应该是exclude语句只能在编译时将gradle文件里的依赖去除掉,而不能去掉libs文件里的jar包引用。

以上是关于Android Studio的Gradle添加重复依赖的问题的主要内容,如果未能解决你的问题,请参考以下文章

新版本的android studio中的gradle构建失败[重复]

Android Studio 解决重复依赖

Android Studio gradle配置项 packagingOptions说明 Android打包so库重复问题

Android Studio gradle配置项 packagingOptions说明 Android打包so库重复问题

Android Gradle 插件自定义 Gradle 任务 ⑭ ( TaskOutputs#upToDateWhen 设置重复任务是否执行 | Gradle 预置任务 )

无法从 Gradle 脚本中找到 signingReport 以在 android studio 中找到 SHA-1 指纹密钥 [重复]