升级Android Studio 3.0后Gradle构建报ZipException重复条目问题
嗨,这个问题我升级AS3.0的时候也踩过一模一样的坑!带<declare-styleable>的自定义View出现duplicate entry错误,大概率是新版本Gradle构建流程变化、缓存残留或者依赖配置出了问题,给你几个实用的排查和解决方向:
检查重复依赖配置
先看看你的自定义View所在模块是不是被重复引用了,比如主模块里同时用了implementation和旧的compile依赖同一个library,或者子模块和主模块都依赖了这个含自定义View的模块。你可以执行命令:./gradlew :lf-android-myproject:dependencies查看完整的依赖树,找有没有重复出现的目标模块或类所在的依赖项。
彻底清理构建缓存
AS3.0的构建缓存机制有时候会残留旧的编译文件,导致重复类问题。试试这几步:- 点击AS工具栏的
Build > Clean Project - 接着执行
Build > Rebuild Project - 手动删除项目根目录的
.gradle文件夹、模块下的build文件夹 - 最后通过
File > Invalidate Caches / Restart清理AS的缓存并重启
- 点击AS工具栏的
排查
<declare-styleable>的重复定义
确认你的res/values/attrs.xml里,<declare-styleable name="SomeCustomView">只定义了一次,没有在其他xml文件里重复声明。另外如果自定义View在library模块里,别同时引入library的jar包和aar包,这会导致类被重复打包。升级Gradle插件版本
早期的AS3.0对应的Gradle插件(比如3.0.0)存在一些已知的构建bug,你可以尝试升级到同系列的稳定版本。在项目根目录的build.gradle里修改:dependencies { classpath 'com.android.tools.build:gradle:3.0.1' // 或者更高的3.x稳定版 }注意要匹配对应的Gradle版本(比如3.0.1插件对应Gradle 4.1版本)。
检查类的重复存在
确认你的SomeCustomView.class没有在多个编译目录里重复出现,比如同时存在于src/main/java和src/debug/java目录下,或者在多渠道打包的配置中被重复引入。
内容的提问来源于stack exchange,提问作者Dmitry Ryadnenko

