接手项目编译失败:com.google.gson.ExclusionStrategy类重复存在
解决Program type already present: com.google.gson.ExclusionStrategy编译错误
我之前踩过一模一样的坑!这个错误的核心原因是Gson库被重复引入了——哪怕你的项目没直接用到ExclusionStrategy,但你依赖的第三方库大概率有多个都自带了Gson,或者同一库的不同版本导致类重复,最终触发Dex合并冲突。
下面是我亲测有效的解决步骤:
第一步:排查重复依赖源
先搞清楚到底是哪个依赖在偷偷引入Gson。在项目根目录执行Gradle命令:# macOS/Linux ./gradlew :sample-mpa-ui:dependencies # Windows gradlew.bat :sample-mpa-ui:dependencies执行完后搜索
com.google.gson:gson,你会看到整个依赖树里所有引用Gson的条目,重点看有没有多个模块同时引入,或者版本不一致的情况。第二步:排除重复的Gson依赖
找到重复引入Gson的那个第三方依赖,在你的Module级build.gradle里给它加上排除规则。比如发现com.xxx:some-library:2.0自带了Gson,就这么写:implementation('com.xxx:some-library:2.0') { exclude group: 'com.google.gson', module: 'gson' }第三步:强制统一Gson版本(可选)
如果排除后还是有问题,或者多个依赖依赖不同版本的Gson,可以在根目录的build.gradle里强制所有依赖使用同一个稳定版本的Gson:allprojects { configurations.all { resolutionStrategy.force 'com.google.gson:gson:2.8.9' // 可替换为最新稳定版 } }第四步:清理Gradle缓存
有时候旧缓存会残留冲突文件,执行下面的命令彻底清理后重新构建:# macOS/Linux ./gradlew clean build --refresh-dependencies # Windows gradlew.bat clean build --refresh-dependencies
补充一下:你看到的错误堆栈transformDexArchiveWithExternalLibsDexMergerForMyProjectModelDebug就是Dex合并阶段出的问题,本质是同一个类在多个Dex包中存在,导致合并失败。
内容的提问来源于stack exchange,提问作者Jean-Bernard Collet
相关产品推荐
相关产品推荐

