I riferimenti ad altre risorse non sono supportati dalla generazione di PNG in fase di creazione


130

AndroidStudio 3.0 / Android Gradle plugin 3.0

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

Ottengo questo errore:

i riferimenti ad altre risorse non sono supportati dalla generazione di PNG in fase di creazione

Sarà possibile risolverlo o è una soluzione obsoleta?


Discussione correlata - Aggiornato Android Studio alla 3.0 e ottengo questo problema . Sebbene la soluzione sia esattamente la stessa.
RBT

Risposte:


315

Per supportare API SDK <24 aggiungi la seguente riga alla tua app build.gradle:

defaultConfig{
   vectorDrawables.useSupportLibrary = true
}

Se minSdkVersion è 24 o superiore, il problema verrà risolto da solo, poiché VectorDrawables ha il supporto completo a partire da questa API.

Consulta gli sviluppatori Android: soluzione di compatibilità con le versioni precedenti di Drawable vettoriali per i dettagli.


4
Ma perché il problema si presenta e la soluzione sopra è una soluzione rapida o una buona strategia?
Pranaysharma,


1
nota: useSupportLibrary è la soluzione sbagliata per me (minimo SDK 16, target 26), l'app si blocca all'avvio. Ho dovuto rimuovere questo, rimuovere @color dai vettori e basta cercare e sostituire tutto Android: fillColor = pezzi manualmente. In realtà è molto veloce, impiega 10 secondi
djdance,

Dove aggiungo questa linea?
Roymunson,

@Roymunson all'interno della chiave Android. Guarda la risposta di Wonil in questo thread stesso.
RBT,

14

è necessario utilizzare il codice esadecimale direttamente non facendo riferimento a una risorsa.

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

1
è una versione di regressione ... se vuoi cambiare colore, sei in grado di cambiarne uno alla volta ... è più facile fare un riferimento nel file colore e cambiarlo.
langme,

sfortunatamente questo è l'unico modo per far funzionare la tua app o devi effettuare il downgrade della versione
graduale

3
Anch'io ho lo stesso problema. Perché una funzione che in precedenza funzionava correttamente sarebbe disabilitata? Questo è forse un bug?
joaomgcd,

Ho appena aggiornato AS3 e ho riscontrato anche questo problema. Perché quella funzione dovrebbe essere rimossa?
Marty,

1
Funziona come una soluzione alternativa, ma la risposta "giusta" è la risposta di @ mwa91 da aggiungere vectorDrawables.useSupportLibrary = truealla tua build.gradle.
Sean Barbeau,

9

Un po 'più di contesto per questo errore:

  • Android 5.0 (livello API 21) è stata la prima versione a supportare ufficialmente i disegni vettoriali.
  • Se si utilizza minSdkVersion inferiore a 20, esistono due soluzioni per il disegno vettoriale
    • Vector Asset Studio di Android Studio genera PNG. Dai un'occhiata al documento su Android Studio . Tuttavia, i riferimenti ad altre risorse non sono supportati dalla generazione di PNG in fase di creazione.
    • Usa la libreria di supporto
  • In alternativa, utilizzare 21 o versioni successive per minSdkVersion

Per la libreria di supporto, aggiungi un'istruzione al tuo file build.gradle:

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

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

@MikeHanafey Potresti indicare doc perché minSdkVersion deve avere 24 anni? Grazie.
Wonil,

Il messaggio seguente si verifica a meno che minSdkVersion non sia aumentato a 24. Non ho una spiegazione e l'ho trovato semplicemente incrementando il valore fino a quando la compilazione gradle non è riuscita. Errore: java.lang.RuntimeException: java.lang.RuntimeException: errore durante l'elaborazione ./src/main/res/drawable/ic_selection_right_widen.xml: impossibile elaborare l'attributo android: fillColor = "@ color / kb_key_long_press_available": riferimenti ad altri le risorse non sono supportate dalla generazione di PNG in tempo reale. Vedi developer.android.com/tools/help/vector-asset-studio.html per i dettagli.
Mike Hanafey,

3
@MikeHanafey minSdkVersion deve essere 24 solo se usi android: filltype, che a volte inserisce automaticamente l'Asset vettoriale Android. Sbarazzati di esso.
Simone,

1
@Simone Grazie per il suggerimento. Questo era il problema nel mio caso.
Abdul Rehman Yawar Khan,

l'impostazione predefinita fillTypeè nonZeroma differisce solo evenOddin alcuni casi: w3.org/TR/SVG/painting.html#FillRuleProperty
hmac

4

Non usare colorReference nell'attributo fillColor nel disegno vettoriale usando solo il codice hexa

usare così

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

Invece di questo

<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
Questa è una patch, voglio essere in grado di ri-tema la mia app senza duplicare tutti i disegni, inoltre sta creando png invece di mantenere vettoriali. Le persone dovrebbero usare la soluzione di @ mwa91.
Kikiwa,


0

Sono stato in grado di aggirare questo facendo quanto segue:

  1. crea una cartella drawable-v21 e copia tutti i tuoi xmls disegnabili che usano le variabili lì
  2. nella cartella di disegno originale cambia tutte le icone per usare un colore statico

In questo modo il compilatore funzionerà


1
Sì, probabilmente perché l'API 21 supporta Android 5.0 (Lollipop) che supporta nativamente disegni disegnabili. Tuttavia, i dispositivi con versioni precedenti potrebbero quindi non avere alcuna immagine corretta: developer.android.com/guide/topics/graphics/…
Pointed Ears

0

Penso che tu stia usando android:fillColor="@color/image_button_disabled"questo codice per il disegno vettoriale.

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

Non è supportato

Basta sostituirlo con android:fillColor="#c4ca5e"


0

Per aggiungere una risposta a @ mwa91 .

Nel caso in cui sia necessario un tema dinamico di drawable, ma non si ha il tempo di aggiornare i layout e andare con la risposta @ mwa91 e modificare tutti gli attributi , è sempre possibile utilizzare il valore esadecimale del colore in drawable e poi tingere il drawable in ImageView:android:src="@drawable/..."app:srcCompat="@drawable/..."

<ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:src="@drawable/your_drawable"
      android:tint="@color/image_button_disabled"
      />
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.