【问题标题】:Android migration to appcompat v7 causes error: Attribute "color" has already been definedAndroid 迁移到 appcompat v7 导致错误:属性“color”已被定义
【发布时间】:2015-11-07 15:09:51
【问题描述】:

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

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

但是,当我对我的项目进行同步时,我遇到了以下错误:

AGPBI: {"kind":"error","text":"属性\"color\"已经被 已定义","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 库,此错误就会消失。

有什么帮助吗?

【问题讨论】:

    标签: android android-appcompat


    【解决方案1】:

    首先尝试从 config.xml 中删除该颜色

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

    这似乎是一个引用问题。

    【讨论】:

    • 从所有 XML 文件中删除 color 的每个实例似乎是对这个问题的强力破解。我的应用使用了变体,目前有 23 个。每个变体都有一个 config.xml 文件。即使我从当前变体的config.xml 文件中删除了color 的所有实例,错误仍然 仍然存在。我什至创建了一个全新的项目并复制了相同的 config.xml 文件,但没有删除 color 属性——并且该项目编译/构建得很好。
    • 这里最令人沮丧的是,Android 甚至没有告诉我哪个特定的 color 引用存在冲突!
    • 有时所有问题都可以通过创建一个新项目并从旧项目中复制所有文件来解决。否则你必须尝试这种“蛮力”的东西。
    【解决方案2】:

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

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

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

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

    感谢 @Timo 耐心地帮助我!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多