Android migration to appcompat v7 causes error: Attribute "color" has already been defined

Android migration to appcompat v7 causes error: Attribute "color" has already been defined

我最近决定在我的应用程序中包含 appcompat-v7 库,以便支持 material 设计,并使用较新的 ActionBarDrawerToggle,因为support-v4 已被弃用。

我的compileSdkVersiontargetSdkVersion设置为23support-v4appcompat-v7 的版本都设置为 23.1.0.

但是,一旦我对我的项目进行了同步,我 运行 就出现了以下错误:

AGPBI: {"kind":"error","text":"Attribute \"color\" has already been defined","sources":[{"file":"/Users/work/source/android/app.android.whitelabel/WhiteLabelApp/src/main/res/values/config.xml","position":{"startLine":1}}],"original":""}

环顾四周,我发现很多人都遇到过不同版本的 appcompat 库的类似问题。而且我也明白,这个错误表明我的 config.xml 文件中有一些 color 值与其他文件冲突。但是,截至目前,该错误并未向我提供任何关于哪个特定 color 属性发生冲突的线索。我的 config.xml 文件也定义了许多此类特定于项目的 color 属性。

如果我删除 appcompat-v7 库,这个错误就会消失。

有什么帮助吗?

首先尝试从 config.xml

中删除该颜色

您是否在 xml 文件中的其他任何地方定义了颜色? (是吗?-> 删除它)

这似乎是一个引用问题。

好吧,在这种特殊情况下,根本问题最终是 values 文件夹下的 attrs.xml 文件定义了一个自定义标签,不幸的是,它被命名为 color .这是一些遗留定义,甚至不再使用。

不知何故,合并 appcompat-v7 库触发了错误(想知道为什么 support-v4 没有!)。

使情况令人沮丧和误导的是 gradle 指出错误在 config.xml 中,而错误在 attrs.xml 文件中!

最后,将我的 res 文件一次一个复制到新项目结构中的缓慢而乏味的方法揭示了真正的问题所在。

感谢 @Timo 在这里耐心地帮助我!