appcompat-v7:21.0.0与Google Play服务6.1+不兼容,无法正常工作。

11

我正在更新我的应用程序以支持材料主题(我的应用程序使用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,那么项目就可以编译通过。

我是不是对Lollipop太兴奋了,没有仔细阅读文档?我该如何解决这个问题?

构建脚本的一部分:

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 存储库长这样: enter image description here


1
尝试像这样定义依赖关系:compile 'com.google.android.gms:play-services:6.1.+' - Olegas Gončarovas
1
是的,我尝试过了,6.1.+ 解析为 6.1.11。 - tom91136
我在6.1.11版本中遇到了类似的问题。它抱怨钱包颜色文件wallet_colors.xml中的“color”属性属于Play Services库。 - Damian Petla
3个回答

19

@igavran的答案指向了正确的方向,但我想给出更全面的答案:

Gradle 资源合并器将来自所有依赖项的所有资源文件夹合并到单个文件夹中。如果存在重复,则构建过程将失败。

由于某种奇怪的原因,Android Studio在消息窗口中指向Google Play服务库的。Google Play服务与这个问题无关。幸运的是,如果你在标签下查看,你会找到正确的问题路径.

Android Studio的截屏

你也可以从命令行构建项目,并获得正确的路径。

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

现在,当你知道原因时,你可以在你的项目模块中定位该属性,并用不同的名称替换它。我猜它会位于/values/attrs.xml文件中。


这里奇怪的事情是<declare-styleable>定义了属性的作用域,所以它不应该发生冲突,在我的情况下是CursorAdapter_layout(我的)VSSearchView_layout(支持)。你认为这里有更深层次的错误,还是支持库引入新属性现在和将来会破坏其他应用程序? - TWiStErRob
1
我认为是后者。这将强制我们为属性指定唯一的名称,也许这没问题。另一方面,这似乎是谷歌合并时没有预料到的副作用。我想我们得问问他们。 - Damian Petla
@DamianPetla,你真是太棒了.....非常感谢....为我节省了很多时间。 - TNR

5

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

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


仍然无法通过appcompat-v7:22.0.0。 - Eduardo Gomez

1
不要像以下示例1一样使用整个Play服务。
示例1:compile 'com.google.android.gms:play-services:7.5.0'
只使用你的应用程序中需要使用的那些服务。例如,如果您想使用Google+服务,则使用以下示例2:
示例2:compile 'com.google.android.gms:play-services-plus:7.5.0'
更多服务请访问:设置Google Play服务

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接