解决 Android 工程编译时报资源中属性重复的冲突

往工程里添加一个现成的视图控件,构建过程中(资源合并阶段)报以下错误:

> Task :app:mergeDebugResources FAILED
C:\{projects}\{project}\{module}\build\intermediates\packaged_res\debug\values\values.xml:4:4: Duplicate value for resource ‘attr/background’ with config ‘DEFAULT’ and product ”. Resource was previously defined here: C:\{users}\{user}\.gradle\caches\transforms-3\b49bb4886d87308d0d199cf421803df0\transformed\appcompat-v7-27.1.1\res\values\values.xml:85:4: .

这个 background 的属性名确实过于常见,而且在上述引文之后更为详细的信息里可以看出,该属性名已经存在于兼容支持库中。既然是官方占用,退避三舍也不是不可以,很显然改个别的名字是可以解决此问题的(例如叫 background2),而且网上的类似问题之解决记录表明大抵都是如此操办的。

但于心不甘,凭什么我使用在前,官方后出,反而要我改名。而后又在 StackOverflow 上看到一个回答(答主为 ultra.deep)很别致,而且不知为何跟我的某种直觉非常匹配,于是试了一下,竟然真的可以。其方法特别简单,就是把该属性定义 XML 中的 format 属性去掉。以前述 background 为例,之前的文本为 <attr name="background" format="reference|color"/>,改成 <attr name="background"/> 就好了。

如果看到本文的朋友不幸正履此难,可以照此一试。

 

发表回复

您的电子邮箱地址不会被公开。