'appcompat-v7:21.0.0':没有找到与给定名称匹配的资源:属性'android:actionModeShareDrawable'

385

尝试在我的项目中使用最新的appcompat-v7支持库时,我收到以下错误:

/Users/greg/dev/mobile/android_project/app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/21.0.0/res/values-v11/values.xml
Error:(36, 21) No resource found that matches the given name: attr 'android:actionModeShareDrawable'.
Error:(36, 21) No resource found that matches the given name: attr 'android:actionModeShareDrawable'.
Error:(36, 21) No resource found that matches the given name: attr 'android:actionModeShareDrawable'.
Error:(36, 21) No resource found that matches the given name: attr 'android:actionModeShareDrawable'.

我该怎么修复这个问题?


1
我在Eclipse中遇到了这个问题。我有超过100个错误,因为我的SDK构建工具没有更新到rev 21。现在出现了不同的错误,所以我需要去查看这些错误。 - RED_
今天我卸载并重新安装了Extras/Android Support Library(版本21.0.2),注意到它的project.properties仍然错误地指向target=android-19,这是问题的根源。应该是21,但它是一个生成的文件,不能手动编辑。请参见已接受的答案以获取解决方法。 - JulianSymes
无法解析符号'android:Theme.Material.Light',位于android studio中valules-v21的<style name="AppBaseTheme" parent="android:Theme.Material.Light"></style>。 - Pankaj Nimgade
@PankajNimgade 我不明白... 你需要帮助吗? - RED_
@RED_,是的,我非常需要帮助,请问在我的电脑上,我无法检测到任何与 Material Theme 或以 android 开头的值相关的内容在 values-v21\styles 文件中,请您帮个忙。 - Pankaj Nimgade
@PankajNimgade 你应该在 Stack Overflow 上搜索或者提出一个新的问题。 - RED_
14个回答

598

虽然loeschg的答案是完全正确的,但我想详细阐述一下,并为所有IDE(Eclipse、IntellJ和Android Studio)提供一个解决方案,即使错误略有不同。


先决条件

确保您已通过SDK-Manager下载了最新的extrasAndroid 5.0 SDK

Picture of the SDK Manager


Android Studio

打开您的应用程序模块的build.gradlebuild.gradle.kts文件,并将您的compileSdkVersion更改为21。基本上不需要将targetSdkVersion SDK版本更改为21,但建议这样做,因为您应始终针对最新的Android Build-Version进行目标设置
最终 gradle 文件将如下所示:

android {
    compileSdkVersion(21)
    // ...

    defaultConfig {
        // ...
        targetSdkVersion(21)
    }
}

请务必在此之后同步您的项目。

Android Studio Gradle Sync reminder


Eclipse

在Eclipse中使用v7-appcompat时,您必须将其作为库项目使用。仅将*.jar文件复制到您的/libs文件夹中是不够的。请阅读developer.android.com上的这个 (点击) 分步教程,以了解如何正确导入项目。

项目导入后,您会发现/res文件夹中的某些文件夹因以下错误而被红色下划线标记:

Errors in Eclipse

error: Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material'.
error: Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Material.*'
error: Error: No resource found that matches the given name: attr 'android:actionModeShareDrawable'.

解决方案

您需要做的唯一一件事就是打开 android-support-v7-appcompatproject.properties 文件,将目标从 target=android-19 更改为 target=android-21
然后只需执行 Project --> Clean... 即可使更改生效。


IntelliJ IDEA(不使用 Gradle)

与 Eclipse 类似,仅使用 android-support-v7-appcompat.jar 是不够的; 您必须将 appcompat 作为模块导入。 在此StackO-Post (点击)中了解更多信息。
(注意: 如果您仅使用.jar,则会在运行时遇到NoClassDefFoundErrors)

当您尝试构建项目时,您将在 res/values-v** 文件夹中遇到问题。您的消息窗口将显示类似以下内容:

Error:android-apt-compiler: [appcompat]  resource found that matches the given name: attr 'android:colorPrimary'.
Error:(75, -1) android-apt-compiler: [appcompat] C:\[Your Path]\sdk\extras\android\support\v7\appcompat\res\values-v21\styles_base.xml:75: error: Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Material.ActionButton'.
// and so on

解决方法

右键点击 appcompat 模块 --> 打开模块设置 (F4) --> [依赖项标签] 从下拉菜单中选择 Android API 21 平台 --> 应用

选择 API 21 平台

然后重新构建项目 (Build --> Rebuild Project) 即可。


2
在将目标从target=android-19更改为target=android-21后,我在Eclipse中也遇到了相同的问题,在value文件夹上也出现了错误。 - prabhakaran
1
当我在Eclipse中将AppCompat更改为5.0时,它不再构建,并且.bin文件夹为空。 - Clive Jefferies
1
太棒了,真的我过去两天一直在苦苦挣扎,但是你的技巧将Android-19更改为21确实起作用了。谢谢啊兄弟。 - Mukesh Garg
1
使用Eclipse,我必须将所有使用appcompat库的项目的目标更新为21,而不仅仅是在appcompat项目本身上进行更新。 - Bianca Daniciuc
1
我目前正在与Eclipse / Android中提到的先前问题作斗争。这真的是一堆不可靠的难以理解的废话。 - AndyUK
显示剩余6条评论

