Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/google/gson/annotations/Expose.class

当使用maven导入依赖时,可能会出现不同的依赖包含了同一个jar,在编译期间不会报错。可一旦run app的时候,就会报

Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: xxx.class
  • 1
  • 2

解决的方法是在引入依赖的时候把相同的jar去除掉

比方说,我同时引入了bmob和retrofit2的依赖

compile ('cn.bmob.android:bmob-sdk:3.5.1')
compile ('com.squareup.retrofit2:retrofit:2.1.0')
compile ('com.squareup.retrofit2:converter-gson:2.1.0')
  • 1
  • 2
  • 3

因为bmob底层也是通过引入okhttp来实现的,所以我报的错是:

Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/google/gson/annotations/Expose.class
  • 1
  • 2

这时候我们可以发现

 com/google/gson/annotations/Expose.class
  • 1

最后面有一个Expose.class
我们可以通过Search Everywhere去定位这个类(默认快捷键是双击shift)。

看,通过搜索的确发现了两个一模一样的类,而且来自不同的依赖,而重复的类库正是gson。此时再回想起我刚刚是不是添加过一个

compile ('com.squareup.retrofit2:converter-gson:2.1.0')
  • 1

好了,找到问题的根源的。那我们现在如何去除相同的类库呢,很简单:
在AS中,选择以project显示项目,找到最下面的External Libraries,然后继续找,找到相对应的类库:

如图依次点开之后发现了一个pom.xml,这里面就是关于这个jar的一些配置文件,点开之后长这个样子

往下找,发现了一个gson的引用

没错,这个就是导致报错的直接原因。复制里面groupId,到你的app的build.gradle里,找到那个依赖,添加{exclude group: 'com.google.code.gson'}
把这个groudId的引用去除掉。如下图所示

好了,到此问题就解决了,如果你有多个重复依赖的话,就按照本文所给出的方法,一个一个去重

最新文章

  1. 使用C#处理基于比特流的数据
  2. Maven(一)环境搭建
  3. Result Maps collection already contains value for
  4. urldecode解码方法
  5. Linux编程获取本地IP
  6. Msbuild利用cpu多核加速
  7. Spring MVC数组绑定
  8. 使用PyInstaller打包Python程序
  9. ORACLE和MONGODB,必须也得进入。
  10. ubuntu apt-get 遇到的问题
  11. mysql数据库常用命令笔记
  12. jQuery 中 jQuery(function(){})与(function(){})(jQuery) 的区别及用法
  13. http进阶
  14. java 二叉树排序
  15. python 基础语法梳理(二)
  16. 《程序设计入门——C语言》翁恺老师 第一周编程练习记录
  17. Linux文件属性描述
  18. XML Linq 学习笔记
  19. Oracle date 详解
  20. redis基本命令

热门文章

  1. 关于Unity中FPS第一人称射击类游戏制作(专题十)
  2. Ogre1.9 源码编译
  3. Android 8 wifi blakclist
  4. Linux Shell的 & 、&& 、 ||
  5. eclipse调用jni
  6. js 正则去重
  7. MyBatis中对于字符串blank(null、empty)的判定方法
  8. CentOS系统很卡的基本排查方法
  9. mysql 解压版方法
  10. 谈谈Android NDK中动态链接库(.so文件)的优化