Android Studio/Gradle/重复依赖
来源:互联网 发布:免费手机组态软件 编辑:程序博客网 时间:2024/05/16 01:54
碰到的问题
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 Landroid/support/v4/media/TransportController;
Error:Execution failed for task ‘:app:transformClassesWithJarMergingForDebug’.
com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: org/apache/http/entity/mime/content/ByteArrayBody.class
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 Lorg/apache/http/ConnectionClosedException;
探究
对这个问题的总结:
这个问题是重复依赖导致的。
造成的原因有多种,但是爆出这种错误的时候,DoubleShift 搜索错误中的最后一个单词都会发现在多个依赖中存在同一个包名的同名类。
解决方案1:
把多余的依赖删除掉
解决方案2:
如果你存在同一个项目既依赖moudle又依赖jar
是exclude语句只能在编译时将gradle文件里的依赖去除掉,而不能去掉libs文件里的jar包引用
group id->project视图,External Libraries,对应包下,pom.xml,groupId节点
如果你是不同的依赖中存在相同的 package.ClassName.class
那么可以通过Gradle语法解决。
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
依赖的项目下载下来,作为module来引入到自己的项目里。
解决方案4
如果两个Jar中存在 packageName.className.class完全相同的情况’exclude’不好用。
我的本次做法是。把两个Jar下载下来,放到’/lib’中,然后对发生冲突的类,在一个jar包中直接把.class文件删除掉。
这么做不太合理:如果jar包中我所删除的内容有被引用,那这种方式很可能导致 classNotFound 错误巧合的是我这次操作没有碰到这个问题。
参考
- Android Studio的Gradle添加重复依赖的问题
- AndroidStudio下的依赖管理
- Android Studio/Gradle/重复依赖
- 【Gradle】Android Studio中Gradle重复依赖的问题
- Android Studio的Gradle添加重复依赖的问题
- Android Studio的Gradle添加重复依赖的问题
- Android Studio的Gradle添加重复依赖的问题
- android studio gradle依赖规则
- android studio gradle依赖解析
- 问题集锦——(一)Android Studio的Gradle添加重复依赖的问题
- android studio依赖库gradle文件解析
- Android Studio 之 Gradle 依赖配置管理
- Android Studio 中 Gradle 依赖的统一管理
- android studio 插件 gradle view 查看gradle依赖树
- android studio 插件 gradle view 查看gradle依赖树
- android studio 解决重复依赖的问题
- Android studio 重复依赖去重
- Android studio gradle 更新依赖包,xml不提示
- gradle 编译 Eclipse,引入依赖资源以及迁移 Android Studio
- android studio gradle依赖库使用国内资源
- 继承与实现
- Weapp微信小程序开发实战
- 从程序员到项目经理(10):程序员加油站 --要执着但不要固执
- React Navigation--DrwaerNavigator 详细的例子
- springmvc 同时配置thymeleaf和jsp两种模板引擎
- Android Studio/Gradle/重复依赖
- 网络库libevent、libev、libuv对比
- 回溯法———n皇后问题
- cxf-Springmvc-maven实现webservice
- 堆排序算法(Heap Sort) Java实现
- 关于NSDate,NSDateFormatter,NSTimeZone的一些通俗理解
- VS编译方式 \MT \MD \MTd \MDd
- 求N个正整数的最大公约数和最小公倍数
- easyui datagrid内容显示不完用省略号代替,并设置title悬浮显示全部内容