References to other resources are not supported by build-time PNG generation

AndroidResourcesAndroid Studio-3.0

Android Problem Overview


AndroidStudio 3.0 / Android Gradle plugin 3.0

<vector>
  <path android:fillColor="@color/image_button_disabled"/>
</vector>

I get this error:

> references to other resources are not supported by build-time PNG generation

Will it be possible to resolve it or is it a deprecated solution?

Android Solutions


Solution 1 - Android

To support API SDK < 24 add the following line to your app build.gradle inside the android block:

defaultConfig {
   vectorDrawables.useSupportLibrary = true
}

If your minSdkVersion is 24 or higher, then your issue will be resolved on its own, because VectorDrawables have full support starting with this API.

See Android Developers: Vector Drawables Backward Compatibility Solution for details.

Solution 2 - Android

you need to use the hex code directly not referring to a resource.

<vector
  <path
    android:fillColor="#FFF"/></vector>

Solution 3 - Android

Little bit more context for this error:

  • Android 5.0 (API level 21) was the first version to officially support vector drawables.
  • If you use minSdkVersion lower than 20, there are two solutions for vector drawable
    • Android Studio's Vector Asset Studio generate PNG. Please take a look Android Studio document. But, references to other resources are not supported by build-time PNG generation.
    • Use support library
  • Or, use 21 or above for minSdkVersion

For support library, add a statement to your build.gradle file:

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

dependencies {
  compile 'com.android.support:appcompat-v7:23.2.0'
}

Solution 4 - Android

Do not use colorReference at fillColor attribute in Vector drawable just use hexa code

use like this

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24.0"
    android:viewportHeight="24.0">
<path
    android:fillColor="#1abc9c"
    android:pathData="M9,11L7,11v2h2v-2zM13,11h-2v2h2v-2zM17,11h-2v2h2v-2zM19,4h-1L18,2h-2v2L8,4L8,2L6,2v2L5,4c-1.11,0 -1.99,0.9 -1.99,2L3,20c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,6c0,-1.1 -0.9,-2 -2,-2zM19,20L5,20L5,9h14v11z"/>

instead of this

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24.0"
    android:viewportHeight="24.0">
<path
    android:fillColor="@color/colorPrimary"
    android:pathData="M9,11L7,11v2h2v-2zM13,11h-2v2h2v-2zM17,11h-2v2h2v-2zM19,4h-1L18,2h-2v2L8,4L8,2L6,2v2L5,4c-1.11,0 -1.99,0.9 -1.99,2L3,20c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,6c0,-1.1 -0.9,-2 -2,-2zM19,20L5,20L5,9h14v11z"/>

Solution 5 - Android

If your minSdkVersion is 21 you can disable the generation of PNG by adding this line:

// set to an empty list to disable the feature
vectorDrawables.generatedDensities = [] 

Removing this line will still generate the PNGs.

Source: http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.VectorDrawablesOptions.html

Solution 6 - Android

I've been able to work around this by doing the following:

  1. create a drawable-v21 folder and copy all your drawable xmls that use variables there
  2. in the original drawable folder change all the icons to use a static color

This way the compiler will work

Solution 7 - Android

I think you are using android:fillColor="@color/image_button_disabled" this code for vector drawable.

// image_button_disabled.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/circular_image_color_pressed" android:state_pressed="true" />
    <item android:color="@color/circular_image_color_normal" />
</selector>

It's not supported.

Just replace it with android:fillColor="#c4ca5e"

Solution 8 - Android

To add up to @mwa91 answer.

In case you need dynamic theming of drawable, but you don't have time to update your layouts and go with @mwa91 answer and change all android:src="@drawable/..." attributes to app:srcCompat="@drawable/...", you can always use hex color value in drawable and then later tint the drawable in ImageView:

<ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:src="@drawable/your_drawable"
      android:tint="@color/image_button_disabled"
      />

Solution 9 - Android

Remove the filltype and the warning will disappear. That's because:

> minSdkVersion must be 24 only if you use android:filltype

> The default fillType is nonZero but it only differs from evenOdd in certain cases

Make sure you don't need filltype, of course. In some cases it may affect the appearance of your vector drawable. You most likely don't need it if your icons are simple. It's sometimes added automatically, for instance when you import vector drawables from SVG.

Check this page for an explanation what it does w3.org/TR/SVG/painting.html#FillRuleProperty

Credit goes to @Simone and @hmac


A simple alternative is to use a color value directly, instead of using a color reference.

android:fillColor="#FF00AABB" // use this
android:fillColor="@color/image_button_disabled" // instead of this

Another alternative is settings this, but I'd rather avoid it:

defaultConfig {
   vectorDrawables.useSupportLibrary = true
}

The last resort alternative is to increase your minSdkVersion to 24.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionlangmeView Question on Stackoverflow
Solution 1 - Androidmwa91View Answer on Stackoverflow
Solution 2 - AndroidOussema ArouaView Answer on Stackoverflow
Solution 3 - AndroidWonilView Answer on Stackoverflow
Solution 4 - Androidsaigopi.meView Answer on Stackoverflow
Solution 5 - AndroidPolView Answer on Stackoverflow
Solution 6 - AndroidjoaomgcdView Answer on Stackoverflow
Solution 7 - AndroidAhamadullah SaikatView Answer on Stackoverflow
Solution 8 - AndroidTheTechWolfView Answer on Stackoverflow
Solution 9 - AndroidStanView Answer on Stackoverflow