检索父项时出错:升级到AppCompat v23后,找不到与给定名称匹配的资源


780

我一直使用Eclipse对Android进行编程,并决定开始迁移到Android Studio。我决定使用与Eclipse相同的SDK,然后:

  • 开始一个新项目
  • 设置最低SDK 4.0(API级别14)
  • 选择空白活动选项
  • 活动名称和布局名称使用的默认名称
  • 击中完成

几秒钟后,Gradle完成了构建,并且在文件Teste4 \ app \ build \ intermediates / exploded-aar \ com.android.support \ appcompat-v7 \ 23.0.0 \ res \ values中,以下消息引发了两个错误-v23 \ values-v23.xml:

错误:(2)检索项目的父项时出错:未找到与给定名称“ android:TextAppearance.Material.Widget.Button.Inverse”匹配的资源。

错误:(2)检索项目的父项时出错:未找到与给定名称'android:Widget.Material.Button.Colored'相匹配的资源。

文件->项目结构->模块:应用程序(左列)->属性标签下,我设置了以下版本:

  • “编译SDK版本”:Android 5.1(API级别22)
  • “构建工具版本”:23.0.2

为了解决这个问题我该怎么办?

我已经尝试过在堆栈溢出问题appcompat-v7:21.0.0'中建议的内容:没有找到与给定名称匹配的资源:attr'android:actionModeShareDrawable',但是没有用。

Answers:


1147

您的编译SDK版本必须与支持库的主要版本匹配。

由于您使用的是支持库的版本23,因此需要针对Android SDK的版本23进行编译。

或者,您可以通过切换到最新的支持库v22继续针对Android SDK版本22进行编译。


10
您可以在中手动更改它build.gradle,也可以通过打开项目属性并转到“依赖项”选项卡来使用GUI。
布赖恩·赫伯斯特

11
这个问题和答案与您的应用将在哪个版本上运行无关。面向22的应用程序可以在运行23的设备上正常运行。这里描述的问题是,支持库版本23要求您以23为目标,因为支持库引用了23 SDK中的某些API。
布赖恩·赫伯斯特

42
对于像我这样刚接触Android Studio并对于如何“通过打开项目属性使用GUI”感到困惑的人,在我的Android Studio(v1.3.1)中,转到“文件”,“项目结构”,然后在左侧底部的手动窗格是“模块”(在我的情况下称为“ app”)下的一项。我单击它,然后看到“依赖关系”选项卡。
布赖恩

119
我仍然不敢相信Android Studio甚至在没有测试基本功能的情况下就发布东西!至少发出一些有意义的警告!!
2015年

30
GUI应该弹出一条消息“我们检测到您没有针对正确的Android API版本。要我修复它吗?”。相反,我必须停止在飞机上工作,等到可以搜索stackoverflow。
某处某人2015年

137

发生这种情况是因为更新后,Android Studio 默认使用API版本23

以下为我工作:

Ctrl+ Shift+ Alt+ S进入项目结构页面。转到“属性”选项卡,然后在构建工具区域中将23.0.0更改为22.0.1(或与之前使用的等效),然后重新构建项目。

如果那不起作用,请转到gradle:app然后

compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.1'

编辑V7:23.0.022.2.1:V7如上所示和同步的gradle。这肯定会工作。


10
对于像我这样的新手,他们对于如何“转到gradele:app然后编译fileTree(dir:'libs',include:['* .jar'])感到困惑” compil'com.android.support:appcompat-v7:22.2 .1'“,在我的Android Studio(版本1.3.1)中,在项目窗格(通过单击最左侧的1:Project标签打开)中,我在Gradle脚本下看到两个名为“ build.gradle”的条目。第二个旁边有(Module:app)。我双击将其打开。然后,在底部的“依赖项”部分中,将v7:23.0.0更改为v7:22.2.1。我保存了(并按照Studio的提示进行了同步)-似乎可以编译了。
布赖恩

4
如何进入MAC上的项目结构页面?
rosu alin

