记录代码合并时产生的bug
bug提示:
Error:Execution failed for task ':app:transformClassesWithJarMergingForQh360Release'.> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/android/internal/http/multipart/PartSource.class
当然,只要是这个问题都是一样的 只要是:java.util.zip.ZipException: duplicate entry
只不过这个问题给出的解决方案几乎没有,找包找了好久。现在给出解决方法:
全局搜索(Studio默认快捷键 ctrl+shift+F)jar包:org.apache.http.legacy
之后就会发现出现好多引用此jar包的地方,有的三方还会使用useLibrary 'org.apache.http.legacy'
,对于重复的,只保留一个即可。
在我处理这个问题的时候,还出现过SDK里有这个jar,只要定位到SDK路径下optional
文件夹目录就会发现org.apache.http.legacy.jar
,把这个jar删掉,同时清除optiona.json
文件夹下,关于这个jar的相关信息。clean下项目即可
其他相同错误,不同文件解决思路以PartSource.class为例:
双击shift调出搜索搜索PartSource的引用路径,看是不是有多个jar在引用,如果是,全局项目只保留一个,clean即可。
至于怎么只保留一个
方式一:在gradle中加入代码
android{
...
configurations {
all*.exclude module: 'okhttp'
all*.exclude module: 'okio'
all*.exclude group: 'utdid4all'
all*.exclude group:'com.nineoldandroids'
}
}
以上就是去除了 okhttp utdid4all(相信使用阿里系的童鞋会深受其害) nineoldandroids的重复依赖
方式二:在依赖jar的时候这么操作, exclude 重复的部分
compile('com.squareup.retrofit2:retrofit:2.2.0') { exclude group: 'okhttp3' }
方式三:在依赖的依赖库中设置为私有
将Complie改为Provided一定是在被依赖的库中操作比如:主项目app 依赖 库A 两者同事依赖xxx.xxx.xxc jar 那么 在库A中的依赖代码为:provide xxx.xxx.xxc
更多相关文章
- Android Intent多种传值方式
- android实现ftp上传、下载,支持文件夹
- android java 检测文件夹(目录)是否存在,不存在则创建
- 全局窗口一
- Android 创建与解析XML(三)—— Sax方式(源码)
- Android BroadcastReceiver两种注册方式区别
- 设置android全屏的两种方式
- android 创建快捷方式 删除快捷方式 不重复判断快捷方式
- Android全局变量