Błąd podczas pobierania elementu nadrzędnego dla elementu: Nie znaleziono zasobu pasującego do podanej nazwy po aktualizacji do AppCompat v23

780

Zawsze programowałem Androida z Eclipse i postanowiłem rozpocząć migrację do Android Studio . Zdecydowałem się użyć tego samego zestawu SDK, który już miałem dla Eclipse, a następnie:

  • Rozpoczął nowy projekt
  • Ustaw minimum SDK 4.0 (API Level 14)
  • Wybierz opcję Puste działanie
  • Używane Domyślne nazwy dla Nazwa działania i Nazwa układu
  • Hit Finish

Po kilku sekundach Gradle kończy kompilację i generuje mi dwa błędy z następującymi komunikatami w pliku Teste4 \ app \ build \ intermediates / exploded-aar \ com.android.support \ appcompat-v7 \ 23.0.0 \ res \ values -v23 \ wartości-v23.xml:

Błąd: (2) Błąd podczas pobierania elementu nadrzędnego dla elementu: Nie znaleziono zasobu, który pasuje do podanej nazwy „android: TextAppearance.Material.Widget.Button.Inverse”.

Błąd: (2) Błąd podczas pobierania elementu nadrzędnego dla elementu: Nie znaleziono zasobu pasującego do podanej nazwy „android: Widget.Material.Button.Colored”.

W obszarze Plik -> Struktura projektu -> Moduły: aplikacja (lewa kolumna) -> karta Właściwości , skonfigurowałem następujące wersje:

  • „Kompiluj wersję SDK”: Android 5.1 (API poziom 22)
  • „Wersja narzędzi do budowania”: 23.0.2

Co powinienem zrobić, aby to naprawić?

Próbowałem już tego, co zostało zasugerowane w pytaniu Przepełnienie stosu appcompat-v7: 21.0.0 ': Nie znaleziono zasobu pasującego do podanej nazwy: attr' android: actionModeShareDrawable ' , ale to nie zadziałało.

Vini.g.fer
źródło

Odpowiedzi:

1147

Kompilowana wersja zestawu SDK musi być zgodna z główną wersją biblioteki obsługi.

Ponieważ używasz wersji 23 biblioteki obsługi, musisz dokonać kompilacji z wersją 23 zestawu SDK systemu Android.

Alternatywnie możesz kontynuować kompilację z wersją 22 zestawu SDK systemu Android, przechodząc do najnowszej biblioteki pomocy technicznej w wersji 22.

Bryan Herbst
źródło
10
Możesz albo zmienić go ręcznie w swoim build.gradle, albo możesz użyć GUI, otwierając właściwości projektu i przechodząc do zakładki „zależności”.
Bryan Herbst,
11
To pytanie i odpowiedź nie mają związku z wersją aplikacji. Aplikacja targetująca 22 może działać dobrze na urządzeniu z 23. Problemem opisanym tutaj jest to, że wersja 23 biblioteki wsparcia wymaga, abyś wybrał 23, ponieważ biblioteka obsługi odwołuje się do niektórych interfejsów API w 23 SDK.
Bryan Herbst
42
Dla tych, którzy są nowi w Android Studio i są zdezorientowani, jak „korzystać z GUI, otwierając właściwości projektu”, w moim Android Studio (v1.3.1), przechodzę do pliku, struktury projektu, a następnie po lewej -okienko na dole u dołu jest wpisem w modułach (w moim przypadku zwanym „app”). Klikam na to, a następnie widzę kartę Zależności.
Bryan
119
Nadal nie mogę uwierzyć, że Android Studio wydaje rzeczy bez testowania czegoś tak podstawowego !! Przynajmniej umieść jakieś znaczące ostrzeżenia !!
Josh
30
GUI powinien wyświetlić komunikat „wykryliśmy, że nie celujesz w odpowiednią wersję interfejsu API Androida. Chcesz, żebym to naprawił?”. Zamiast tego muszę przestać pracować w samolocie i poczekać, aż będę mógł przeszukać przepływ stosu.
Ktoś gdzieś
137

