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


AndroidStudio 3.0 / Android Gradle plugin 3.0

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

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

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

можно ли его решить или это устаревшее решение?

6 80

6 ответов:

в приложении build.gradle добавить следующую строку:

defaultConfig{
   vectorDrawables.useSupportLibrary = true
}

посмотреть Разработчики Android: Решение Обратной Совместимости Векторных Чертежей для сведения.

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

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

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

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

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

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

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

Не используйте colorReference в атрибуте fillColor в векторном drawable просто используйте код hexa

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

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

Если ваша minSdkVersion равна 21, Вы можете отключить генерацию PNG, добавив эту строку:

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

удаление этой строки по-прежнему будет генерировать png.

источник: http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.VectorDrawablesOptions.html

Я смог обойти это следующим образом:

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

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