资源未找到异常:文件 res/drawable/abc_ic_ab_back_material.xml

60

在解决了JDK零值错误之后,现在我正在面对这个问题。我做了一些研究,但似乎无法找到重点。以下是日志错误:

FATAL EXCEPTION: main
 E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{.MainActivity}: android.content.res.Resources$NotFoundException: File res/drawable/abc_ic_ab_back_material.xml from drawable resource ID #0x7f020013
 E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2204)
 E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2254)
 E/AndroidRuntime:     at android.app.ActivityThread.access$600(ActivityThread.java:141)
 E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
 E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:99)
 E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:137)
 E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5069)
 E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)
 E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:511)
 E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
 E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
 E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)
 E/AndroidRuntime:  Caused by: android.content.res.Resources$NotFoundException: File res/drawable/abc_ic_ab_back_material.xml from drawable resource ID #0x7f020013
 E/AndroidRuntime:     at android.content.res.Resources.loadDrawable(Resources.java:1953)
 E/AndroidRuntime:     at android.content.res.Resources.getDrawable(Resources.java:660)
 E/AndroidRuntime:     at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:354)
 E/AndroidRuntime:     at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:193)
 E/AndroidRuntime:     at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:181)
 E/AndroidRuntime:     at android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.java:689)
 E/AndroidRuntime:     at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:186)
 E/AndroidRuntime:     at android.support.v7.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:77)
 E/AndroidRuntime:     at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:83)
 E/AndroidRuntime:     at android.support.v7.app.AppCompatDelegateImplV7.<init>(AppCompatDelegateImplV7.java:146)
 E/AndroidRuntime:     at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:28)
 E/AndroidRuntime:     at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:41)
 E/AndroidRuntime:     at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:193)
 E/AndroidRuntime:     at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:173)
 E/AndroidRuntime:     at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:511)
 E/AndroidRuntime:     at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:71)
 E/AndroidRuntime:     at .MainActivity.onCreate(MainActivity.java:29)
 E/AndroidRuntime:     at android.app.Activity.performCreate(Activity.java:5104)
 E/AndroidRuntime:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1092)
 E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
 E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2254) 
 E/AndroidRuntime:     at android.app.ActivityThread.access$600(ActivityThread.java:141) 
 E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
 E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:99) 
 E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:137) 
 E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5069) 
 E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method) 
 E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:511) 
 E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
 E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
 E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method) 
 E/AndroidRuntime:  Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #17: invalid drawable tag vector
 E/AndroidRuntime:     at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:881)
 E/AndroidRuntime:     at android.graphics.drawable.Drawable.createFromXml(Drawable.java:822)
 E/AndroidRuntime:     at android.content.res.Resources.loadDrawable(Resources.java:1950)
 E/AndroidRuntime:     at android.content.res.Resources.getDrawable(Resources.java:660) 
 E/AndroidRuntime:     at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:354) 
 E/AndroidRuntime:     at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:193) 
 E/AndroidRuntime:     at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:181) 
 E/AndroidRuntime:     at android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.java:689) 
 E/AndroidRuntime:     at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:186) 
 E/AndroidRuntime:     at android.support.v7.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:77) 
 E/AndroidRuntime:     at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:83) 
 E/AndroidRuntime:     at android.support.v7.app.AppCompatDelegateImplV7.<init>(AppCompatDelegateImplV7.java:146) 
 E/AndroidRuntime:     at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:28) 
 E/AndroidRuntime:     at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:41) 
 E/AndroidRuntime:     at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:193) 
 E/AndroidRuntime:     at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:173) 
 E/AndroidRuntime:     at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:511) 
 E/AndroidRuntime:     at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:71) 
 E/AndroidRuntime:     at .MainActivity.onCreate(MainActivity.java:29) 
 E/AndroidRuntime:     at android.app.Activity.performCreate(Activity.java:5104) 
 E/AndroidRuntime:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1092) 
 E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
 E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2254) 
 E/AndroidRuntime:     at android.app.ActivityThread.access$600(ActivityThread.java:141) 
 E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
 E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:99) 
 E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:137) 
 E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5069) 
 E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method) 
 E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:511) 
 E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
 E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
 E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method) 

我对它可能是什么感到非常困惑,我读了但是没找到错误:

我的 app:gradle 文件如下:

apply plugin: 'com.android.application'

