Las referencias a otros recursos no son compatibles con la generación PNG en tiempo de compilación

5 minutos de lectura

avatar de usuario
idioma

AndroidStudio 3.0 / Complemento Android Gradle 3.0

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

me sale este error:

las referencias a otros recursos no son compatibles con la generación de PNG en tiempo de compilación

¿Será posible resolverlo o es una solución obsoleta?

  • Hilo relacionado: se actualizó Android Studio a 3.0 y se obtuvo este problema. Aunque la solución es exactamente la misma.

    – RBT

    30 de agosto de 2018 a las 5:30


avatar de usuario
mwa91

Para admitir API SDK < 24, agregue la siguiente línea a su aplicación build.gradle dentro de android bloquear:

defaultConfig {
   vectorDrawables.useSupportLibrary = true
}

Si su minSdkVersion es 24 o superior, entonces su problema se resolverá por sí solo, porque VectorDrawables tiene soporte completo a partir de esta API.

Ver Desarrolladores de Android: solución de compatibilidad con versiones anteriores de Vector Drawables para detalles.

  • Pero, ¿por qué surge el problema y la solución anterior es una solución rápida o una buena estrategia?

    – Pranaysharma

    23 de noviembre de 2017 a las 3:24

  • @Pranaysharma Ver Desarrolladores de Android: solución de compatibilidad con versiones anteriores de Vector Drawables para detalles.

    – Orejas puntiagudas

    23 de enero de 2018 a las 7:46


  • nota: useSupportLibrary es una solución incorrecta para mí (min SDK 16, target 26), la aplicación falla al iniciar. Tuve que eliminar esto, eliminar @color de los vectores y simplemente buscar y reemplazar todas las piezas de android:fillColor= manualmente. Es muy rápido en realidad, toma 10 segundos.

    – djdance

    15 de febrero de 2018 a las 10:02


  • ¿Dónde agrego esta línea?

    – Foobar

    17 mayo 2018 a las 21:56

  • @Roymunson dentro de la clave de Android. Mira la respuesta de Wonil en este mismo hilo.

    – RBT

    30 de agosto de 2018 a las 5:15

necesita usar el código hexadecimal directamente sin referirse a un recurso.

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

  • es una versión de regresión… si desea cambiar de color, puede cambiar uno por uno… es más fácil hacer una referencia en el archivo de color y cambiarlo.

    – idioma

    27/10/2017 a las 15:40

  • desafortunadamente, esta es la única forma de hacer que su aplicación funcione o tiene que degradar su versión de Gradle

    –Oussema Aroua

    27/10/2017 a las 15:43

  • Yo también tengo el mismo problema. ¿Por qué se deshabilitaría una función que anteriormente funcionaba bien? ¿Es esto quizás un error?

    – joaomgcd

    27/10/2017 a las 17:51

  • Acabo de actualizar a AS3 y también tengo este problema. ¿Por qué se eliminaría esa función?

    – marty

    29/10/2017 a las 18:20

  • Esto funciona como una solución alternativa, pero la respuesta “correcta” es la respuesta de @ mwa91 para agregar vectorDrawables.useSupportLibrary = true para usted build.gradle.

    – Sean Barbeau

    22 de diciembre de 2017 a las 19:51


Un poco más de contexto para este error:

  • Android 5.0 (nivel de API 21) fue la primera versión que admitió oficialmente elementos de diseño vectoriales.
  • Si usa minSdkVersion inferior a 20, hay dos soluciones para vector dibujable
    • Vector Asset Studio de Android Studio genera PNG. Por favor echa un vistazo Documento de estudio de Android. Sin embargo, las referencias a otros recursos no son compatibles con la generación PNG en tiempo de compilación.
    • Usar biblioteca de soporte
  • O use 21 o superior para minSdkVersion

Para la biblioteca de soporte, agregue una declaración a su archivo build.gradle:

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

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

  • @MikeHanafey ¿Podría señalar al doctor por qué minSdkVersion debe ser 24? Gracias.

    – Wonil

    23 de noviembre de 2018 a las 2:08

  • El siguiente mensaje aparece a menos que minSdkVersion se incremente a 24. No tengo una explicación, y encontré esto simplemente incrementando el valor hasta que la compilación de Gradle tuvo éxito. Error: java.lang.RuntimeException: java.lang.RuntimeException: error al procesar ./src/main/res/drawable/ic_selection_right_widen.xml: no se puede procesar el atributo android:fillColor=”@color/kb_key_long_press_disponible”: referencias a otros los recursos no son compatibles con la generación PNG en tiempo de compilación. Ver desarrollador.android.com/tools/help/vector-asset-studio.html para detalles.

    – Mike Hanafey

    24/11/2018 a las 22:45

  • @MikeHanafey minSdkVersion debe ser 24 solo si usa android:filltype, que a veces Android Vector Asset coloca automáticamente. Simplemente deshágase de él.

    – Simona

    2 de abril de 2019 a las 7:55

  • @Simone Gracias por la sugerencia. Ese fue el problema en mi caso.

    –Abdul Rehman Yawar Khan

    17 de septiembre de 2019 a las 9:07

  • defecto fillType es nonZero pero solo se diferencia de evenOdd en algunos casos: w3.org/TR/SVG/painting.html#FillRuleProperty

    – hmac

    9 de junio de 2020 a las 10:17


No use colorReference en el atributo fillColor en Vector dibujable, solo use código hexadecimal

usar así

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

en lugar de esto

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

Si su minSdkVersion es 21, puede deshabilitar la generación de PNG agregando esta línea:

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

Eliminar esta línea aún generará los PNG.

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

avatar de usuario
joaomgcd

He podido solucionar esto haciendo lo siguiente:

  1. cree una carpeta dibujable-v21 y copie todos sus xml dibujables que usan variables allí
  2. en la carpeta dibujable original, cambie todos los íconos para usar un color estático

De esta manera el compilador funcionará.

avatar de usuario
Ahamadullah Saikat

creo que estas usando android:fillColor="@color/image_button_disabled" este código para vector dibujable.

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

No es compatible.

Solo reemplázalo con android:fillColor="#c4ca5e"

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad