【问题标题】:appcompat-v7:21.0.0 not working with google play service 6.1+appcompat-v7:21.0.0 不适用于 google play 服务 6.1+
【发布时间】:2014-10-21 06:54:42
【问题描述】:

我正在更新我的应用程序以支持材料主题(我的应用程序使用 Google Play 服务)

当我同步我的项目时,它出现了:

...\app\build\intermediates\exploded-aar\com.google.android.gms\play-services\6.1.11\res\values\wallet_colors.xml

Error:Attribute "showText" has already been defined

我的 gradle 依赖项:

compile 'com.android.support:appcompat-v7:21.0.0'
compile 'com.google.android.gms:play-services:6.1.11'
// the latest version of play-services is 6.1.11

如果我排除 appcompat-v7,则项目编译时不会出错。

我是不是对棒棒糖过于兴奋而没有正确阅读文档?我该如何解决这个问题?

部分构建脚本:

compileSdkVersion 21
buildToolsVersion '21.0.1'
dexOptions {
    preDexLibraries true
    //incremental true
}
defaultConfig {
    minSdkVersion 14
    targetSdkVersion 21
    versionCode 11
    versionName '1.0'
    renderscriptTargetApi 21
    renderscriptSupportMode true
}
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}

本地 Google 存储库如下所示:

【问题讨论】:

  • 尝试像这样定义依赖compile 'com.google.android.gms:play-services:6.1.+'
  • 是的,我试过了,6.1.+ 解析为 6.1.11
  • 我对 6.1.11 版本有类似的问题。它抱怨属于 Play Services 库的 wallet_colors.xml 中的“颜色”属性

标签: android google-play-services android-5.0-lollipop android-appcompat


【解决方案1】:

@igavran 的答案指向了正确的方向,但我想给出更全面的答案,所以就是这样:

Gradle Resource Merger 将所有依赖项中的所有资源文件夹合并到一个文件夹中。如果有重复,构建过程将失败。

出于某种奇怪的原因,Android Studio 在消息窗口中指向了 Google Play 服务库的 wallet_colors.xml。 Google Play Service 与此问题无关。幸运的是,如果你在下面的 Output: 标签下查看,你会找到问题的正确路径,例如

您还可以从命令行构建您的项目并获得正确的路径。

在第 172 行的 values.xml 文件中(在您的情况下是不同的行),您会找到一个 <declare-styleable>,其属性名为 "color"(" showText" 在你的情况下)。很可能是您自己的样式,您必须更改以摆脱重复。

所以现在,当您知道原因后,您可以在项目模块中找到该属性并将其替换为不同的名称。我猜它会位于 /values/attrs.xml 文件中。

【讨论】:

  • 这里奇怪的是<declare-styleable> 定义了属性的范围,所以它不应该发生冲突,在我的例子中是CursorAdapter_layout(我的)VS SearchView_layout(支持)。你认为这里有更深层次的错误,还是只是引入新属性的支持库现在和将来会破坏其他应用程序?
  • 我认为是后者。它会迫使我们为我们的属性指定唯一的名称,也许没关系。另一方面,这似乎是谷歌没有预料到的合并的副作用。我想我们得问问他们。
  • @DamianPetla,你真是太棒了......非常感谢......为我节省了很多时间。
【解决方案2】:

我在同一个问题上花了两个小时,就我而言,问题是我定义了自己的属性“showText”(在 res/values/attrs.xml 中),它与<declare-styleable name="SwitchCompat"> 中定义的属性冲突.

使用 appcompat-v7:20 时不存在此问题,但使用 appcompat-v7:21 构建失败。

【讨论】:

  • appcompat-v7:22.0.0 仍然失败
【解决方案3】:

不要像下面的示例 1 那样使用整个播放服务

示例 1:编译 'com.google.android.gms:play-services:7.5.0'

使用您想在您的应用程序中使用的那些服务。例如,如果您想使用 Google+ 服务而不是使用以下示例 2

示例 2:编译 'com.google.android.gms:play-services-plus:7.5.0'

更多服务请访问:Setting Up Google Play Services

【讨论】:

    猜你喜欢
    • 2014-12-31
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多