android {



    compileSdkVersion 23
    buildToolsVersion "24.0.2"




    defaultConfig {

        applicationId "me.me2.com.myapp"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"




    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }






}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.4.0'
    compile 'com.android.support:recyclerview-v7:23.4.0'
    compile 'com.android.support:cardview-v7:23.4.0'


    compile 'com.google.firebase:firebase-storage:9.4.0'
    compile 'com.google.firebase:firebase-database:9.4.0'
    compile 'com.google.firebase:firebase-auth:9.4.0'
    compile 'com.firebaseui:firebase-ui-database:0.4.4'


    compile 'com.squareup.picasso:picasso:2.5.2'





}

apply plugin: 'com.google.gms.google-services'

这是我的样式文件夹:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>
    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

    <style name="Divider">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">1dp</item>
        <item name="android:background">?android:attr/listDivider</item>
    </style>

</resources>

如果需要的话,以下是我的MainActivity类:

public class MainActivity extends AppCompatActivity {

    VideoView videoView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        // VideoView

        videoView = (VideoView) findViewById(R.id.videoview);
        videoView.setVideoURI(Uri.parse("android.resource://"+getPackageName() + "/" +R.raw.video));
        videoView.requestFocus();

        /**
         * Loop
         */
        videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                videoView.start();
                mp.setLooping(true);

            }
        });




    }


    public void Login(View view) {
        Intent intent = new Intent(this, FragmentMain.class); 
        startActivity(intent);

       // finish();

    }

    public void Registro(View view) {
        Intent intent = new Intent(this, Registro.class);
        startActivity(intent);
    }





    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

谢谢。


完整的答案和所有可能的解决方案都在此处提供:[https://medium.com/androiddevelopers/appcompat-v23-2-age-of-the-vectors-91cbafa87c88] - Ghasem
20个回答

41

如果您使用Gradle插件2.0,您需要在gradle中进行更改:

// Gradle Plugin 2.0+  
 android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 }  

如果你正在使用Gradle 1.5,你需要使用而不是之前的:

// Gradle Plugin 1.5  
 android {  
   defaultConfig {  
     // Stops the Gradle plugin's automatic rasterization of vectors
     generatedDensities = []  
  }  
  // Flag to tell aapt to keep the attribute ids around
  // This is handled for you by the 2.0+ Gradle Plugin  
  aaptOptions {  
    additionalParameters "--no-version-vectors"  
  }  
 }  

同时检查:更新Android Support Library到23.2.0会导致错误:XmlPullParserException Binary XML文件第17行<vector>标签需要viewportWidth > 0

Android Support Library参考:支持矢量绘图和动画矢量绘图

同时更新 Android Support 依赖项从

compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
compile 'com.android.support:recyclerview-v7:23.4.0'
compile 'com.android.support:cardview-v7:23.4.0'

to
compile 'com.android.support:appcompat-v7:24.2.0'
compile 'com.android.support:design:24.2.0'
compile 'com.android.support:recyclerview-v7:24.2.0'
compile 'com.android.support:cardview-v7:24.2.0'

你已经在使用版本为24.0.2的构建工具。


感谢您的快速回复。如果我尝试将依赖项从23.4.0升级到24.2.0,我会收到以下错误提示:“此支持库不应使用不同版本(24),请检查compileSdkVersion(23)”。如果我添加(vectorDrawables.useSupportLibrary = true),它会将矢量可绘制对象标记为灰色,并显示“无法解析符号”的错误。如果我尝试添加generatedDensities,则会出现以下错误:Error:(20, 0) No such property: generatedDensities for class: com.android.build.gradle.internal.dsl.ProductFlavor_Decorated - user6099735
将compileSdkVersion更改为24。 TargetSdkVersion保持不变。 - piotrek1543
我无法将compileSdkVersion更改为24,它不允许我同步。我得到了这个错误:错误:原因:在C:\ Users \ Usuario \ AppData \ Local \ Android \ sdk中找不到哈希字符串“android-24”的目标 <a href="openAndroidSdkManager">打开Android SDK管理器</a> - user6099735
所以您需要安装android-24包。打开SDK管理器并安装缺失的资源。 - piotrek1543
好的,我使用SDK管理器更新了所有内容,但似乎还是不起作用。 - user6099735
关于 https://dev59.com/yek5XIcBkEYKwwoY2NDV - user25

35

如果其他解决方案均无效,您可以在Activity中添加此行。

static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

当然,更新你的gradle和appcompat到最新版本。这在我的情况下有效。


24

以上方法都没有为我解决问题,但是这个方法可以:

android:src="@drawable/your_drawable"

改为

