Resources$NotFoundException: File res/drawable/abc_ic_ab_back_material.xml

喜你入骨 提交于 2019-11-27 01:24:57
piotrek1543

IF you're using Gradle Plugin 2.0, you need to make changes in your gradle:

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

If you are using Gradle 1.5 you’ll use instead of previus:

// 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"  
  }  
 }  

Check also: Update Android Support Library to 23.2.0 cause error: XmlPullParserException Binary XML file line #17<vector> tag requires viewportWidth > 0.

Android Support Library Ref.: Support Vector Drawables and Animated Vector Drawables.

Also update Android Support dependencies from

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'

as you're already using build-tools in version of 24.0.2.

ashraful

If any of the other solutions does not work, you can add this line in your Activity

static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

and of course, update your gradle and appcompat to the latest versions. This worked in my case.

None of these worked for me. But this did:

Change

android:src="@drawable/your_drawable"

to

app:srcCompat="@drawable/your_drawable"

I ran into this issue in Xamarin.Android with Xamarin.Android.Support.Design 24.0.2. Here is how I solved it:

Added the following line to my Application class OnCreate:

AppCompatDelegate.CompatVectorFromResourcesEnabled = true;

Replaced:

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

With:

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

Since this page is the first result of google android.content.res.Resources$NotFoundException: File res/drawable/, I want to share that this exception might caused by your foo.xml contains improper code.

e.g. 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>

This xml contains <size android:height="@android:style/Widget.ProgressBar.Horizontal" /> which compiled successfully but throws exception at Runtime, vary in different app.

use like this in your Activity:

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

and this in your build.gradle :

android {
    ...

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

}

and in your xml:

app:srcCompat="@drawable/your_icon"

Ok, i just solved my problem, the problem was my gradle outdated and my sdk , so if anyone is running with this problem just do this steps

1.- Make sure your libs are updated as piotrek1543 says above 2.- Update your sdk if is necesary 3.- Update your gradle files (VERY IMPORTANT) just go to the project gradle and add this

classpath 'com.android.tools.build:gradle:2.1.0'

then go to your app project > app > graddle > graddlewrapper.properties and add

distributionUrl=https://services.gradle.org/distributions/gradle-2.10-all.zip

4.- change your compile compileSdkVersion to 24 and your buildToolsVersion "24.0.2" (MAKE SURE YOUR DEPENDENCES ARE UP TO DATE WITH THE SDK)

Have fun

I have tried all solutions mentioned above. Nothing worked for me. The only thing worked for me is very simple is to update all support libraries to latest version as this bug has been fixed in it. So i simple did the below thing in gradle file; updated SDK and support to 25.

android {
    compileSdkVersion 25
    buildToolsVersion "25"
  defaultConfig {
        targetSdkVersion 25
   }

}
In dependencies 

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

Not specifically related to your question, but maybe can solve this problem for all that find themselves here while searching for that error.

For me was the problem with SVG file that I have imported into my project. One of the paths in XML has empty pathData and that was causing the crash on some devices like Pixel XL, Samsung Galaxy S7,...

So double check imported XML for an image if you are using SVG as your image source.

AceStan

I had this problem.

In your Application class, in the onCreate() method, add:

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);

... and also use AppCompatImageView instead of ImageView.

Ex : BaseApplication.class :

public class BaseApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        //Your other code here...
        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
    }
}

XML :

<androidx.appcompat.widget.AppCompatImageView
        android:id="@+id/yourIvId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

Changing the kotlin-stdlib dependency from:

implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.0" to

implementation "org.jetbrains.kotlin:kotlin-stdlib:1.2.0" fixed the error.

in my case the XML contained android:endX that supports from 24 and up.

If you are using ?attr inside your drawable, this could be the reason of error.

consider replacing it with Vector Drawable so it can be used in all android versions:

Replace

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="?attr/navigationIconColor" />
        </shape>
    </item>
</selector>

With:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="37dp"
    android:height="5dp"
    android:viewportWidth="37"
    android:viewportHeight="5">
  <path
      android:pathData="M2.5,0h32C35.9,0 37,1.1 37,2.5l0,0C37,3.9 35.9,5 34.5,5h-32C1.1,5 0,3.9 0,2.5l0,0C0,1.1 1.1,0 2.5,0z"
      android:fillColor="?attr/navigationIconColor"/>
</vector>

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!