Lỗi khi truy xuất cha mẹ cho mục: Không tìm thấy tài nguyên phù hợp với tên đã cho sau khi nâng cấp lên AppCompat v23


780

Tôi đã luôn lập trình Android với Eclipse và quyết định bắt đầu chuyển sang Android Studio . Tôi đã quyết định sử dụng cùng một SDK mà tôi đã có cho Eclipse, sau đó:

  • Bắt đầu một dự án mới
  • Đặt SDK tối thiểu 4.0 (API cấp 14)
  • Chọn tùy chọn Hoạt động trống
  • Tên mặc định được sử dụng cho Tên hoạt động và Tên bố cục
  • Lượt kết thúc

Sau vài giây, Gradle hoàn thành quá trình xây dựng và nó đưa ra hai lỗi với các thông báo sau trong tệp Teste4 \ app \ build \ trung gian / exploding-aar \ com.android.support \ appcompat-v7 \ 23.0.0 \ res \ value -v23 \ value-v23.xml:

Lỗi: (2) Lỗi khi truy xuất nguồn gốc của phụ huynh cho mục: Không tìm thấy tài nguyên phù hợp với tên đã cho 'android: TextAppparent.M vật liệu.Widget.Button.Inverse'.

Lỗi: (2) Lỗi khi truy xuất nguồn gốc của phụ huynh cho mục: Không tìm thấy tài nguyên phù hợp với tên đã cho 'android: Widget.M vật liệu.Button.Colored'.

Trong Tệp -> Cấu trúc dự án -> Mô-đun: ứng dụng (cột bên trái) -> tab Thuộc tính , tôi có các phiên bản sau được thiết lập:

  • "Biên dịch phiên bản Sdk": Android 5.1 (API cấp 22)
  • "Phiên bản công cụ xây dựng": 23.0.2

Tôi nên làm gì để khắc phục điều này?

Tôi đã thử những gì được đề xuất trong câu hỏi Stack Overflow appcompat-v7: 21.0.0 ': Không tìm thấy tài nguyên nào khớp với tên đã cho: attr' android: actionModeShareDrawable ' , nhưng nó không hoạt động.

Câu trả lời:


1147

Phiên bản SDK biên dịch của bạn phải phù hợp với phiên bản chính của thư viện hỗ trợ.

Vì bạn đang sử dụng phiên bản 23 của thư viện hỗ trợ, bạn cần biên dịch theo phiên bản 23 của SDK Android.

Ngoài ra, bạn có thể tiếp tục biên dịch theo phiên bản 22 của SDK Android bằng cách chuyển sang thư viện hỗ trợ mới nhất v22.


10
Bạn có thể thay đổi nó theo cách thủ công build.gradlehoặc bạn có thể sử dụng GUI bằng cách mở thuộc tính dự án và chuyển đến tab "phụ thuộc".
Bryan Herbst

11
Câu hỏi và câu trả lời này không liên quan gì đến phiên bản ứng dụng của bạn sẽ chạy trên phiên bản nào. Ứng dụng nhắm mục tiêu 22 có thể chạy tốt trên thiết bị đang chạy 23. Vấn đề được mô tả ở đây là thư viện hỗ trợ phiên bản 23 yêu cầu bạn nhắm mục tiêu 23, vì thư viện hỗ trợ tham chiếu một số API trong 23 SDK.
Bryan Herbst

42
Đối với những người như tôi mới biết về Android Studio và bối rối về cách "sử dụng GUI bằng cách mở thuộc tính dự án", trong Android Studio của tôi (v1.3.1), tôi đi đến Tệp, Cấu trúc dự án, sau đó ở bên trái ngăn thủ công ở phía dưới là một mục trong Mô-đun (được gọi là "ứng dụng" trong trường hợp của tôi). Tôi bấm vào đó, và sau đó tôi thấy một tab Phụ thuộc.
Bryan

119
Tôi vẫn không thể tin Android Studio phát hành công cụ mà không cần thử nghiệm điều gì đó cơ bản !! Ít nhất là đặt một số cảnh báo có ý nghĩa !!
Josh

30
GUI sẽ xuất hiện một thông báo "chúng tôi đã phát hiện ra bạn không nhắm mục tiêu đúng phiên bản API Android. Bạn có muốn tôi sửa nó không?". Thay vào đó, tôi phải ngừng làm việc trên máy bay và đợi cho đến khi tôi có thể tìm kiếm stackoverflow.
Ai đó ở đâu đó

137

