android - La generación de PNG en tiempo de compilación no admite referencias a otros recursos
resources android-studio-3.0 (8)
AndroidStudio 3.0 / Android Gradle plugin 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 PNG en tiempo de construcción
¿Será posible resolverlo o es una solución obsoleta?
Creo que está utilizando
android:fillColor="@color/image_button_disabled"
este código para el
android:fillColor="@color/image_button_disabled"
vectorial.
// 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.
Simplemente reemplácelo con
android:fillColor="#c4ca5e"
En su aplicación
build.gradle
agregue la siguiente línea:
defaultConfig{
vectorDrawables.useSupportLibrary = true
}
Consulte Desarrolladores de Android: solución de compatibilidad con versiones anteriores de Vector Drawables para obtener más información.
He podido solucionar esto haciendo lo siguiente:
- cree una carpeta drawable-v21 y copie todos sus xmls dibujables que usen variables allí
- en la carpeta dibujable original, cambie todos los iconos para usar un color estático
De esta manera el compilador funcionará
No use colorReference en el atributo fillColor en Vector dibujable, solo use código hexa
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"/>
Para agregar a answer .
En caso de que necesite temas dinámicos de drawable, pero no tiene tiempo para actualizar sus diseños e ir con
answer
y cambiar todos los atributos
android:src="@drawable/..."
a
app:srcCompat="@drawable/..."
, siempre puede usar el valor de color hexadecimal en dibujable y luego teñir el dibujable en ImageView:
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/your_drawable"
android:tint="@color/image_button_disabled"
/>
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 seguirá generando los PNG.
Un poco más de contexto para este error:
- Android 5.0 (API nivel 21) fue la primera versión que admitió oficialmente los dibujos vectoriales.
-
Si usa minSdkVersion inferior a 20, hay dos soluciones para el dibujo vectorial.
- El Vector Asset Studio de Android Studio genera PNG. Por favor, eche un vistazo al documento de Android Studio . Pero las referencias a otros recursos no son compatibles con la generación de PNG en tiempo de construcció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''
}
necesita usar el código hexadecimal directamente sin referirse a un recurso.
<vector
<path
android:fillColor="#FFF"/></vector>