天使漫步IT工作室

java.util.zip.ZipException: duplicate entry 解决办法


一、编译出现问题

今天添加依赖包后编译出现如下异常:

Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: org/bouncycastle/LICENSE.class

通过英汉词典查出:duplicate entry为多个入口的意思,以上的异常信息可以解读为:org/bouncycastle/LICENSE.class这个文件出现两个入口。即,在依赖的jar包中出现两份路径一致的class文件。

类似的情况还有很多,比如stackoverflow.com站点上android/support/v4/util/TimeUtils.class也是类似的错误。

为何出现两个入口就无法通过编译呢?因为jvm是通过类路径进行类加载,也就是必须保证同一个路径下只有一个类,如果同一个路径下出现两个类,jvm会产生迷惑不知道加载哪一个。打个比方:如果你女朋友有一个一模一样的双胞胎孪生姐妹,那么她们打扮举止都一致的时候,你肯定认不出来哪个是你女朋友。为了防止jvm产生迷惑,所以在编译阶段就把这个错误抛出来,规避迷惑场景。

二、总结

这种情况一般会出现在引入相同jar包与依赖包之间的引用,以及jar包及自己的类产生冲突。一般通过路径进行检查既可以找到重复的项,想办法去掉相同路径上的同一个,删掉或者重新命名再编译即可。

当前页面是本站的「Baidu MIP」版。查看和发表评论请点击:完整版 »