Điều này xảy ra bởi vì sau khi cập nhật, Android Studio sử dụng API phiên bản 23 theo mặc định.

Sau đây làm việc cho tôi:

Nhấn Ctrl+ Shift+ Alt+ Sđể đến trang cấu trúc dự án. Chuyển đến tab thuộc tính và thay đổi 23.0.0 thành 22.0.1 (hoặc tương đương với những gì bạn đã sử dụng trước đó) trong khu vực công cụ xây dựng và xây dựng lại dự án của bạn.

Nếu điều đó không hiệu quả, hãy chuyển sang lớp: ứng dụng và sau đó

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

Chỉnh sửa v7: 23.0.0 thành v7: 22.2.1 như được hiển thị ở trên và đồng bộ hóa lớp. Điều này chắc chắn sẽ làm việc.


10
Đối với những người mới như tôi đang bối rối về cách "đi tới gradele: ứng dụng và sau đó biên dịch fileTree (dir: 'libs', bao gồm: ['* .jar']) biên dịch 'com.android.support:appcompat-v7:22.2 .1 '", trong Android Studio của tôi (phiên bản 1.3.1), trong ngăn dự án (mà tôi đã mở bằng cách nhấp vào tab 1: Project ở bên trái), tôi thấy hai mục trong Tập lệnh Gradle có tên là" build.gradle " . Cái thứ hai có (Module: ứng dụng) bên cạnh nó. Tôi bấm đúp vào nó để mở nó. Sau đó, trong phần phụ thuộc ở phía dưới, tôi đã thay đổi v7: 23.0.0 thành v7: 22.2.1. Tôi đã lưu (và được đồng bộ hóa theo lời nhắc của Studio) - dường như biên dịch ok.
Bryan

4
Làm thế nào tôi có thể vào trang cấu trúc dự án trên MAC?
rosu alin 2/12/2015