app:srcCompat="@drawable/your_drawable"


7
我们应该为背景图片做些什么? - shweta c
3
有没有 Android 中 "drawableRight="@drawable/vectorImage"" 的选项? - Mohit Mehta
@MohitMehta 找到任何解决方案了吗? - Amin Pinjari
@aminpinjari 没有找到任何解决方案,所以我从我的项目中删除了矢量图像并包含了 jpg :) - Mohit Mehta
是的。在我开始使用android:src=后,我开始收到这个错误。它真的会起作用吗? - Trk

11
我在使用Xamarin.Android.Support.Design 24.0.2时遇到了这个问题,以下是我解决方法:
在我的Application类的OnCreate方法中加入以下代码行:
AppCompatDelegate.CompatVectorFromResourcesEnabled = true;

替换:

var upArrow = ContextCompat.GetDrawable(this, Resource.Drawable.abc_ic_ab_back_material);

随着:

var upArrow = ResourcesCompat.GetDrawable(Resources, Resource.Drawable.abc_ic_ab_back_material, null);

4
这段代码的意思是启用应用程序向量兼容性支持。 - Arash Hatami
不需要将 ContextCompact 替换为 ResourcesCompat,我认为问题出在 Gradle 上。 - Ramy Sabry
1
@ArashHatami - 如答案所述 - 这是针对Xamarin.Android (.NET/C#)的。 - pnavk

7

由于这个页面是谷歌搜索的第一个结果android.content.res.Resources$NotFoundException: File res/drawable/,我想分享一下这个异常可能是由于你的foo.xml包含不合适的代码引起的。

例如:foo.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@android:id/background">
        <shape>
            <size android:height="@android:style/Widget.ProgressBar.Horizontal" />
            <corners android:radius="5dip" />
            <gradient
                android:startColor="#000000"
                android:centerY="0.75"
                android:angle="270"
                />
        </shape>
    </item>
</layer-list>

这个xml文件包含了<size android:height="@android:style/Widget.ProgressBar.Horizontal" />,虽然它可以成功编译,但在运行时会抛出异常,并且在不同的应用中表现不同。


9
在使用<solid android:color="?attr/colorPrimaryDark" />语句在一个drawable中时,我遇到了同样的问题,当在API 21模拟器上运行时,访问XML drawable中的属性不支持早期Android版本。它能够在较新的版本上工作,但在旧版本上会抛出具有误导性的间接异常android.content.res.Resources$NotFoundException: File res/my_drawable.xml from drawable resource ID,这让我困惑了一段时间 :/ - qix

6

在您的Activity中使用如下:

public class MainActivity extends AppCompatActivity {
    static {
        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
     }
  ...
}

在你的 build.gradle 文件中加入以下代码:
android {
    ...

     defaultConfig {
         ....
         vectorDrawables.useSupportLibrary = true
    }

在你的XML中:

并且:

app:srcCompat="@drawable/your_icon"

2

我发现在安卓4.4版本运行应用时,出现了运行时崩溃。

问题描述:

android {
    compileSdkVersion 28
    defaultConfig {
        //Change this to true to enable multidex support for Kitkat
        multiDexEnabled true
        vectorDrawables.useSupportLibrary = true

    }

解决方案: // 将向量支持的行注释掉
android {
        //Change this to true to enable multidex support for Kitkat
         multiDexEnabled true
        //vectorDrawables.useSupportLibrary = true

    }

1
在我的情况下,问题出在错误的超类型上。我动态添加了图像视图,并使用了 ImageView 而不是 AppCompatImageView。选择正确的父类解决了这个问题。

1
在我的情况下,那是一个很大的向量文件。我使用了一个简化版本的向量文件,其设计与原先相同,这样就解决了问题。

1

虽然不是直接回答你的问题,但也许可以解决所有在搜索该错误时遇到此问题的人。

对我来说,问题出在导入到项目中的SVG文件上。 XML中的一个路径具有空的pathData,这会导致某些设备(如Pixel XL、三星Galaxy S7等)崩溃。

因此,如果您使用SVG作为图像源,请仔细检查导入的XML。


我再次遇到了这个问题,这一次不是空的pathData,而是pathData太大了,所以也要注意这一点。最好的做法是删除导入的XML的部分并运行它。 ;) - BVantur
我建议使用优化SVG或甚至矢量可绘制工具来避免这种问题。以下是两个很棒的工具: https://github.com/svg/svgo https://github.com/alexjlockwood/avocado - BVantur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接