生成APK时出现重复Zip条目错误:CoordinatorLayout$Behavior.class重复
解决APK打包时的重复Zip条目错误
这个问题我帮不少开发者排查过,核心就是项目里重复引入了同一个类文件——具体就是android/support/design/widget/CoordinatorLayout$Behavior.class,打包时被多个依赖同时塞进了Jar包,导致冲突报错。下面是一步步的解决办法:
第一步:定位重复依赖的来源
打开Android Studio的Terminal,运行对应的Gradle命令查看完整依赖树:- Windows系统:
gradlew app:dependencies - Mac/Linux系统:
./gradlew app:dependencies
在输出结果里搜索design或者coordinatorlayout,找到哪些第三方库同时引入了这个类所在的模块(可能是旧的com.android.support:design,也可能是AndroidX的com.google.android.material:material)。
- Windows系统:
第二步:排除重复的依赖模块
找到重复引入的那个第三方库,在build.gradle(app)里用exclude语句去掉冲突的模块。举两个例子:- 如果某个库引入了旧的Support Design库,而你用的是AndroidX:
implementation('com.example.thirdparty:library:1.2.3') { exclude group: 'com.android.support', module: 'design' } - 如果是两个库都引入了AndroidX的Material库:
implementation('com.example.anotherlib:lib:4.5.6') { exclude group: 'com.google.android.material', module: 'material' }
- 如果某个库引入了旧的Support Design库,而你用的是AndroidX:
第三步:检查MultiDex配置是否正确
这个报错和MultiDex相关,确保你的配置没问题:- 在
build.gradle(app)的defaultConfig里开启MultiDex:android { defaultConfig { multiDexEnabled true } } - 添加MultiDex依赖(根据你的项目是AndroidX还是旧Support库选择):
// AndroidX版本 implementation 'androidx.multidex:multidex:2.0.1' // 旧Support库版本 // implementation 'com.android.support:multidex:1.0.3' - 你的Application类要么继承
MultiDexApplication,要么在attachBaseContext方法里手动初始化:@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }
- 在
第四步:清理缓存重新构建
有时候旧的构建缓存会残留冲突文件,执行下面的命令彻底清理后再重新打包:- Windows:
gradlew clean build - Mac/Linux:
./gradlew clean build
- Windows:
第五步:检查是否混合使用Support库和AndroidX
如果你的项目已经迁移到AndroidX,绝对不能同时保留旧的Support库依赖。可以用Android Studio的Refactor > Migrate to AndroidX工具自动替换所有旧依赖,确保整个项目的依赖统一。
内容的提问来源于stack exchange,提问作者Özgür Can Karagöz
相关产品推荐
相关产品推荐

