【问题标题】:Error retrieving parent for item: No resource found that matches the given name after upgrading to AppCompat v23检索项目的父项时出错:升级到 AppCompat v23 后未找到与给定名称匹配的资源
【发布时间】:2018-03-15 06:22:24
【问题描述】:

我一直使用 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”匹配的资源。

文件->项目结构->模块:app(左栏)->属性选项卡下,我设置了以下版本:

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

我应该怎么做才能解决这个问题?

我已经尝试过 Stack Overflow 问题 appcompat-v7:21.0.0': No resource found that matches the given name: attr 'android:actionModeShareDrawable' 中的建议,但没有奏效。

【问题讨论】:

    标签: android android-studio gradle


    【解决方案1】:

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

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

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

    【讨论】:

    • 您可以在 build.gradle 中手动更改它,也可以通过打开项目属性并转到“依赖项”选项卡来使用 GUI。
    • 这个问题和答案与你的应用运行的版本无关。以 22 为目标的应用可以在运行 23 的设备上正常运行。这里描述的问题是支持库版本 23 要求您以 23 为目标,因为支持库引用了 23 SDK 中的一些 API。
    • 对于像我这样刚接触 Android Studio 并且对如何“通过打开项目属性使用 GUI”感到困惑的人,在我的 Android Studio (v1.3.1) 中,我转到文件,项目结构,然后在底部的左侧窗格中是模块下的条目(在我的情况下称为“应用程序”)。我点击它,然后我看到一个 Dependencies 选项卡。
    • 我仍然无法相信 Android Studio 发布的东西甚至没有测试这么基本的东西!至少提出一些有意义的警告!
    • GUI 应该会弹出一条消息“我们检测到您没有针对正确的 Android API 版本。需要我修复它吗?”。相反,我必须停止在飞机上工作,等到可以搜索 stackoverflow。
    【解决方案2】:

    这是因为更新后 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.0v7:22.2.1 并同步 gradle。这肯定会奏效。

    【讨论】:

    • 对于像我这样对如何“转到gradele:app 然后编译fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android 感到困惑的新手.support:appcompat-v7:22.2.1'",在我的 Android Studio(版本 1.3.1)中,在项目窗格中(我通过单击最左侧的 1:项目选项卡打开),我在下面看到两个条目Gradle 脚本称为“build.gradle”。第二个旁边有(模块:应用程序)。我双击它打开它。然后在底部的依赖项部分,我将 v7:23.0.0 更改为 v7:22.2.1。我保存了(并按照 Studio 的提示进行了同步) - 似乎可以编译。
    • 如何在MAC上进入项目结构页面?
    • @Sourav 即使在进行了这些更改之后,错误仍未解决。我仍然在v23/values-23.xml 文件中有这些错误。我已经更改了项目结构页面中的值,重建应用程序。但仍然面临这个问题:(
    • Mac 上的快捷键是 ⌘ + ; .或者,您可以转到文件 > 项目结构。
    【解决方案3】:

    当您更新 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 管理器。如果已经下载,则:

    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 管理器按钮并打开对话框。

    点击SDK Platform,查看是否下载了Android 6.0。

    如果没有,请先下载。下载完成后,点击应用

    现在您需要将更改从设置应用到您的项目。 然后按Ctrl + Alt + Shift + S打开设置

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

    别忘了重建你的项目。

    那么你的错误就会消失。

    【讨论】:

    • 我理解您定义解决方案的方式,但请尝试用完整的描述来描述您的帖子
    • @NaveedAhmad 好的,我要编辑我的帖子。谢谢你的建议。
    • 我添加了与上述问题相关的帖子stackoverflow.com/a/32370099/2915785
    • 嘿,请添加相同的 appcompat 版本,它解决了我的问题
    • 在这种情况下,屏幕截图可以帮助像我这样的傻瓜。
    【解决方案4】:

    如果您尝试将目标更改为以前的 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 很有用。

    【讨论】:

      【解决方案5】:

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

      1. 您可以进入 SDK Manager 并在 SDK Platform 下安装 API 级别 23 的 Android 5.X。
      2. 在项目结构下,将编译 SDK 版本更改为 API 23,并将构建工具版本更改为 23.0.0

      那么它应该毫无问题地构建。

      【讨论】:

        【解决方案6】:

        您需要将 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'
        }
        

        【讨论】:

          【解决方案7】:

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

          在我的情况下,我有 Android Support Library 版本 23,所以我必须针对 Android SDK version 23 进行编译,并且我必须在我的 build.gradle 文件中进行更改:

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

          别忘了将项目与 gradle 文件同步

          【讨论】:

            【解决方案8】:
            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') 并且我使用了不同的 support 库,例如编译'com.android.support:appcompat-v7:23.0.0',如下图所示

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

              【讨论】:

                【解决方案10】:

                您应该使用最新版本编译您的项目,以便从您的 SDK 更新和安装。使用sync project with Gradle file Button 同步您的项目。
                您也可以继续使用现有版本,但请检查它是否已正确安装,下图指示 API 22 已正确安装。

                并在需要时同步您的项目。

                它可能会有所帮助。

                【讨论】:

                  【解决方案11】:

                  正如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 版本。

                  【讨论】:

                    【解决方案12】:

                    您的编译 SDK 版本必须与支持库的主要版本匹配。这是您的问题的解决方案。您可以在 build.gradle 文件中的 Gradle 脚本中轻松检查它。 Fx:如果你的compileSdkVersion 是 23,你的编译库必须从 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 中检查它,如下所示:

                    【讨论】:

                      【解决方案13】:

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

                      【讨论】:

                        【解决方案14】:

                        我想从 API 23 降级到 22 并收到此错误。我必须更改项目中的 all 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'
                        }
                        

                        【讨论】:

                          【解决方案15】:

                          这对我有帮助:Adding specific android platform

                          应该做的如下...在我的例子中是cordova,但同样适用于ionicphonegap和其他类似的框架:

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

                          1. 移除安卓平台:cordova platform remove android

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

                          祝你好运! :)

                          【讨论】:

                            【解决方案16】:

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

                            【讨论】:

                              【解决方案17】:

                              另一种解决方案: 导航到

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

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

                              【讨论】:

                                【解决方案18】:

                                在模块上:应用程序(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'
                                }
                                

                                项目:名称AppXXXX(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);
                                    }
                                
                                
                                }
                                

                                【讨论】:

                                  【解决方案19】:

                                  一切都很好,但你们都没有解释在哪里下载 SDK 构建工具

                                  【讨论】:

                                    【解决方案20】:

                                    确保所有这些都是最新的。

                                    【讨论】:

                                      【解决方案21】:

                                      升级 Android Studio。

                                      我在使用 Android Studio 1.3.1 时遇到了这个问题,并且没有其他答案对我有用,但是在更新到 1.5.1 之后就没有问题了。

                                      【讨论】:

                                        【解决方案22】:

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

                                        phonegap 平台移除安卓

                                        然后再添加一次。

                                        phonegap平台添加android

                                        然后问题为我解决了。

                                        【讨论】:

                                          【解决方案23】:

                                          如果您在下载最新的 SDK 和 Android Studio 后仍然出现错误,我就是这样做的:

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

                                          我希望它可以帮助某人,这样他就不会像我这几天那样受苦。

                                          【讨论】:

                                            【解决方案24】:

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

                                            如果你这样做了,你可以使用以下脚本设置你的subprojects compile 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 文件中。

                                            【讨论】:

                                              猜你喜欢
                                              • 2017-12-27
                                              • 1970-01-01
                                              • 1970-01-01
                                              • 2017-08-09
                                              相关资源
                                              最近更新 更多