使用Cordova搭配Android@6.2.3遇重复类ZipException错误求助
解决Cordova Android@6.2.3中Jar合并时的重复类错误
我之前维护老Cordova项目(搭配Android@6.2.3)时,也碰到过完全一样的ZipException: duplicate entry错误,折腾了好几天才理清根源,给你几个实用的解决方案:
1. 定位并排除重复的ZXing依赖
这个错误的核心是多个依赖库同时引入了ZXing的AztecDetectorResult类,首先得找出到底是哪两个模块在重复引入:
- 在项目根目录执行命令查看依赖树:
./gradlew app:dependencies - 在输出里搜索
zxing,你会看到至少两个不同的依赖路径包含这个库(比如一个来自Cordova扫码插件,另一个可能来自某个第三方SDK)。 - 找到冲突的依赖后,在
build.gradle的dependencies块里,给其中一个依赖加上排除规则:dependencies { // 假设是cordova-plugin-scanner插件带来的重复依赖 compile('cordova-plugin-scanner') { exclude group: 'com.google.zxing' } }
2. 修复冲突的Cordova插件
有些老Cordova插件会把ZXing的jar包直接打包到插件里,而不是通过gradle依赖引入,这就很容易和其他依赖冲突:
- 找到你的项目中用到的扫码/条码相关插件,打开它的
plugin.xml文件; - 查找里面是否有类似
<source-file src="libs/zxing-core.jar" target-dir="libs" />这样的配置; - 如果有,直接删除这行配置,改成通过gradle依赖引入ZXing(确保版本和项目其他依赖一致):
<framework src="com.google.zxing:core:3.3.0" /> - 然后重新移除并添加该插件:
cordova plugin remove cordova-plugin-scanner cordova plugin add ./path/to/modified-plugin
3. 临时绕过(不推荐,仅应急用)
如果暂时找不到冲突根源,可以让Gradle在合并Jar时自动选择第一个找到的类,作为临时解决方案:
在build.gradle的android节点下添加packagingOptions配置:
android { compileSdkVersion 25 buildToolsVersion "25.0.3" // 其他配置... packagingOptions { pickFirst 'com/google/zxing/aztec/AztecDetectorResult.class' // 如果还有其他重复类,继续添加对应的路径 } }
⚠️ 注意:这个方法只是掩盖问题,可能会导致某些功能异常,建议排查出根源后用前两个方法彻底解决。
另外你提到这个错误仅在build.gradle特定状态时出现,建议对比正常和异常版本的build.gradle,重点看是否新增了插件、修改了依赖版本或者调整了configurations相关配置,这些变化很可能就是引入重复依赖的原因。
内容的提问来源于stack exchange,提问作者Pierrick Martellière
相关产品推荐
相关产品推荐

