You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 05:42:39