Ошибка при получении родительского элемента: не найден ресурс, который соответствует указанному имени после обновления до AppCompat v23


780

Я всегда программировал Android с помощью Eclipse и решил начать переход на Android Studio . Я решил использовать тот же SDK, который у меня уже был для Eclipse, тогда:

  • Начал новый проект
  • Установить минимальный SDK 4.0 (уровень API 14)
  • Выберите опцию «Пустое действие»
  • Используемые имена по умолчанию для названия деятельности и имени макета
  • Хит Готово

Через несколько секунд Gradle завершает сборку и выдает мне две ошибки со следующими сообщениями в файле Teste4 \ app \ build \ промежуточные / exploded-aar \ com.android.support \ appcompat-v7 \ 23.0.0 \ res \ values -v23 \ значения-v23.xml:

Ошибка: (2) Ошибка получения родителя для элемента: не найден ресурс, который соответствует указанному имени 'android: TextAppearance.Material.Widget.Button.Inverse'.

Ошибка: (2) Ошибка получения родителя для элемента: не найден ресурс, который соответствует указанному имени 'android: Widget.Material.Button.Colored'.

Под Файл -> Структура проекта -> Модули: приложение (левый столбец) -> вкладка Свойства , у меня установлены следующие версии:

  • «Compile Sdk Version»: Android 5.1 (уровень API 22)
  • «Версия инструментов сборки»: 23.0.2

Что я должен сделать, чтобы это исправить?

Я уже попробовал то, что было предложено в вопросе переполнения стека appcompat-v7: 21.0.0 ': не найдено ни одного ресурса, соответствующего имени: attr' android: actionModeShareDrawable ' , но это не сработало.

Ответы:


1147

Ваша версия SDK для компиляции должна соответствовать основной версии библиотеки поддержки.

Поскольку вы используете 23 версию библиотеки поддержки, вам нужно скомпилировать версию 23 SDK Android.

В качестве альтернативы вы можете продолжить компиляцию для версии 22 Android SDK, переключившись на последнюю версию библиотеки поддержки v22.


10
Вы можете либо изменить его вручную в своем build.gradle, либо использовать графический интерфейс, открыв свойства проекта и перейдя на вкладку «зависимости».
Брайан Хербст

11
Этот вопрос и ответ не имеют никакого отношения к тому, на какой версии будет работать ваше приложение. Приложение с таргетингом 22 может нормально работать на устройстве, работающем 23. Проблема, описанная здесь, заключается в том, что для библиотеки 23 версии поддержки требуется целевой уровень 23, поскольку библиотека поддержки ссылается на некоторые API в 23 SDK.
Брайан Хербст

42
Для тех, кто, как я, новичок в Android Studio и не понимает, как «использовать графический интерфейс, открывая свойства проекта», в моей Android Studio (v1.3.1) я выбираю «Файл», «Структура проекта», затем слева Панель «Вниз» - это раздел «Модули» (в моем случае это «приложение»). Я нажимаю на это, и затем я вижу вкладку Зависимости.
Брайан

119
Я до сих пор не могу поверить, что Android Studio выпускает вещи, даже не тестируя что-то ТАКОЕ базовое !! По крайней мере, положить некоторые значимые предупреждения!
Джош

30
В графическом интерфейсе должно было появиться сообщение «мы обнаружили, что вы не выбрали нужную версию Android API. Хотите, чтобы я это исправил?». Вместо этого я должен прекратить работу над самолетом и подождать, пока не смогу искать переполнение стека.
Кто-то где-то

137

Это происходит потому, что после обновлений Android Studio по умолчанию использует API версии 23 .

Следующее работало для меня:

Нажмите Ctrl+ Shift+ Alt+, Sчтобы перейти на страницу структуры проекта. Перейдите на вкладку свойств и измените 23.0.0 на 22.0.1 (или эквивалентно тому, что вы использовали ранее) в области инструментов сборки и перестройте свой проект.

Если это не сработает, перейдите в Gradle: приложение, а затем

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

Отредактируйте v7: 23.0.0 до v7: 22.2.1, как показано выше, и синхронизируйте gradle. Это определенно будет работать.


10
Для новичков, таких как я, которые не знают, как "перейти к gradele: app и затем скомпилировать fileTree (dir: 'libs', включая: ['* .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. Я сохранил (и синхронизировал как подсказано Студией) - вроде компилировался нормально.
Брайан

