关闭

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

标签: androidandroid studiogradle
11291人阅读 评论(4) 收藏 举报
分类:

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包引用。

3
2

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:40405次
    • 积分:537
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:0篇
    • 译文:1篇
    • 评论:27条
    最新评论