4
@Sourav即使在完成这些更改后,错误也无法解决。我仍然在v23/values-23.xml文件中有这些错误。我更改了项目结构页面中的值,重新构建了应用程序。但仍面临问题:(
Prabs

在Mac上,快捷方式是⌘+; 。或者,您可以转到文件>项目结构。
Tomanow '16

115

更新Android Studio时,默认情况下会使用API​​版本23,这是其出现的主要原因。所以,

首先,在build.gradle(Module:app)中检查您的AppCompat版本,即

在此处输入图片说明

如果更改为23后出现错误,则只需下载

Compile Sdk Version to API 23, and Build Tools Version to 23.0.0

从SDK Manager。如果已经下载,则:

1. Go to SDK Manager and
2. Under Project Structure, change *Compile SDK Version* to API 23, and *Build Tools Version* to 23.0.0

单击SDK Manager按钮,然后打开对话框。

在此处输入图片说明

单击SDK平台,然后检查是否下载了Android 6.0。

如果不是,请先下载该文件。下载完成后,点击Apply

在此处输入图片说明

现在,您需要通过设置将更改应用于项目。然后按Ctrl+ Alt+ Shift+S打开设置

  1. 从列表中单击应用。
  2. 点击属性
  3. 将您的Compile SDK版本更改为API 23
  4. 构建工具版本更改为23.0.0

在此处输入图片说明

不要忘记重建您的项目。

这样您的错误就会消失。


1
我理解您定义解决方案的方式,但是请尝试使用完整的描述来描述您的帖子
Naveed Ahmad

1
@NaveedAhmad好的,我要编辑我的帖子。谢谢你的建议。
Ravikant Paudel

1
我添加了与上述问题相关的帖子stackoverflow.com/a/32370099/2915785
Naveed Ahmad

1
嘿,请添加相同的appcompat版本,它解决了我的问题
vuhung3990,2015年

2
在这种情况下,屏幕截图有助于像我这样的傻瓜。
ern0

70

如果您尝试将目标更改为以前的GooglePlayServices或AppCompatv7版本,但无法正常工作,请检查您是否具有任何项目库依赖项,该项目的目标是这些库中任何一个的最新版本。Google Maps Utils Library项目发生在我身上:

更换:

compile 'com.google.android.gms:play-services:+'

compile 'com.google.android.gms:play-services:8.3.0'

然后,您可以继续完整定位API 22

如果仍然无法编译,有时将compileSdkVersion API设置为23并将targetSdkVersion设置为22很有用。


35

我同意先前的回答。您的编译SDK版本必须与支持库匹配。这是我所做的。

  1. 您可以转到SDK Manager,然后在SDK Platform下安装具有API级别23的Android5.X。
  2. 在“项目结构”下,将“编译SDK版本”更改为API 23,将“构建工具版本”更改为23.0.0。

然后它应该没有问题地构建。


22

您需要将compileSdkVersion设置为23。

由于API 23的Android删除过时的Apache HTTP包,所以如果你使用他们的服务器的请求,就需要添加useLibrary 'org.apache.http.legacy'build.gradle在这个环节中指出:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"
    ...

    //only if you use Apache packages
    useLibrary 'org.apache.http.legacy'
}

15

出现此问题是因为现在编译SDK版本必须与Android支持库的主要版本匹配。

就我而言,我的Android Support Library版本为23,因此必须针对进行编译Android SDK version 23,并且必须在build.gradle文件中进行更改:

在此处输入图片说明

你们当中有些人需要安装SDK, Android 6.0 (API 23)

在此处输入图片说明

并且不要忘记用gradle文件同步项目


12
android {
    compileSdkVersion 23
    buildToolsVersion '23.0.1'

defaultConfig {
    applicationId ""
    minSdkVersion 14
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.google.code.gson:gson:2.3.1'
compile 'com.android.support:recyclerview-v7:23.0.0'
compile 'com.android.support:appcompat-v7:23.0.1'
}

9

我找到了解决方案,当我更新sdk时问题就开始了,之后我使用了不同的buildToolsVersion('22 .0.1'), 并且使用了不同的支持库,例如compile'c​​om.android.support:appcompat-v7:23.0.0 ',在下图中显示您

在此处输入图片说明

这引起了“ android.widget.Material ...”的问题,然后我使用了相同版本的支持库,例如 编译'com.android.support:appcompat-v7:22.0.1'及其完成。(在下面的屏幕截图中向您显示)

在此处输入图片说明


9

您应该使用最新版本编译项目,以便从SDK更新和安装。与sync project with Gradle fileButton 同步您的项目。
您也可以继续使用现有版本,但是请检查它是否已正确安装,如下图所示,指示API 22已正确安装。在此处输入图片说明

并根据需要同步您的项目。

在此处输入图片说明

它可能会有所帮助。


8

如Tanis.7x所指出,支持库版本(23)与targetSdkVersion(22)不匹配

您可以通过以下操作解决此问题:

build.grade您的应用模块文件中,更改以下代码行

compile 'com.android.support:appcompat-v7:23.0.0'

compile 'com.android.support:appcompat-v7:22.+'

这将使用与SdkVersion 22兼容的appcompat版本的最新版本。


7

您的编译SDK版本必须与支持库主版本匹配。这是解决您的问题的方法。您可以在Gradle脚本build.gradle文件中轻松检查它。Fx:如果您compileSdkVersion23岁,则编译库必须从23开始。

  compileSdkVersion 23
    buildToolsVersion "23.0.0"
    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 340
        versionName "3.4.0"
    }
