Помилка під час отримання батьківського елемента: Не знайдено ресурсу, який би відповідав заданому імені після оновлення до AppCompat v23


780

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

  • Розпочали новий проект
  • Встановити мінімальний SDK 4.0 (рівень API 14)
  • Виберіть параметр "Пуста активність"
  • Використовувані за замовчуванням імена діяльності та ім'я макета
  • Хіт Фініш

Через кілька секунд Gradle закінчує збірку, і він видає мені дві помилки із наступними повідомленнями у файлі Teste4 \ app \ build \ intermediates / exploded-aar \ com.android.support \ appcompat-v7 \ 23.0.0 \ res \ значень -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

Що мені робити, щоб це виправити?

Я вже спробував те, що було запропоновано у питанні Stack Overflow appcompat-v7: 21.0.0 ': Не знайдено жодного ресурсу, який би відповідав заданому імені: attr' android: actionModeShareDravable ' , але це не спрацювало.

Відповіді:


1147

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

Оскільки ви використовуєте версію 23 бібліотеки підтримки, вам потрібно скласти версію 23 версії SDK для Android.

Ви також можете продовжити компілювати версію 22 SDK для Android, перейшовши на останню бібліотеку підтримки 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. Хочете, щоб виправити це?". Натомість я маю припинити роботу над літаком і чекати, поки я зможу шукати stackoverflow.
Хтось десь

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.0 до v7: 22.2.1, як показано вище, і синхронізуйте градуси. Це обов'язково спрацює.


10
Для новачків, таких як я, які плутаються з приводу того, як "перейти до 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) - здавалося, компілюю нормально.
Брайан

4
Як я можу зайти на сторінку структури проекту на MAC?
rosu alin

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

На mac ярлик - ⌘ +; . Можна також перейти до Файл> Структура проекту.
Томанов

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 і відкрийте діалогове вікно.

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

Клацніть Платформа SDK і перевірте, завантажено чи ні Android 6.0.

якщо ні, то завантажте це спочатку. Після завершення завантаження натисніть Apply.

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

Тепер вам потрібно застосувати зміни до вашого проекту з налаштування. Потім натисніть Ctrl+ Alt+ Shift+,S щоб відкрити налаштування

  1. Клацніть додаток зі списку.
  2. Клацніть властивості
  3. Змініть версію компіляції 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

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 і під платформу SDK встановити 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 ') і використовував різні бібліотеки підтримки, як компілювати' com.android.support:appcompat-v7:23.0.0 ' , показує вас на зображенні нижче

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

Це піднімало проблему " android.widget.Material ...". Тоді я використовував таку ж версію для бібліотеки підтримки, як компілювати "com.android.support:appcompat-v7:22.0.1" та її ДОБРО. (Показано на знімку екрана нижче)

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


9

Вам слід скласти проект із останньою версією, тому оновіть та встановіть зі свого SDK. Синхронізуйте свій проект із sync project with Gradle fileкнопкою.
Ви також можете продовжити існуючу версію, але перевірте, чи встановлена ​​вона належним чином нижче зображення, вказуйте на належний встановлений API 22.введіть тут опис зображення

І синхронізуйте ваш проект, якщо потрібно.

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

це може допомогти.


8

Як вказує Tanis.7x, версія бібліотеки підтримки (23) не відповідає цільовійSdkVersion (22)

Ви можете виправити це, зробивши наступне:

У build.gradeфайлі модуля програми змініть наступний рядок коду

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

До

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

Для цього буде використано останню версію програми appcompat, сумісну із SdkVersion 22.


7

Ваша версія SDK для компіляції повинна відповідати основній версії бібліотеки підтримки. Це рішення вашої проблеми. Ви можете легко перевірити це у build.gradleфайлі Gradle Scripts у файлі. 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. Ви можете перевірити це у своєму SDK для Android, наприклад: введіть тут опис зображення


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 для кожного підмодуля до останньої версії компілятора.


2

Все чудово, але ніхто з вас не пояснив, де можна завантажити інструменти збирання SDK

Все тонкіше, але ніхто з вас не пояснив, де можна завантажити інструменти для збирання SDK


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, наприклад, для діяльності:

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 зефір (остання)

Я сподіваюся, що це комусь допоможе, щоб він не страждав так, як я робив ці пару днів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.