53.android:Caused by: java.io.IOException: Duplicate zip entry

场景

android项目,在集成多个第三方sdk的jar包后,发现:有两个jar包中包含了少数的几个类,出现了同包名同类名。

这导致在打包时报错,报错信息如下:

Caused by: java.io.IOException: Duplicate zip entry [425.jar:org/bouncycastle/crypto/AsymmetricCipherKeyPair.class]
        at proguard.io.JarWriter.getOutputStream(JarWriter.java:138)
        at proguard.io.FilteredDataEntryWriter.getOutputStream(FilteredDataEntryWriter.java:106)
        at proguard.io.FilteredDataEntryWriter.getOutputStream(FilteredDataEntryWriter.java:106)
        at proguard.io.FilteredDataEntryWriter.getOutputStream(FilteredDataEntryWriter.java:92)
        at proguard.io.ClassRewriter.read(ClassRewriter.java:68)
        at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
        at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
        at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
        at proguard.io.JarReader.read(JarReader.java:65)
        at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:65)
        at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53)
        at proguard.InputReader.readInput(InputReader.java:184)
        ... 12 more


搜索对应的类,可以看到2个jar包中都含有:


image.png

解决方案(对我行之有效的方案)

1.解压jar包,删除错误提示中涉及到的重复的类

2.重新生成jar包
在Mac终端或者window 命令窗口中,输入指令:jar cvf jtqrcode.jar -C mj/ .(这个命令用于文件夹中包含文件夹和文件,命令窗口与文件夹同级)
指令说明:
jtqrcode.jar是生成的jar包名字
-C是指定目录下的所有文件和文件夹,注意一定是大写
mj是当前文件夹的名字,这里我是随意起的临时文件夹名,make jar的缩写。你也可以随意命名。

【特别注意】 /后面是空格再加.
运行以上指令,生成jar包:

注意区别⚠️:
jar cvf jtqrcode.jar -C mj/ .(这个命令用于文件夹中包含文件夹和文件,命令窗口与文件夹同级)
jar cvf jtqrcode.jar -C mj .(这个命令用于把文件夹中的文件生成jar包,命令窗口在文件夹中)

3.使用新生成的jar包
使用自己生成的jar,按照jar包的使用,就解决上面的问题了。

网上解决方案(对我不起作用)

网上让把重复的类打包时剔除,在这里配置:exclude xxxx。但尝试后,对我不起作用。

packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/jdom-info.xml'

        exclude xxxx
    
    }

你可能感兴趣的:(53.android:Caused by: java.io.IOException: Duplicate zip entry)