Dzieje się tak, ponieważ po aktualizacji Android Studio domyślnie używa interfejsu API w wersji 23 .

Dla mnie działało:

Naciśnij Ctrl+ Shift+ Alt+, Saby przejść do strony struktury projektu. Przejdź do zakładki właściwości i zmień 23.0.0 na 22.0.1 (lub odpowiednik tego, czego używałeś wcześniej) w obszarze narzędzia do budowania i przebuduj projekt.

Jeśli to nie zadziała, przejdź do gradle: app, a następnie

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

Edytuj wersję 7: 23.0.0 do wersji 7 : 22.2.1, jak pokazano powyżej, i zsynchronizuj stopień. To na pewno zadziała.

Sourav Nanda
źródło
10
Dla początkujących, takich jak ja, którzy są zdezorientowani, jak „przejść do gradele: app, a następnie skompilować fileTree (reż: 'libs', obejmują: ['* .jar']) skompilować 'com.android.support:appcompat-v7:22.2 .1 '”, w moim Android Studio (wersja 1.3.1), w okienku projektu (który otworzyłem, klikając kartę 1: Projekt po lewej stronie), widzę dwa wpisy w Skryptach stopniowania o nazwie„ build.gradle ” . Drugi ma obok (moduł: aplikacja). Kliknąłem go dwukrotnie, aby go otworzyć. Następnie w dolnej części sekcji zależności zmieniłem wersję 7: 23.0.0 na wersję 7: 22.2.1. Zapisałem (i zsynchronizowałem zgodnie z monitem Studio) - wydawało się, że kompiluję się dobrze.
Bryan
4
Jak mogę wejść na stronę struktury projektu na MAC?
rosu alin
4
@ Surve Nawet po wykonaniu tych zmian błąd nie został rozwiązany. Nadal mam te błędy w v23/values-23.xmlpliku. Zmieniłem wartości na stronie struktury projektu, przebuduj aplikację. Ale wciąż stoi problem :(
Prabs
Na Macu skrót to ⌘ +; . Alternatywnie możesz przejść do Plik> Struktura projektu.
Tomanow
115

Po zaktualizowaniu Android Studio domyślnie korzysta z interfejsu API w wersji 23, co jest główną przyczyną jego wystąpienia. Więc,

Najpierw sprawdź wersję AppCompat w build.gradle (Module: app) To znaczy,

Wpisz opis zdjęcia tutaj

Jeśli po zmianie na 23 wystąpi błąd, po prostu pobierz

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

z Menedżera SDK. Jeśli już pobrany, to:

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

Kliknij przycisk Menedżer SDK i otwórz okno dialogowe.

Wpisz opis zdjęcia tutaj

Kliknij Platforma SDK i sprawdź, czy Android 6.0 jest pobrany, czy nie.

jeśli nie, najpierw pobierz to. Po zakończeniu pobierania kliknij Apply.

Wpisz opis zdjęcia tutaj

Teraz musisz zastosować zmiany w projekcie od ustawienia. Następnie naciśnij Ctrl+ Alt+ Shift+,S aby otworzyć ustawienie

  1. Kliknij aplikację z listy.
  2. Kliknij właściwości
  3. Zmień wersję kompilacji zestawu SDK na API 23
  4. Zmień wersję Narzędzi do budowania na 23.0.0

Wpisz opis zdjęcia tutaj

Nie zapomnij odbudować swojego projektu.

Twój błąd zniknie.

Ravikant Paudel
źródło
1
Rozumiem twój sposób definiowania rozwiązania, ale spróbuj opisać swój post z pełnym opisem
Naveed Ahmad
1
@NaveedAhmad Ok zamierzam edytować mój post. Dzięki za Twoją sugestię .
Ravikant Paudel
1
Dodałem post związany z powyższym problemem stackoverflow.com/a/32370099/2915785
Naveed Ahmad
1
hej, dodaj tę samą wersję appcompat, to rozwiązało mój problem
vuhung3990
2
W takich przypadkach zrzuty ekranu pomagają takim manekinom jak ja.
ern0
70

Jeśli próbujesz zmienić cel na poprzednią wersję GooglePlayServices lub AppCompatv7 i to nie działa, sprawdź, czy masz zależność od bibliotek projektów, ten projekt będzie kierowany na najnowszą wersję którejkolwiek z tych bibliotek. Zdarzyło mi się to z projektem Google Maps Utils Library:

zastąpić:

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

do

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

Następnie możesz kontynuować pełne kierowanie API 22

Jeśli nadal się nie kompiluje, czasem warto ustawić API compileSdkVersion na 23, a targetSdkVersion na 22.

Pelanes
źródło
35

Zgadzam się z poprzednią odpowiedzią. Kompilowana wersja zestawu SDK musi być zgodna z biblioteką obsługi. Oto co zrobiłem.

  1. Możesz przejść do SDK Manager i na platformie SDK zainstalować Androida 5.X z API poziomu 23.
  2. W sekcji Struktura projektu zmień wersję kompilacji zestawu SDK na API 23, a wersję narzędzia budowania na 23.0.0

Następnie powinien budować bez problemu.

Stucky
źródło
22

Musisz ustawić compileSdkVersion na 23.

Od 23 Android API usunięte nieaktualne pakietów Apache, więc jeśli ich używać do wniosków serwera, trzeba dodać useLibrary 'org.apache.http.legacy'aby build.gradlejak stwierdzono w ten link:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"
    ...

    //only if you use Apache packages
    useLibrary 'org.apache.http.legacy'
}
Dharma Sai Seerapu
źródło
15

