As referências a outros recursos não são suportadas pela geração PNG em tempo de construção

130

AndroidStudio 3.0 / Plugin Android Gradle 3.0

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

Eu recebo este erro:

referências a outros recursos não são suportadas pela geração PNG em tempo de construção

Será possível resolvê-lo ou é uma solução obsoleta?

Langme
fonte
Tópico relacionado - Atualizado o Android Studio para 3.0 e obtendo este problema . Embora a solução seja exatamente a mesma.
RBT

Respostas:

315

Para oferecer suporte ao API SDK <24, adicione a seguinte linha ao seu aplicativo build.gradle:

defaultConfig{
   vectorDrawables.useSupportLibrary = true
}

Se o seu minSdkVersion for 24 ou superior, o problema será resolvido por si só, porque o VectorDrawables tem suporte total a partir desta API.

Consulte Desenvolvedores Android: Solução de compatibilidade com versões anteriores de gavetas vetoriais para obter detalhes.

mwa91
fonte
4
Mas por que o problema está surgindo e a solução acima é uma correção rápida ou uma boa estratégia?
Pranaysharma 23/11
1
Observação: useSupportLibrary é a solução errada para mim (SDK 16 min, destino 26), o aplicativo trava no início. Eu tive que remover isso, remover @color de vetores e basta pesquisar e substituir todos os android: fillColor = pieces manualmente. Ele é muito rápido na verdade, levar 10 segundos
djdance
Onde adiciono esta linha?
Roymunson 17/05/19
@Roymunson dentro da chave do Android. Veja a resposta de Wonil neste tópico.
RBT
14

você precisa usar o código hexadecimal diretamente, não se referindo a um recurso.

<vector
  <path
    android:fillColor="#FFF"/></vector>
Oussema Aroua
fonte
1
é uma versão de regressão ... se você quiser alterar a cor, poderá alterar um por um ... é mais fácil fazer uma referência no arquivo de cores e alterá-lo.
Langme 27/10/19
Há, infelizmente, esta é a única maneira de fazer seus trabalhos de aplicativos ou você tem que fazer o downgrade sua versão Gradle
Oussema Aroua
3
Eu também tenho o mesmo problema. Por que um recurso que estava funcionando corretamente seria desativado? Isso é talvez um bug?
Joaomgcd 27/10/2015
Acabei de atualizar para o AS3 e também tenho esse problema. Por que esse recurso seria removido?
Marty
1
Isso funciona como uma solução alternativa, mas a resposta "certa" é a resposta de @ mwa91 para adicionar vectorDrawables.useSupportLibrary = trueà sua build.gradle.
22817 Sean Barbeau
9

Um pouco mais de contexto para este erro:

  • O Android 5.0 (API nível 21) foi a primeira versão a oferecer suporte oficial a drawables vetoriais.
  • Se você usar minSdkVersion menor que 20, existem duas soluções para desenho vetorial
    • O Vector Asset Studio do Android Studio gera PNG. Por favor, dê uma olhada no documento do Android Studio . Porém, referências a outros recursos não são suportadas pela geração PNG em tempo de construção.
    • Usar biblioteca de suporte
  • Ou use 21 ou acima para minSdkVersion

Para a biblioteca de suporte, inclua uma instrução no seu arquivo build.gradle:

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

dependencies {
  compile 'com.android.support:appcompat-v7:23.2.0'
}
Wonil
fonte
@MikeHanafey Você poderia apontar o porquê minSdkVersion deve ter 24 anos? Obrigado.
Wonil
A mensagem abaixo ocorre a menos que minSdkVersion seja aumentado para 24. Não tenho uma explicação, e achei isso simplesmente incrementando o valor até que a construção da gradação tenha êxito. Erro: java.lang.RuntimeException: java.lang.RuntimeException: erro ao processar ./src/main/res/drawable/ic_selection_right_widen.xml: Não é possível processar o atributo android: fillColor = "@ color / kb_key_long_press_available": referências a outros recursos não são suportados pela geração PNG em tempo de construção. Consulte developer.android.com/tools/help/vector-asset-studio.html para obter detalhes.
21818 Mike Hanafey
3
O @MikeHanafey minSdkVersion deve ter 24 apenas se você usar android: filltype, que às vezes o Android Vector Asset coloca automaticamente. Basta se livrar dele.
Simone
1
@ Simone Obrigado pela sugestão. Esse foi o problema no meu caso.
Abdul Rehman Yawar Khan
o padrão fillTypeé nonZeromas difere apenas evenOddem certos casos: w3.org/TR/SVG/painting.html#FillRuleProperty
hmac
4

Não use o atributo colorReference no fillColor no Drawable Vector, apenas use o código hexa

use assim

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

em vez disso

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

Sai Gopi N
fonte
2
Este é um patch, eu quero poder re-tema meu aplicativo sem duplicar todos os drawables, também está criando png em vez de manter vetor. As pessoas devem usar a solução do @ mwa91.
Kikiwa
0

Consegui contornar isso fazendo o seguinte:

  1. crie uma pasta drawable-v21 e copie todos os seus xmls drawable que usam variáveis ​​lá
  2. na pasta drawable original, altere todos os ícones para usar uma cor estática

Dessa forma, o compilador funcionará

joaomgcd
fonte
1
Sim, provavelmente porque a API 21 suporta o Android 5.0 (Lollipop), que suporta nativamente os desenhos vetoriais. No entanto, os dispositivos com versões anteriores podem não ter imagens apropriadas: developer.android.com/guide/topics/graphics/…
PointedEars
0

Eu acho que você está usando android:fillColor="@color/image_button_disabled"esse código para desenho vetorial.

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

Não é suportado.

Apenas substitua-o por android:fillColor="#c4ca5e"

Ahamadullah Saikat
fonte
0

Para adicionar a resposta @ mwa91 .

Caso você precise de um tema dinâmico do drawable, mas não tenha tempo para atualizar seus layouts, vá com a resposta @ mwa91 e altere todos os atributos para , você sempre pode usar o valor da cor hexadecimal no drawable e depois tingir o drawable no 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"
      />
TheTechWolf
fonte