124

这可能是因为您在build.gradle文件中没有将compileSdkVersion设置为21。您还可能想将targetSdkVersion更改为21。

android {
    //...
    compileSdkVersion 21

    defaultConfig {
        targetSdkVersion 21
    }
    //...
}

开始之前,您需要下载最新的SDK更新。

Android Studio SDK Manager

一旦您已经下载了所有更新(不要忘记也更新Android Support Library/Repository!),并且更新了您的compileSdkVersion,重新同步Gradle项目。

编辑:适用于Eclipse或通用IntelliJ用户

请参阅reVerse的答案,他有一个非常详细的步骤说明!


2
这是正确的答案。升级到21需要这个,新的appcompat依赖项,并且您需要下载play服务的rev 12版本。 - sbaar
1
请确保运行JDK 7。 - Chad Bingham
1
虽然仍然正确,但请参考@reVerse的解决方案。它更全面 :) - loeschg
我既没有使用IDE也没有使用Gradle...如果我使用Ant和记事本,会有类似的情况吗? - Valen

22

请按以下步骤操作:

这对我行得通。为了解决这个问题,

1.右键单击appcompat_v7图书馆,选择属性

2.现在,点击Android选项, 将项目构建路径设置为Android 5.0(API级别21) 应用更改。

3.现在转到appcompat_v7库下的project.properties文件,

4.将项目目标设置为:target=android-21

5.现在清理+构建appcompat_v7图书馆和您的项目`


1
我使用了您的方法,在项目和库中设置了android-21目标,然后清理了两者并完成了...谢谢。 - Md Mohsin
1
你可以在哪里找到appcompat_v7库? - SleepNot
2
你可以在以下路径中找到appcompat_v7库:adt-bundle-windows-x86_64\sdk\extras\android\support\v7。 - madhu527
这个答案与loeschg上面的答案结合起来解决了在Eclipse中的这个问题。 - Michael Todd

12

如果您不想将API 21作为目标API,请使用属于API 19的较旧版本,因此您不想使用Material主题。

compile "com.android.support:appcompat-v7:19.0.+"

这也有助于解决您的问题,它仅取决于您想要实现什么。


我同意你的观点。毕竟,并不是每个人都计划将SDK定位在21。 - peacepassion

9

我遇到了play-services:5.0.89的问题,升级到6.1.11后问题得到解决。


8
在Android Studio中,我试图将compileSdkVersiontargetSdkVersion设置为19
我的解决方案是替换在build.gradle底部的代码,将它改为如下形式:从这里开始
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
}

针对较旧版本的appcompat库:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:19.+'
}

我之前使用的是最新版本的AppCompact,但现在我想降级到早期版本,但是我在exploded-arr文件夹中遇到了这个错误。 - Antwan

3
我在我的工作空间中添加了另一个项目,并试图在清单文件中引用该项目的活动,但是我遇到了这个错误。问题在于我引用库的方式不正确。这就是我解决问题的方法:
  • 右键单击项目
  • 选择属性
  • 点击左侧菜单上的Android
  • 点击添加
  • 请选择一个库项目
Android Dependencies文件夹中放入了jar文件,问题得到了解决。

我执行了你的序列。然后在Android控制台中出现了“Jar不匹配!修复依赖项”,因为libs/中的jar和依赖的appcompat和google play服务库项目中的jar不匹配(具有不匹配的SHA-1和jar文件长度)。尽管遇到困难,但我认为这是一次成功。 - Eugene Gr. Philippov

2
当我将编译SDK版本从API 21更改为API 16时,遇到了相同的错误。问题出在 appcompat 版本上。如果您需要使用旧版本的Android API,则必须同时更改此 appcompat 版本。在我的情况下(适用于API 16),我必须使用 appcompat-v7:19.+

因此,我将 build.gradle 中的依赖项替换如下:
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:19.+'
}

请确保您的SDK上安装了旧版的appcompat版本。enter image description here


2
升级到最新的Gradle插件解决了我的问题:
classpath 'com.android.tools.build:gradle:0.13.+'

0.14.0 最近不久前已经发布了。 - loeschg
是的,我仍在使用0.12版本...也许它可以帮助其他人升级到0.13或0.14。 - avianey

2

请确保在Android Studio(或Eclipse)中清理您的项目,

这应该可以解决您的问题。


2
在这种情况下,清理项目并不能解决问题,特别是当你刚刚下载了新的Android SDK、appcompat库等时,因为错误不会自动消除,除非找到其他Android库和/或资源的缺失链接。对于那些不知道如何自行解决最新的Android API级别21下载问题的人来说,ReVerse的答案是正确且最详尽的。 - ChuongPham

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