4
@Sourav Ngay cả sau khi thực hiện những thay đổi này, lỗi không được giải quyết. Tôi vẫn có những lỗi trong v23/values-23.xmltập tin. Tôi đã thay đổi giá trị trong trang cấu trúc dự án, xây dựng lại ứng dụng. Nhưng vẫn phải đối mặt với vấn đề :(
Mitchs

Trên mac, phím tắt là ⌘ +; . Ngoài ra, bạn có thể đi đến Tệp> Cấu trúc dự án.
Tomanow

115

Khi bạn cập nhật Android Studio, nó sử dụng API phiên bản 23 theo mặc định, đây là lý do chính cho sự xuất hiện của nó. Vì thế,

Đầu tiên, hãy kiểm tra phiên bản AppCompat của bạn trong build.gradle (Mô-đun: ứng dụng) Đó là,

Nhập mô tả hình ảnh ở đây

Nếu sau khi thay đổi thành 23 xảy ra lỗi thì chỉ cần tải xuống

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

từ Trình quản lý SDK. Nếu đã tải xuống rồi:

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

Nhấp vào nút Trình quản lý SDK và mở hộp thoại.

Nhập mô tả hình ảnh ở đây

Nhấp vào Nền tảng SDK và kiểm tra xem Android 6.0 có được tải xuống hay không.

Nếu không, sau đó tải xuống đầu tiên. Sau khi hoàn thành tải xuống, bấm vào Apply.

Nhập mô tả hình ảnh ở đây

Bây giờ bạn cần áp dụng các thay đổi cho dự án của bạn từ cài đặt. Sau đó nhấn Ctrl+ Alt+ Shift+S để mở cài đặt

  1. Nhấp vào ứng dụng từ danh sách.
  2. Nhấp vào thuộc tính
  3. Thay đổi Phiên bản SDK biên dịch của bạn thành API 23
  4. Thay đổi Phiên bản Công cụ Xây dựng của bạn thành 23.0.0

Nhập mô tả hình ảnh ở đây

Đừng quên xây dựng lại dự án của bạn.

Sau đó, lỗi của bạn sẽ biến mất.


1
Tôi hiểu cách bạn xác định giải pháp, nhưng hãy thử mô tả bài viết của bạn với mô tả đầy đủ
Naveed Ahmad

1
@NaveedAhmad Ok tôi sẽ chỉnh sửa bài viết của mình. Cảm ơn đề nghị của bạn.
Ravikant Paudel

1
Tôi đã thêm một bài đăng liên quan đến vấn đề trên stackoverflow.com/a/32370099/2915785
Naveed Ahmad

1
này, xin vui lòng thêm cùng một phiên bản appcompat, nó đã giải quyết vấn đề của tôi
vuhung3990

2
Trong những trường hợp như vậy, ảnh chụp màn hình giúp cho những người giả như tôi.
ern0

70

Nếu bạn đã cố gắng thay đổi mục tiêu thành phiên bản GooglePlayService hoặc AppCompatv7 trước đó và nó không hoạt động, hãy kiểm tra xem bạn có phụ thuộc thư viện dự án nào không, dự án này sẽ nhắm mục tiêu phiên bản mới nhất của bất kỳ thư viện nào trong số này. Nó đã xảy ra với tôi với dự án Thư viện Google Maps Utils:

thay thế:

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

đến

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

Sau đó, bạn có thể tiếp tục API nhắm mục tiêu đầy đủ 22

Nếu nó vẫn không biên dịch, đôi khi rất hữu ích để đặt API compileSdkVersion thành 23 và targetSdkVersion thành 22.


35

Tôi đồng ý với câu trả lời trước. Phiên bản SDK biên dịch của bạn phải phù hợp với thư viện hỗ trợ. Đây là những gì tôi đã làm.

  1. Bạn có thể truy cập Trình quản lý SDK và trong Nền tảng SDK, cài đặt Android 5.X với API cấp 23.
  2. Trong Cấu trúc dự án, thay đổi Phiên bản SDK biên dịch thành API 23 và Phiên bản công cụ xây dựng thành 23.0.0

Sau đó, nó nên xây dựng mà không có vấn đề.


22

Bạn cần đặt compileSdkVersion thành 23.

Do API 23 Android đã loại bỏ các gói Apache HTTP không dùng nữa, vì vậy nếu bạn sử dụng chúng cho các yêu cầu máy chủ, bạn sẽ cần thêm useL Library 'org.apache.http.legacy'vào build.gradlenhư được nêu trong liên kết này:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"
    ...

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

15

Vấn đề này được nêu ra vì bây giờ phiên bản SDK biên dịch phải phù hợp với phiên bản chính của thư viện Hỗ trợ Android.

Trong trường hợp của tôi, tôi có Android Support Libraryphiên bản 23, vì vậy tôi phải biên dịch lại Android SDK version 23và tôi phải thay đổi điều này trong build.gradletệp của mình :

nhập mô tả hình ảnh ở đây

Vâng, một số bạn sẽ cần cài đặt SDK, Android 6.0 (API 23)

nhập mô tả hình ảnh ở đây

donett quên đồng bộ hóa dự án với các tập tin lớp


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

Tôi đã tìm thấy giải pháp, Sự cố bắt đầu khi tôi cập nhật sdk, sau đó tôi đã sử dụng buildToolsVersion khác nhau ('22 .0.1 ') và tôi đang sử dụng thư viện hỗ trợ khác nhau như biên dịch' com.android.support:appcompat-v7:23.0.0 ' , cho bạn thấy trong hình dưới đây

nhập mô tả hình ảnh ở đây

Điều này đã gây ra vấn đề về " android.widget.M vật liệu ..." Sau đó, tôi đã sử dụng cùng một phiên bản cho thư viện hỗ trợ như biên dịch 'com.android.support:appcompat-v7:22.0.1' và DONE của nó. (Hiển thị bạn trong ảnh chụp màn hình bên dưới)

nhập mô tả hình ảnh ở đây


9

Bạn nên biên dịch dự án của bạn với phiên bản mới nhất để cập nhật & cài đặt từ SDK của bạn. Đồng bộ hóa dự án của bạn với sync project with Gradle fileNút.
Bạn cũng có thể tiếp tục với phiên bản hiện tại nhưng kiểm tra xem nó đã được cài đặt đúng bên dưới hình ảnh cho biết API 22 đã được cài đặt đúng chưa.nhập mô tả hình ảnh ở đây

Và đồng bộ hóa dự án của bạn nếu cần.

nhập mô tả hình ảnh ở đây

nó có thể giúp.


8

Như Tanis.7x đã chỉ ra, phiên bản thư viện hỗ trợ (23) không khớp với targetSdkVersion (22)

Bạn có thể khắc phục điều này bằng cách làm như sau:

Trong build.gradetệp mô-đun ứng dụng của bạn, hãy thay đổi dòng mã sau

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

Đến

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

Điều này sẽ sử dụng phiên bản mới nhất của phiên bản appcompat tương thích với SdkVersion 22.


7

Phiên bản SDK biên dịch của bạn phải phù hợp với phiên bản chính của thư viện hỗ trợ. Đây là giải pháp cho vấn đề của bạn. Bạn có thể kiểm tra nó dễ dàng trong Tập lệnh Gradle của bạn trong build.gradletệp. Fx: nếu bạn compileSdkVersionlà 23 thì thư viện biên dịch của bạn phải bắt đầu từ 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'
}