dependencies {
    compile 'com.android.support:appcompat-v7:23.1.0'
    compile 'com.android.support:recyclerview-v7:23.0.1'
}

并始终检查您的Android Studoi是否具有受支持的API级别。您可以在Android SDK中进行检查,如下所示: 在此处输入图片说明


6

就我而言,它是Google Play服务的更高版本。我将它们设置为7.0.0(不是8.x),一切正常。


5

我想从API 23降级到22,并收到此错误。我必须更改项目中的所有 build.gradle文件才能进行编译。

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "com.yourapp.app"
        minSdkVersion 14
        targetSdkVersion 22
    }
...
dependencies {
    compile 'com.android.support:appcompat-v7:22.2.1'
    compile 'com.android.support:support-v4:22.2.1'
    compile 'com.android.support:design:22.2.1'
    compile 'com.google.android.gms:play-services-gcm:10.0.1'
}

4

这就是帮助我的原因:添加特定的android平台

应该做的是以下事情……就我而言,这cordovaionicphonegap以及其他类似框架有关:

  1. 列出为您的项目安装的所有平台:cordova platform list。您会看到以下内容:

在此处输入图片说明

  1. 删除android平台:cordova platform remove android

  2. 然后添加特定的android平台:cordova platform add android@5.0.0

祝好运!:)


3

我遇到了同样的问题。我通过将每个子模块的gradle.build更新为最新的编译器版本解决了我的问题。



1

另一个解决方案:导航到

\sdk\extras\android\m2repository\com\android\support\appcompat-v7\23.x.x

.aar使用7-zip或winrar 打开文件,在res文件夹中删除values-23文件夹并保存更改。


1

在模块上:app(Gradle)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.namepack.nameappxxxxx"
        minSdkVersion 16
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

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

项目:nameAppXXXX(Gradle)

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'

    }
}

allprojects {
    repositories {
        jcenter()
    }
}

并将您的AppCompatActivity活动编辑为例如Activity:

package com.namepack.nameappxxxxx;


import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;

public class NameClass extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
    }


}


1

升级Android Studio。

我在Android Studio 1.3.1上遇到了这个问题,其他答案都对我不起作用,但是更新到1.5.1之后就没有问题。


1

如果您正在使用phonegap(跨平台)并在上面遇到同样的问题,只需使用以下命令删除android平台。

phonegap平台删除android

并再次添加。

phonegap平台添加android

然后问题为我解决了。


0

正如其他人已经提到的,您compile sdk version必须匹配您的support library's主要版本。但是,这也与subprojects您是否有任何需求有关。

如果需要,可以subprojects使用以下脚本设置编译sdk版本:

subprojects { subproject ->
afterEvaluate{
    if((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library'))) {
        android {
            compileSdkVersion rootProject.ext.compileSdkVersion
            buildToolsVersion rootProject.ext.buildToolsVersion
        }
      }
   }
}

将此脚本添加到您的根build.gradle文件中。


-1

如果即使下载最新的SDK和Android Studio后仍然遇到错误,请执行以下操作:

  1. 下载最新的SDK
  2. 打开文件-项目结构(Ctrl+ Alt+ Shift+ S
  3. 在模块中,选择应用
  4. 在属性选项卡中:将编译SDK版本更改为API 23 Android 6.0棉花糖(最新)

我希望这能对某人有所帮助,以使他不会再遭受这几天的痛苦。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.