0

Using Android Studio I have created a very basic skeletal app. It works on android 5.1 API 22, but crashes on invocation on android 2.3.3 API 10.

Here is the crash log. It shows resource not found exception for abc_vector_test.xml file.

FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo {com.myco.k5/com.myco.k5.MainActivity}: 
android.content.res.Resources$NotFoundException: File res/drawable/abc_vector_test.xml from drawable resource ID #0x7f020052
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:1651)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3691)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
at dalvik.system.NativeStart.main(Native Method)
 Caused by: android.content.res.Resources$NotFoundException: File res/drawable/abc_vector_test.xml from drawable resource ID #0x7f020052
at android.content.res.Resources.loadDrawable(Resources.java:1977)
at android.content.res.Resources.getDrawable(Resources.java:602)
at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:388)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:202)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:190)
at android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.java:711)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:195)
at android.support.v7.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:81)
at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:131)
at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:155)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:209)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185)
at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519)
at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:71)
at com.myco.k5.MainActivity.onCreate(MainActivity.java:13)    
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:123) 
at android.app.ActivityThread.main(ActivityThread.java:3691) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 
at dalvik.system.NativeStart.main(Native Method) 
 Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #17: invalid drawable tag vector
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:783)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728)
at android.content.res.Resources.loadDrawable(Resources.java:1952)
at android.content.res.Resources.getDrawable(Resources.java:602) 
at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:388) 
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:202) 
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:190) 
at android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.java:711) 
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:195) 
at android.support.v7.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:81) 
at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:131) 
at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:155) 
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:209) 
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185) 
at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519) 
at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:71) 
at com.myco.k5.MainActivity.onCreate(MainActivity.java:13) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:123) 
at android.app.ActivityThread.main(ActivityThread.java:3691) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 
at dalvik.system.NativeStart.main(Native Method) 

I have already tried some of the approaches (see code below). Files are:

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myco.k5" >

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:name="android.support.multidex.MultiDexApplication"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"    
    android:layout_width="match_parent"
    android:layout_height="match_parent" android:fitsSystemWindows="true"
    tools:context=".MainActivity">

    <android.support.design.widget.AppBarLayout         
        android:layout_height="wrap_content"
        android:layout_width="match_parent"         
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar android:id="@+id/toolbar"
            android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"     
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"     
        android:layout_width="match_parent"
        android:layout_height="match_parent"     
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        tools:showIn="@layout/activity_main" tools:context=".MainActivity">

        <TextView android:text="Hello World!" 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </RelativeLayout>
</android.support.design.widget.CoordinatorLayout>

MainActivity.java:

package com.myco.k5;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.app.AppCompatDelegate;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    }

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

app's build.gradle file:

    apply plugin: 'com.android.application'

    android {
        compileSdkVersion 25
        buildToolsVersion "23.0.1"

        defaultConfig {
            applicationId "com.myco.k5"
            minSdkVersion 10
            targetSdkVersion 25
            versionCode 1
            versionName "1.0"
            multiDexEnabled true
        }
        dexOptions {
            incremental true
            javaMaxHeapSize "4g"
        }
        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:25.3.1'
        compile 'com.android.support:design:25.3.1'
        compile 'com.android.support:multidex:1.0.1'
    }

Top level build.gradle file:

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

            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }

    allprojects {
        repositories {
            jcenter()
        }
    }

    task clean(type: Delete) {
        delete rootProject.buildDir
    }

Please advice on how can this crash be resolved.


SOLVED: Solved this by using the following

  1. In app level build.gradle file used

    android {
    // your entries here
    generatedDensities = [] } // Flag notifies aapt to keep the attribute IDs around aaptOptions { additionalParameters "--no-version-vectors" }

    1. In the top level build.gradle file changed classpath from 1.4.0 to 1.5.0

classpath 'com.android.tools.build:gradle:1.5.0' // Earlier it was 1.4.0 here

Cœur
  • 37,241
  • 25
  • 195
  • 267
Anilb
  • 43
  • 8
  • 2
    Possible duplicate of [How to properly use backwards compatible Vector Drawable with latest Android Support Library?](http://stackoverflow.com/questions/40678947/how-to-properly-use-backwards-compatible-vector-drawable-with-latest-android-sup) – VishnuSP May 09 '17 at 11:57
  • VishnuSP - I am not using abc_vector_test in my code at all. It seems to be an internal android file for which android is giving an error. – Anilb May 10 '17 at 05:16
  • ok. Try using `buildToolsVersion "24.0.1"` or above. Also have a look at [Support Vector Drawables] (https://android-developers.googleblog.com/2016/02/android-support-library-232.html) – VishnuSP May 10 '17 at 05:40
  • Tried using buildToolVersion "24.0.1". This does not recognize generatedDensities = [] I get Error:(25, 0) No such property: generatedDensities for class: com.android.build.gradle.internal.dsl.ProductFlavor_Decorated – Anilb May 12 '17 at 12:11
  • **SOLVED** : Solved this by using the following in the top level (not app level) build.gradle file. classpath 'com.android.tools.build:gradle:1.5.0' // Earlier it was 1.4.0 here – Anilb May 12 '17 at 13:01

1 Answers1

2

In your case, you have to enable the Vector Drawable to use it in old android versions. Add this in your build.gradle file (module app).

For Gradle Plugin 2.0+

android {
       defaultConfig {
         vectorDrawables.useSupportLibrary = true
        }
     }

For Gradle Plugin 1.5 or below

 android {
      defaultConfig {
        // Stops the Gradle plugin’s automatic rasterization of vectors
        generatedDensities = []
      }
      // Flag notifies aapt to keep the attribute IDs around
      aaptOptions {
        additionalParameters "--no-version-vectors"
      }
    }

After do that, you have to change your ImageView to use the compat src like that:

  <ImageView
   app:srcCompat="@drawable/abc_vector_test"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>
Luiz Fernando Salvaterra
  • 4,192
  • 2
  • 24
  • 42
  • Luiz - I got errors in gradle sync on using either set of the lines in build.gradle file. With vectorDrawables line from your input, I got this: Error:(14, 0) Could not find property 'vectorDrawables' on ProductFlavor_Decorated{name=main, dimension=null, .... With generatedDensities line from your input I got this: Error:(14, 0) No such property: generatedDensities for class: com.android.build.gradle.internal.dsl.ProductFlavor_Decorated ... – Anilb May 10 '17 at 05:09
  • Also, I do not have any ImageView in use with abc_vector_test in my code. It seems to be an internal android file for which android is giving an error. – Anilb May 10 '17 at 05:14
  • @chris-banes - would you want to take a look at my question please? – Anilb May 10 '17 at 06:33