Ten problem został podniesiony, ponieważ teraz kompilowana wersja zestawu SDK musi być zgodna z główną wersją biblioteki obsługi systemu Android.

W moim przypadku mam Android Support Librarywersję 23, więc musiałem się skompilować przeciwko Android SDK version 23i musiałem to zmienić w moim build.gradlepliku:

wprowadź opis zdjęcia tutaj

Cóż, niektórzy z was będą musieli zainstalować SDK, Android 6.0 (API 23)

wprowadź opis zdjęcia tutaj

i nie zapomnij zsynchronizować projektu z plikami stopni

Jorgesys
źródło
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'
}
dhiku
źródło
9

Znalazłem rozwiązanie, problem zaczął się po aktualizacji sdk, potem użyłem innej wersji buildToolsVersion ('22 .0.1 ') i korzystałem z innej biblioteki wsparcia, takiej jak kompilacja' com.android.support:appcompat-v7:23.0.0 ' , pokazuję na obrazku poniżej

wprowadź opis zdjęcia tutaj

To powodowało problem z „ android.widget.Material ...” Następnie użyłem tej samej wersji dla biblioteki wsparcia, takiej jak kompilacja „com.android.support:appcompat-v7:22.0.1” i jej GOTOWE. (Pokazuje na poniższym zrzucie ekranu)

wprowadź opis zdjęcia tutaj

Naveed Ahmad
źródło
9

Powinieneś skompilować swój projekt z najnowszą wersją, więc zaktualizuj i zainstaluj z pakietu SDK. Zsynchronizuj swój projekt z sync project with Gradle fileprzyciskiem.
Możesz także kontynuować z istniejącą wersją, ale sprawdź, czy została poprawnie zainstalowana poniżej obrazu wskazującego na poprawnie zainstalowany interfejs API 22.wprowadź opis zdjęcia tutaj

W razie potrzeby zsynchronizuj projekt.

wprowadź opis zdjęcia tutaj

to może pomóc.

Inzimam Tariq IT
źródło
8

Jak wskazał Tanis.7x, wersja biblioteki wsparcia (23) nie pasuje do targetSdkVersion (22)

Możesz to naprawić, wykonując następujące czynności:

W build.gradepliku modułu aplikacji zmień następujący wiersz kodu

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

Do

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

Spowoduje to użycie najnowszej wersji wersji appcompat zgodnej z SdkVersion 22.

RWIL
źródło
7

