web-dev-qa-db-fra.com

Les références à d'autres ressources ne sont pas prises en charge par la génération de fichiers PNG au moment de la construction.

AndroidStudio 3.0/Android Gradle plugin 3.0

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

Je reçois cette erreur:

les références à d'autres ressources ne sont pas prises en charge par la génération de PNG au moment de la construction

Sera-t-il possible de le résoudre ou est-ce une solution obsolète?

101
langme

Dans votre application, build.gradle, ajoutez la ligne suivante:

defaultConfig{
   vectorDrawables.useSupportLibrary = true
}

Voir Développeurs Android: Solution de compatibilité ascendante Vector Drawables pour plus de détails.

211
mwa91

vous devez utiliser directement le code hexadécimal sans faire référence à une ressource.

<vector
  <path
    Android:fillColor="#FFF"/></vector>
9
Oussema Aroua

Un peu plus de contexte pour cette erreur:

  • Android 5.0 (API de niveau 21) est la première version à prendre officiellement en charge le dessin vectoriel. 
  • Si vous utilisez minSdkVersion inférieur à 20, il existe deux solutions de dessin vectoriel
    • Vector Asset Studio d'Android Studio génère le format PNG. S'il vous plaît jeter un oeil Document Android Studio . Cependant, les références à d'autres ressources ne sont pas prises en charge par la génération de PNG au moment de la construction.
    • Utiliser la bibliothèque de support
  • Ou utilisez 21 ou plus pour minSdkVersion

Pour la bibliothèque de support, ajoutez une déclaration à votre fichier build.gradle:

Android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

dependencies {
  compile 'com.Android.support:appcompat-v7:23.2.0'
}
7
Wonil

Si votre minSdkVersion est 21, vous pouvez désactiver la génération de PNG en ajoutant cette ligne:

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

La suppression de cette ligne générera toujours les PNG. 

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

4
user40797

Ne pas utiliser l'attribut colorReference at fillColor dans le vecteur pouvant être dessiné 

utiliser comme ça 

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

au lieu de cela

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

2
saigopi

J'ai pu contourner ce problème en procédant comme suit:

  1. créez un dossier drawable-v21 et copiez tous vos fichiers xml pouvant être utilisés qui utilisent des variables
  2. dans le dossier pouvant être dessiné d'origine, changez toutes les icônes pour utiliser une couleur statique

De cette façon, le compilateur fonctionnera

0
joaomgcd

Pour ajouter @ mwa91répondre .

Si vous avez besoin d'une thématisation dynamique de dessin, mais que vous n'avez pas le temps de mettre à jour vos mises en page et d'aller avec @ mwa91answer et de changer tous les attributs Android:src="@drawable/..." en app:srcCompat="@drawable/...", vous pouvez toujours utiliser la valeur de couleur hex drawable et plus tard teinte le dessinable dans ImageView:

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

Je pense que vous utilisez Android:fillColor="@color/image_button_disabled" ce code pour le dessin vectoriel.

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

Ce n'est pas pris en charge.

Il suffit de le remplacer par Android:fillColor="#c4ca5e"

0
Ahamadullah Saikat