Ссылки на другие ресурсы не поддерживаются генерацией PNG во время сборки.

131

Плагин AndroidStudio 3.0 / Android Gradle 3.0

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

Я получаю такую ​​ошибку:

ссылки на другие ресурсы не поддерживаются генерацией PNG во время сборки

Можно ли будет решить эту проблему или это устаревшее решение?

langme
источник
Связанная ветка - Обновлена ​​Android Studio до 3.0 и возникает эта проблема . Хотя решение точно такое же.
RBT

Ответы:

315

Для поддержки API SDK <24 добавьте в приложение следующую строку build.gradle:

defaultConfig{
   vectorDrawables.useSupportLibrary = true
}

Если ваш minSdkVersion равен 24 или выше, ваша проблема будет решена сама по себе, потому что VectorDrawables имеет полную поддержку, начиная с этого API.

Подробности см. В разделе « Разработчики Android: решение обратной совместимости векторных чертежей» .

mwa91
источник
4
Но почему возникает проблема и является ли вышеуказанное решение быстрым исправлением или хорошей стратегией?
Pranaysharma
@Pranaysharma Подробнее см. В разделе « Разработчики Android: решение обратной совместимости векторных чертежей» .
PointedEars
1
примечание: useSupportLibrary - неправильное решение для меня (min SDK 16, target 26), приложение вылетает при запуске. Мне пришлось удалить это, удалить @color из векторов и просто вручную найти и заменить все android: fillColor = штуки. На самом деле это очень быстро, займет 10 секунд
djdance
Где мне добавить эту строку?
Роймунсон
@Roymunson внутри ключа Android. Посмотрите ответ Вонила в этой теме.
RBT
14

вам нужно использовать шестнадцатеричный код напрямую, не ссылаясь на ресурс.

<vector
  <path
    android:fillColor="#FFF"/></vector>
Oussema Aroua
источник
1
это регрессионная версия ... если вы хотите изменить цвет, вы можете менять его один за другим ... проще сделать ссылку в цветном файле и изменить ее.
langme
к сожалению, это единственный способ заставить ваше приложение работать, или вам придется понизить версию
Gradle
3
У меня тоже такая же проблема. Зачем отключать функцию, которая раньше работала нормально? Это может быть ошибка?
joaomgcd
Я только что обновился до AS3 и тоже столкнулся с этой проблемой. Почему эта функция была удалена?
Марти
1
Это работает как обходной путь, но «правильный» ответ - это ответ @mwa91, который нужно добавить vectorDrawables.useSupportLibrary = trueв ваш build.gradle.
Шон Барбо
10

Немного больше контекста для этой ошибки:

  • Android 5.0 (уровень API 21) был первой версией, официально поддерживающей векторные чертежи.
  • Если вы используете minSdkVersion ниже 20, есть два решения для векторного рисования
    • Vector Asset Studio Android Studio генерирует PNG. Пожалуйста, посмотрите документ Android Studio . Но ссылки на другие ресурсы не поддерживаются генерацией PNG во время сборки.
    • Использовать библиотеку поддержки
  • Или используйте 21 или выше для minSdkVersion

Для библиотеки поддержки добавьте инструкцию в свой файл build.gradle:

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

dependencies {
  compile 'com.android.support:appcompat-v7:23.2.0'
}
Wonil
источник
@MikeHanafey Не могли бы вы указать, почему minSdkVersion должно быть 24? Спасибо.
Вонил
Сообщение ниже появляется, если minSdkVersion не увеличен до 24. У меня нет объяснения, и я нашел это, просто увеличив значение до тех пор, пока сборка gradle не завершилась успешно. Ошибка: java.lang.RuntimeException: java.lang.RuntimeException: ошибка при обработке ./src/main/res/drawable/ic_selection_right_widen.xml: не удается обработать атрибут android: fillColor = "@ color / kb_key_long_press_available": ссылки на другие ресурсы не поддерживаются генерацией PNG во время сборки. Подробности см. На сайте developer.android.com/tools/help/vector-asset-studio.html .
Майк Ханафей
3
@MikeHanafey minSdkVersion должно быть 24, только если вы используете android: filltype, который иногда автоматически вставляется векторным активом Android. Просто избавьтесь от него.
Simone
1
@Simone Спасибо за предложение. Это было проблемой в моем случае.
Абдул Рехман Явар Хан
по умолчанию fillType, nonZeroно отличается от него только evenOddв некоторых случаях: w3.org/TR/SVG/painting.html#FillRuleProperty
hmac
4

Не используйте colorReference в атрибуте fillColor в Vector drawable, просто используйте шестнадцатеричный код

использовать как это

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

вместо этого

<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
Это патч, я хочу иметь возможность перепрограммировать свое приложение без дублирования всех чертежей, а также он создает png вместо сохранения векторности. Люди должны использовать решение @mwa91.
Kikiwa
0

Мне удалось обойти это, выполнив следующие действия:

  1. создайте папку drawable-v21 и скопируйте все ваши рисованные xmls, которые используют там переменные
  2. в исходной папке с возможностью рисования измените все значки, чтобы использовать статический цвет

Так компилятор будет работать

joaomgcd
источник
1
Да, вероятно, потому что API 21 поддерживает Android 5.0 (Lollipop), который изначально поддерживает векторные чертежи. Однако устройства с более ранними версиями могут вообще не иметь подходящих изображений: developer.android.com/guide/topics/graphics/…
PointedEars
0

Я думаю, вы используете android:fillColor="@color/image_button_disabled"этот код для векторного рисования.

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

Не поддерживается.

Просто замените его на android:fillColor="#c4ca5e"

Ахамадулла Сайкат
источник
0

Чтобы добавить до @ mwa91 ответ .

В случае, если вам нужно динамическое оформление тем для рисования, но у вас нет времени обновлять макеты и идти с ответом @ mwa91 и изменять все атрибуты на , вы всегда можете использовать шестнадцатеричное значение цвета в drawable, а затем тонировать рисованные в 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
источник