Android编译报错:mergeDebugResources执行失败(attr/size资源重复)
解决资源
attr/size重复定义的编译错误 问题本质
这是Android资源合并时的冲突问题:第三方库jetified-colorpicker-0.9.1和你的项目都定义了同名的自定义属性attr/size,Gradle在合并资源文件时无法确定使用哪一个版本,直接导致mergeDebugResources任务失败。
定位与修复步骤
找到重复定义的位置
- 打开项目本地的
res/values/values.xml,跳转到第14239行,找到<attr name="size" ... />的代码 - 第三方库的对应文件可在项目构建目录中查看,路径大致为
build/intermediates/exploded-aar/com.github.skydoves/jetified-colorpicker-0.9.1/res/values/values.xml,第46行存在相同的<attr name="size" ... />定义
- 打开项目本地的
两种修复方案任选其一
方案一:重命名项目的自定义属性
直接修改项目values.xml里的attr/size为唯一名称(比如custom_size),同时同步修改项目中所有引用该属性的地方(布局文件、样式文件、Java/Kotlin代码)。这种方式最安全,彻底避免冲突。方案二:强制指定优先使用的属性版本
- 方式1:在Module级
build.gradle中排除第三方库的冲突属性android { packagingOptions { resources { // 排除第三方库中的attr/size定义,优先使用项目本地的 exclude 'res/values/values.xml:attr/size' } } } - 方式2:在项目的values.xml中覆盖第三方库的定义
先在<resources>标签添加tools命名空间,再给冲突属性加上tools:override="true":
注意:这种方式可能导致第三方库因属性定义被覆盖出现异常,修复后需全面测试。<resources xmlns:tools="http://schemas.android.com/tools"> <!-- 根据实际format调整,比如dimension、integer等 --> <attr name="size" format="dimension" tools:override="true" /> </resources>
- 方式1:在Module级
后续预防建议
- 自定义属性时添加项目专属前缀(比如项目缩写),例如
app:myapp_size,降低和第三方库的命名冲突概率 - 引入第三方库前,查看其官方文档或资源文件,提前规避同名属性定义
内容的提问来源于stack exchange,提问作者mboy
相关产品推荐
相关产品推荐