4
Как я могу зайти на страницу структуры проекта на MAC?
Роз Алин

4
@Sourav Даже после внесения этих изменений ошибка не устранена. Тем не менее у меня есть эти ошибки в v23/values-23.xmlфайле. Я изменил значения на странице структуры проекта, перестройте приложение. Но все еще сталкиваюсь с проблемой :(
Prabs

На Mac это ярлык ⌘ +; , В качестве альтернативы вы можете перейти в Файл> Структура проекта.
Tomanow

115

При обновлении Android Studio он по умолчанию использует API версии 23, что является основной причиной его появления. Так,

Сначала проверьте версию вашего AppCompat в build.gradle (Модуль: приложение)

Введите описание изображения здесь

Если после изменения на 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 Manager и откройте диалоговое окно.

Введите описание изображения здесь

Нажмите SDK Platform и проверьте, загружен ли Android 6.0 или нет.

если нет, то загрузите это сначала. После завершения загрузки нажмите Apply.

Введите описание изображения здесь

Теперь вам нужно применить изменения к вашему проекту из настроек. Затем нажмите Ctrl+ Alt+ Shift+,S чтобы открыть настройки

  1. Нажмите приложение из списка.
  2. Нажмите свойства
  3. Измените свою версию SDK для Compile на API 23
  4. Измените версию инструментов сборки на 23.0.0

Введите описание изображения здесь

Не забудьте перестроить свой проект.

Тогда ваша ошибка исчезнет.


1
Я понял ваш способ определения решения, но попробуйте описать ваш пост с полным описанием
Навид Ахмад

1
@NaveedAhmad Хорошо, я собираюсь редактировать свой пост. Спасибо за ваше предложение.
Равикант Паудель

1
Я добавил пост, связанный с вышеупомянутой проблемой stackoverflow.com/a/32370099/2915785
Naveed Ahmad

1
эй, пожалуйста, добавьте ту же версию appcompat, это решило мою проблему
vuhung3990

2
В таких случаях скриншоты помогают таким чайникам, как я.
ern0

70

Если вы пытались изменить цель на предыдущую версию GooglePlayServices или AppCompatv7, и она не работает, проверьте, есть ли у вас зависимость от библиотек проектов, этот проект будет ориентирован на последнюю версию любой из этих библиотек. Это случилось со мной в проекте библиотеки Google Maps Utils:

заменить:

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

в

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

Затем вы можете продолжить полный таргетинг API 22

Если он по-прежнему не компилируется, иногда полезно установить API-интерфейс compileSdkVersion равным 23, а targetSdkVersion - 22.


35

Я согласен с предыдущим ответом. Ваша версия SDK для компиляции должна соответствовать библиотеке поддержки. Вот что я сделал.

  1. Вы можете перейти в SDK Manager и в разделе SDK Platform установить Android 5.X с уровнем API 23.
  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' com.android.support:appcompat-v7:23.0.0 ' , показывая вам на изображении ниже

введите описание изображения здесь

Это поднимало проблему « android.widget.Material ...» Затем я использовал ту же версию для библиотеки поддержки, как compile 'com.android.support:appcompat-v7:22.0.1' и его DONE. (Показывает вас на скриншоте ниже)

введите описание изображения здесь


9

Вы должны скомпилировать свой проект с последней версией, поэтому обновите и установите с вашего SDK. Синхронизируйте ваш проект с sync project with Gradle fileкнопкой.
Вы также можете продолжить работу с существующей версией, но убедитесь, что она установлена ​​правильно. Изображение ниже указывает на 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.+'

При этом будет использоваться последняя версия версии appcompat, совместимая с SdkVersion 22.


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

Что должно быть сделано следующее ... В моем случае это было , cordovaно то же самое имеет отношение к ionic, phonegapи другие структуры , подобные этим:

  1. список всех платформ , установленных для вашего проекта: cordova platform list. Вы увидите что-то вроде этого:

введите описание изображения здесь

  1. удалить андроид платформы: cordova platform remove android.

  2. затем добавить конкретную платформу андроид: 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

в модуле: приложение (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 marshmallow (последняя версия)

Надеюсь, это поможет кому-то, чтобы он не страдал так, как я, за эти пару дней.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.