duplicate entry: org/apache/commons/codec/DecoderException.class编译不过问题解决

Bug问题描述:

  • compileSdkVersion 23
  • buildToolsVersion “23.0.3”
  • minSdkVersion 15
  • targetSdkVersion 19
  • 程序在android studio自带的虚拟机上可以运行,虚拟机 sdk23
  • 测试机coolpad5950 sdk 16 编译会失败无法生成apk
  • 在虚拟机上跑成功后的apk直接装到真机上无法启动

解决过程

踩坑

Error:Execution failed for task ‘:app:transformClassesWithJarMergingForDebug’.
com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/ogaclejapan/smarttablayout/utils/BuildConfig.class

最开始报的是上面这个错误, Smarttablayou是一个三方项目,我用它来实现顶部的tab。

顶部tab

compile’com.ogaclejapan.smarttablayout:library:1.6.1@aar’
compile ‘com.ogaclejapan.smarttablayout:utils-v4:1.6.1@aar’
//compile ‘com.ogaclejapan.smarttablayout:utils-v13:1.6.1@aar’

这个错误已经解决,原因是v13和v4冲突了,注掉一个就好了

真正的bug

Error:Execution failed for task ‘:app:transformClassesWithJarMergingForDebug’.
com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entryorg/apache/commons/codec/DecoderException.class

前面都一样后面换了一个类而已,所以搜出来的解决app:transformClassesWithJarMergingForDebug’问题的,这个问题大概是说你引用的多个三方项目里又同时引用了别的。而解决冲突方法就类似于下面这种方式

compile (group: ‘com.zendesk’, name: ‘sdk’, version: ‘1.0.0.1’){
exclude group: ‘com.squareup.picasso’
}

然后各种试,最后甚至删掉了这个项目还是会报错,很开心,可以排除这个三方的嫌疑了,后来注意力转移到出问题的class来自于apache的包,之前处理过一个问题就是,从某一个版本JDK以后,默认没有org.apache.http包的引用,需要手动导入,而eclipse推荐的是导入jar包,android studio则需要在gradle的配置中加一句话,但是这个坑很早以前就已经才过了,抱着试试看的态度,查看了一下就是这个问题。用eclipse的方式在studio中进行了处理。修改方式为删掉libs下的jar包,然后再build.gradle(Module:app)下加:

useLibrary org.apache.http.legacy

疑问

第一,为什么模拟器不会出现这个问题,第二为什么这个问题解决过一次,他又会自己出现(有svn但是期间没有同步过)。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