Android构建Gradle重复资源错误求助:ic_cut.xml内容冲突
解决Android构建中重复资源(res/drawable/ic_cut.xml)的问题
问题背景
构建时触发重复资源错误:
Modules 'base' and 'ModuleX' contain entry 'res/drawable/ic_cut.xml' with different content.
项目依赖配置:
- ModuleX(动态模块)依赖:
implementation("library_group:module-core:VERSION_X",{ exclude group: 'graphics_library', module: 'graphics-module' })
- App模块依赖:
implementation("graphics_library:graphics-module:GRAPHICS_VERSION")
推测graphics-module通过App直接引入和其他依赖间接引入,版本不一致导致资源冲突,已尝试强制统一版本但无效:
configurations.all { resolutionStrategy { force 'graphics_library:graphics-module:GRAPHICS_VERSION' } }
可行解决方案
1. 验证依赖版本是否真正统一
执行依赖树命令,检查所有模块对graphics-module的引用版本是否一致:
# 查看App模块依赖树 ./gradlew app:dependencies # 查看ModuleX模块依赖树 ./gradlew moduleX:dependencies
若发现仍有不同版本引用,可在ModuleX的build.gradle中单独添加版本强制规则,确保动态模块的依赖也被统一:
configurations.all { resolutionStrategy { force 'graphics_library:graphics-module:GRAPHICS_VERSION' } }
2. 排除冲突模块中的重复资源
在其中一个冲突模块(如ModuleX)的build.gradle中配置资源排除,移除冗余的ic_cut.xml:
android { sourceSets { main { res { exclude 'drawable/ic_cut.xml' } } } }
注意:需确认排除的资源为冗余项,避免影响功能运行。
3. 配置资源合并优先级
动态模块的资源合并逻辑与普通模块不同,可在ModuleX的build.gradle中设置pickFirst规则,优先保留第一个找到的资源文件:
android { packagingOptions { pickFirst 'res/drawable/ic_cut.xml' } }
该规则会忽略后续冲突的资源文件,确保构建时只使用一份资源。
4. 重命名冲突资源并替换引用
若上述方法均无效,可直接修改其中一个模块的ic_cut.xml文件名(如改为ic_cut_base.xml),然后替换该模块内所有对该资源的引用,从根源消除冲突。
内容的提问来源于stack exchange,提问作者Dinesh G
相关产品推荐
相关产品推荐

