Android编译报错:transformDexArchiveWithExternalLibsDexMergerForDebug任务执行失败
解决Dex合并失败(Multiple dex files define)问题
从你提供的报错信息和Gradle配置来看,这个问题的核心是Google Play Services(GMS)相关库的版本冲突:你项目中直接引入的Firebase库版本是11.2.2,但OneSignal 3.7.1内部依赖了更高版本的GMS组件,导致同一个类com.google.android.gms.internal.zzcdn被多个不同版本的库重复定义,最终触发Dex合并失败。
下面是具体的解决方案:
1. 强制统一GMS/Firebase依赖版本
在你的模块build.gradle的dependencies块外部,添加版本强制配置,让所有依赖都使用你项目指定的11.2.2版本:
configurations.all { // 强制所有依赖使用和项目一致的GMS基础库版本 resolutionStrategy.force 'com.google.android.gms:play-services-base:11.2.2' resolutionStrategy.force 'com.google.android.gms:play-services-basement:11.2.2' // Firebase核心库也需要统一版本 resolutionStrategy.force 'com.google.firebase:firebase-core:11.2.2' } dependencies { // 你的原有依赖内容... }
这个配置会让Gradle忽略依赖树中其他版本的这些库,强制使用你指定的版本,从根源消除重复类的冲突。
2. 清理重复的测试依赖
你的依赖中同时存在旧的androidTestCompile和新的androidTestImplementation引入的Espresso库,这可能带来额外的依赖冗余。建议删除旧的那一行:
// 删掉这行重复的配置 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' })
保留现有的androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'即可,Gradle 3.0+推荐使用implementation系列的依赖声明。
3. 清理缓存并重新构建
完成上述配置修改后,执行以下步骤确保生效:
- 点击Android Studio顶部菜单的
Build -> Clean Project - 然后执行
Build -> Rebuild Project - 如果问题仍然存在,尝试
File -> Invalidate Caches / Restart,清除IDE缓存后再重新构建
额外说明
如果之后你计划升级Firebase/GMS版本,记得同步检查OneSignal的兼容版本(OneSignal官方文档会标注对应支持的GMS版本范围),避免再次出现版本冲突。
内容的提问来源于stack exchange,提问作者user3880554
相关产品推荐
相关产品推荐

