1、大家都知道我们常常会遇到dex超出方法数的问题,所以很多人都会采用android.support-multidex进行解决,但是你也许会遇到下面这样的错误,不由得让你冥思苦想,这个出错原因一般是引入了多个相同的包,但是你打开一开,libs下明明就只有一个包呀,让人头疼。
Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'.
> java.util.zip.ZipException: duplicate entry: android/support/multidex/MultiDex.class
解决方案如下:首先删掉libs下面的jar包,并解除依赖,然后在gradle脚本中,加入compile 'com.android.support:multidex:1.0.1'
(当前最新版本是1.0.1),顺利解决。
2、相信下面这个问题也比较常见,至少楼主遇到很多次了,前面没做笔记,搞的每次都要重新去理解,所以这个问题必须总结一下,杂一看又是v4包重复了。
* What went wrong:
Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/annotation/ColorRes.class
具体解决方案为:由于很多第三方包都会用到v4支持包,这样在你导入多个支持的时候难免会出现这样的错误,只需在build.gradle里面添加上
configurations {
all*.exclude group: 'com.android.support', module: 'support-v4'
}
然后clean一下工程再build就好。记住必须先clean,不然还是无法解决!!
3、什么?这还不够狠?给你来个更能节省找问题时间的。大家都知道我们在android开发过程中或多或少会引入module,不仅可以提高项目的开发进度,而且项目管理起来也会相当方便。
但是!!!!你可能会遇到在同一个项目中引入多个module,而这些module又因为引入了同一个jar包或者有冲突的jar包的时候,这样你可能可以通过编译,但是你打包apk会直接报错有木有?如果你一个是module,一个是直接在app下的build.gradle添加的依赖,打包时候看到二次引入,你估计会想:什么?二次引入?你可能根本丈二的和尚摸不着头脑,因为也许你依赖了很多三方的东西,而你竟然不知道哪个用了这个jar包导致了这个异常,的确让人心力交瘁,蓝瘦香菇。
在解决问题之前,我还是想在这里多说几句,说下关于module的集中依赖的区别,如果想直接看解决方案的请跳:
1) compile:它是对所有的build type以及favlors都会参与编译并且打包到最终的apk文件中。
2) provided:它是对所有的build type以及favlors只在编译时使用,类似eclipse中的external-libs,只参与编译,不打包到最终的apk。
3) apk:只会打包到apk文件中,而不参与编译,所以不能在代码中直接调用jar中的类或者方法,否则编译时报错。
4) test compile:它仅仅是针对单元测试代码的编译以及最终打包测试apk时有效,而对正常的debug或者release apk包不起任何作用。
5) debug compile:它仅仅针对debug模式的编译和最终的debug apk打包。
6) release compile:仅仅针对release模式的编译和最终的release apk打包。
回归正题,这样的解决方案是什么:
直接看打包的错误打印,找到module中这个二次引入的jar包,把compile更改为provided,这样在写代码的时候可以在所属的module中正常使用jar包中的类,而生成的apk不会包含该jar包。这样在编译的时候由于只有一个jar包编译进apk,便不会发生上面所说的二次引入的冲突错误了。
【注】使用provided必须删除compile fileTree(include: ['*.jar'], dir: 'libs') 不然lib下的jar均按照compile方式引入到Module。
还是来个例子:我在项目中用了一堆堆的compile,而由于集成了环信的easeui,又因为其使用了glide的jar包,所以导致我在release的时候,glide发生了冲突,所以我采用了上面的解决方案,得到了成功解决。下面是easeui的build文件。我把glide换成了provided。
to be continue......