错误:属性"主题"已经定义了

时间:2014-10-24 10:52:27

标签: android compiler-errors google-play-services android-theme android-recyclerview

我正在使用Android studio来构建应用程序。我正在使用以下依赖项:

  1. 播放服务:compile 'com.google.android.gms:play-services:5.2.08'
  2. app combat v7:compile 'com.android.support:appcompat-v7:21.0.0'
  3. 支持Cardview:compile 'com.android.support:cardview-v7:21.0.0'
  4. 支持Recycler视图:compile 'com.android.support:recyclerview-v7:21.0.0'
  5. 构建应用时出现以下错误:

    app/build/intermediates/exploded-aar/com.google.android.gms/play-services/5.2.08/res/values/wallet_attrs.xml
        Error:Attribute "theme" has already been defined
    

    Code Styles.xml

    <resources>
    
        <!-- Base application theme. -->
        <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
            <!-- Customize your theme here. -->
        </style>
    
    </resources>
    

    代码wallet_attrs.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- Copyright 2014 Google Inc. All Rights Reserved. -->
    <resources>
        <!-- Attributes for the WalletFragment &lt;fragment&gt; tag -->
        <declare-styleable name="WalletFragmentOptions">
            <!-- Theme to be used for the Wallet selector -->
            <attr name="theme" format="enum">
                <enum name="holo_dark" value="0"/>
                <enum name="holo_light" value="1"/>
            </attr>
            <!-- Google Wallet environment to use -->
            <attr name="environment" format="enum">
                <enum name="production" value="1"/>
                <enum name="sandbox" value="0"/>
                <enum name="strict_sandbox" value="2"/>
            </attr>
            <!-- A style resource specifing attributes to customize the look and feel of WalletFragment -->
            <attr name="fragmentStyle" format="reference"/>
            <!-- Fragment mode -->
            <attr name="fragmentMode" format="enum">
                <enum name="buyButton" value="1"/>
                <enum name="selectionDetails" value="2"/>
            </attr>
        </declare-styleable>
    
        <!-- Attributes that may be specified in a style resource to customize the look and feel of
             WalletFragment -->
        <declare-styleable name="WalletFragmentStyle">
            <!-- Height of the buy button. This includes an 8dp padding (4dp on each side) used for
                 pressed and focused states of the button. The value can be a specific height, e.g.
                 "48dp", or special values "match_parent" and "wrap_content". -->
            <attr name="buyButtonHeight" format="dimension">
                <enum name="match_parent" value="-1" />
                <enum name="wrap_content" value="-2" />
            </attr>
            <!-- Width of the buy button. This includes an 8dp padding (4dp on each side) used for
                 pressed and focused states of the button. The value can be a specific width, e.g.
                 "300dp", or special values "match_parent" and "wrap_content". -->
            <attr name="buyButtonWidth" format="dimension">
                <enum name="match_parent" value="-1" />
                <enum name="wrap_content" value="-2" />
            </attr>
            <!-- Text on the buy button. Must be one of "buy_with_google", "buy_now" and "book_now" -->
            <attr name="buyButtonText" format="enum">
                <enum name="buy_with_google" value="1"/>
                <enum name="buy_now" value="2"/>
                <enum name="book_now" value="3"/>
            </attr>
            <!-- Appearance of the buy button. Must be one of "classic", "grayscale" and "monochrome" -->
            <attr name="buyButtonAppearance" format="enum">
                <enum name="classic" value="1"/>
                <enum name="grayscale" value="2"/>
                <enum name="monochrome" value="3"/>
            </attr>
            <!-- TextAppearance for masked wallet details -->
            <attr name="maskedWalletDetailsTextAppearance" format="reference"/>
            <!-- TextAppearance for headers describing masked wallet details -->
            <attr name="maskedWalletDetailsHeaderTextAppearance" format="reference"/>
            <!-- Masked wallet details background -->
            <attr name="maskedWalletDetailsBackground" format="reference|color"/>
            <!-- TextAppearance for the "Change" button in masked wallet details view -->
            <attr name="maskedWalletDetailsButtonTextAppearance" format="reference"/>
            <!-- "Change" button background in masked wallet details view -->
            <attr name="maskedWalletDetailsButtonBackground" format="reference|color"/>
            <!-- Color of the Google Wallet logo text in masked wallet details view -->
            <attr name="maskedWalletDetailsLogoTextColor" format="color"/>
            <!-- Type of the wallet logo image in masked wallet details view -->
            <attr name="maskedWalletDetailsLogoImageType" format="enum">
                <enum name="classic" value="1"/>
                <enum name="monochrome" value="2"/>
            </attr>
        </declare-styleable>
    </resources>
    

5 个答案:

答案 0 :(得分:41)

只需使用最新的(21)
appCompat和
Google Play服务库

例如:

compile 'com.android.support:support-v4:21.0.0'
compile 'com.android.support:appcompat-v7:21.0.0'
compile 'com.android.support:recyclerview-v7:21.0.0' 
compile 'com.android.support:cardview-v7:21.0.0'
compile 'com.google.android.gms:play-services:6.1.11'

然后一切正常:)

答案 1 :(得分:11)

检查一下,你是否有一个名为attrs.xml的文件。在该文件中替换以下行

 <attr name="theme" format="reference" />

 <attr name="apptheme" format="reference" />

即,重命名主题名称。 现在清理项目。 这解决了我的问题。

答案 2 :(得分:2)

在通过SDK管理器更新内容后,我在Eclipse中开发了同样的问题。

我必须从工作区中完全删除Google Play服务库,然后复制并导入更新后的版本following the instructions here

没有更新引用的罐子帮助我 - 只有一个全新的导入。这包括更新android-support-v7-appcompat导入。

答案 3 :(得分:0)

如果您想继续支持较旧的Android版本(2.3.x,3.xx,4.0),请使用您的库的修改版本删除钱包类和资源(假设您不需要钱包功能。)这样可以避免这种情况“主题”attr问题。我正在使用play-services-5.0.89.arr没问题。

特别是,删除com.google.android.gms.wallet.*类和wallet_*.xml资源,您就完成了。

答案 4 :(得分:-3)

感谢Hirak,因为你提到错误是依赖的。使用以下版本的库解决了它:

compile 'com.android.support:appcompat-v7:20.0.0'
compile 'com.google.android.gms:play-services:4.+'
compile 'com.android.support:cardview-v7:21.0.0'
compile 'com.android.support:recyclerview-v7:21.0.0'