第一次遇到这个问题是在使用Bmob后端云的时候,同时使用了bmob-sdk和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')
compile('com.squareup.retrofit2:adapter-rxjava:2.1.0')
不管是Clean还是Rebuild都是正常的,但是当我点击Run App的时候就会出现
Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: okhttp3/Address.class
亦或者
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
不过这两问题的本质都是一样的
询问了官方人员半天,原来是依赖包出现了相同类导致的冲突。解决的方案是将包相同的类去除,最后依赖的写法如下
compile 'cn.bmob.android:bmob-sdk:3.5.1'
compile('com.squareup.retrofit2:retrofit:2.1.0')
{ exclude group: 'com.squareup.okhttp3' }
compile('com.squareup.retrofit2:converter-gson:2.1.0')
{ exclude group: 'com.google.code.gson'
exclude group: 'com.squareup.okhttp3' }
compile('com.squareup.retrofit2:adapter-rxjava:2.1.0')
{ exclude group: 'io.reactivex'
exclude group: 'com.squareup.okhttp3' }
关于如何查找相同类,以及如何查找group,请看我的另一篇文章:
Android Studio中如何解决重复依赖导致的
app:transformClassesWithJarMergingForDebug