Và luôn luôn kiểm tra xem Android Studoi của bạn có Cấp API được hỗ trợ hay không. Bạn có thể kiểm tra nó trong SDK Android của mình, như thế này: nhập mô tả hình ảnh ở đây


6

Trong trường hợp của tôi, đó là phiên bản cao hơn của Google-play-services. Tôi đặt chúng thành 7.0.0 (không phải 8.x) và tất cả đều ổn.


5

Tôi muốn hạ cấp từ API 23 xuống 22 và gặp lỗi này. Tôi đã phải thay đổi tất cả build.gradle các tập tin trong một dự án để biên dịch.

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

Đây là những gì đã giúp tôi: Thêm nền tảng Android cụ thể

Những gì cần phải làm là những điều sau đây ... Trong trường hợp của tôi đó là cordovanhưng điều này cũng phù hợp cho ionic, phonegapvà các khuôn khổ khác như thế này:

  1. liệt kê tất cả các nền tảng được cài đặt cho dự án của bạn : cordova platform list. Bạn sẽ thấy một cái gì đó như thế này:

nhập mô tả hình ảnh ở đây

  1. xóa nền tảng Android : cordova platform remove android.

  2. sau đó thêm nền tảng Android cụ thể : cordova platform add android@5.0.0.

Chúc may mắn! :)


3

Tôi đã có những vấn đề tương tự. Tôi đã giải quyết vấn đề của mình bằng cách cập nhật gradle.build cho mỗi mô-đun phụ lên phiên bản trình biên dịch mới nhất.


2

Mọi thứ đều tuyệt vời nhưng không ai trong số các bạn giải thích nơi tải xuống các công cụ xây dựng SDK

Mọi thứ đều tuyệt vời nhưng không ai trong số các bạn giải thích nơi tải xuống các công cụ xây dựng SDK


1

Một giải pháp khác: điều hướng đến

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

mở .aartệp bằng 7-zip hoặc winrar, trong thư mục res xóa values-23thư mục và lưu các thay đổi.


1

trên mô-đun: ứng dụng (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'
}

dự án: nameAppXXXX (Gradle)

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

    }
}

allprojects {
    repositories {
        jcenter()
    }
}

và chỉnh sửa hoạt động AppCompatActivity của bạn thành ví dụ Hoạt động:

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

Trình quản lý SDK

Hãy chắc chắn rằng tất cả những thứ này được cập nhật.


1

Nâng cấp Android Studio.

Tôi gặp vấn đề này với Android Studio 1.3.1 và không có câu trả lời nào khác phù hợp với tôi, nhưng sau khi cập nhật lên 1.5.1 thì không có vấn đề gì.


1

Nếu bạn đang sử dụng phonegap (đa nền tảng) và gặp vấn đề tương tự ở trên, chỉ cần xóa nền tảng Android bằng lệnh bên dưới.

nền tảng phonegap gỡ bỏ android

Và thêm nó một lần nữa.

nền tảng phonegap thêm android

Sau đó, vấn đề giải quyết cho tôi.


0

Như những người khác đã đề cập, bạn compile sdk versionphải phù hợp với support library'sphiên bản chính của bạn . Điều này là tuy nhiên, cũng có liên quan cho subprojectsbạn nên có bất kỳ.

Trong trường hợp bạn làm như vậy, bạn có thể đặt các subprojectsphiên bản sdk biên dịch của mình với tập lệnh sau:

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

Thêm tập lệnh này trong build.gradletập tin gốc của bạn .


-1

Nếu bạn gặp lỗi ngay cả sau khi tải xuống SDK và Android Studio mới nhất, đây là những gì tôi đã làm:

  1. Tải xuống SDK mới nhất
  2. Mở tệp - Cấu trúc dự án ( Ctrl+ Alt+ Shift+ S)
  3. Trong các mô-đun, chọn ứng dụng
  4. Trong tab thuộc tính: Thay đổi phiên bản SDK biên dịch thành API 23 Android 6.0 marshmallow (mới nhất)

Tôi hy vọng nó sẽ giúp được ai đó để anh ấy không phải chịu đựng như tôi trong vài ngày này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.