Kompilowana wersja zestawu SDK musi być zgodna z wersją główną biblioteki obsługi. To jest rozwiązanie twojego problemu. Możesz to łatwo sprawdzić w skrypcie Gradle w build.gradlepliku. Fx: jeśli masz compileSdkVersion23 lata, twoja biblioteka kompilacji musi zaczynać się o 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'
}

I zawsze sprawdź, czy Twój Android Studoi ma obsługiwany poziom API. Możesz to sprawdzić w swoim zestawie SDK systemu Android: wprowadź opis zdjęcia tutaj

Oskar
źródło
6

W moim przypadku była to wyższa wersja usług Google Play. Ustawiłem je na 7.0.0 (nie 8.x) i wszystko było w porządku.

Alecs
źródło
5

Chciałem obniżyć wersję API 23 do 22 i dostałem ten błąd. Musiałem zmienić wszystkie build.gradle pliki w projekcie, aby skompilować.

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'
}
CoolMind
źródło
4

Pomogło mi to: dodanie konkretnej platformy Android

Co należy zrobić, jest następujący ... W moim przypadku było to cordovajednak to samo odnosi się do ionic, phonegapi inne ramy, takie jak:

  1. lista wszystkich zainstalowanych platform dla projektu: cordova platform list. Zobaczysz coś takiego:

wprowadź opis zdjęcia tutaj

  1. usunąć platformy Android: cordova platform remove android.

  2. następnie dodać konkretną platformę Android: cordova platform add [email protected].

Powodzenia! :)

Lentyai
źródło
3

Mam te same problemy. Rozwiązałem problem, aktualizując gradle.build dla każdego podmodułu do najnowszej wersji kompilatora.

sonida
źródło
2

Wszystko jest świetnie, ale nikt z was nie wyjaśnił, skąd pobrać narzędzia do kompilacji SDK

Wszystko jest mile widziane, ale nikt z was nie wyjaśnił, skąd pobrać narzędzia do kompilacji SDK

Stav Bodik
źródło
1

Inne rozwiązanie: przejdź do

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

otwórz .aarplik za pomocą 7-zip lub winrar, w folderze res usuń values-23folder i zapisz zmiany.

Ali Zarei
źródło
1

w module: aplikacja (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'
}

projekt: nameAppXXXX (Gradle)

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

    }
}

allprojects {
    repositories {
        jcenter()
    }
}

i edytuj swoją aktywność AppCompatActivity na przykład Aktywność:

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);
    }


}
Alex Zaraos
źródło
1

Menedżer SDK

Upewnij się, że wszystkie są aktualne.

Ganesh Kanna
źródło
1

Zaktualizuj Android Studio.

Miałem ten problem z Android Studio 1.3.1 i żadna z pozostałych odpowiedzi nie działała dla mnie, ale po aktualizacji do 1.5.1 nie było żadnych problemów.

Matthew Read
źródło
1

Jeśli używasz telefonu (między platformami) i masz ten sam problem powyżej, po prostu usuń platformę Android za pomocą polecenia poniżej.

platforma phonegap usunąć Androida

I dodaj to jeszcze raz.

platforma phonegap dodać Androida

Potem problem został dla mnie rozwiązany.

Edukondalu Thaviti
źródło
0

Jak już wspomniano inni, compile sdk versionmusisz dopasować swoją support library'sgłówną wersję. Jest to również istotne w przypadku, subprojectsgdy masz takie.

W takim przypadku możesz ustawić subprojectskompilację wersji SDK za pomocą następującego skryptu:

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

Dodaj ten skrypt do build.gradlepliku głównego .

TheBaj
źródło
-1

Jeśli otrzymujesz błędy nawet po pobraniu najnowszego pakietu SDK i Android Studio, oto co zrobiłem:

  1. Pobierz najnowszy zestaw SDK
  2. Otwórz strukturę pliku-projektu ( Ctrl+ Alt+ Shift+ S)
  3. W modułach wybierz aplikację
  4. Na karcie właściwości: Zmień wersję kompilacji zestawu SDK na marshmallow API 23 Android 6.0 (najnowszy)

Mam nadzieję, że to pomaga komuś, aby nie cierpiał tak jak ja przez te kilka dni.

xsushil
źródło