他のリソースへの参照は、ビルド時のPNG生成ではサポートされていません


130

AndroidStudio 3.0 / Android Gradleプラグイン3.0

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

私はこのエラーを受け取ります:

他のリソースへの参照は、ビルド時のPNG生成ではサポートされていません

それを解決することは可能ですか、それとも非推奨のソリューションですか?


関連スレッド-Android Studioを3.0に更新し、この問題が発生しました。解決策はまったく同じですが。
RBTは2018

回答:


315

API SDK <24をサポートするには、次の行をアプリに追加しますbuild.gradle

defaultConfig{
   vectorDrawables.useSupportLibrary = true
}

minSdkVersionが24以上の場合、VectorDrawableはこのAPIから完全にサポートされているため、問題は自動的に解決されます。

詳細については、Androidデベロッパー:ベクタードローアブルの下位互換性ソリューションをご覧ください。


4
しかし、なぜ問題が発生し、上記の解決策はクイックフィックスまたは優れた戦略ですか?
Pranaysharma

@Pranaysharma詳細については、Androidデベロッパー:ベクタードローアブルの下位互換性ソリューションをご覧ください。
PointedEars 2018年

1
注:useSupportLibraryは私にとっては間違ったソリューションです(最小SDK 16、ターゲット26)。アプリは起動時にクラッシュします。私はこれを削除し、ベクトルから@colorを削除し、すべてのandroid:fillColor =個を手動で検索して置き換える必要がありました。実際には非常に高速で、10秒かかります
djdance 2018

この行はどこに追加しますか?
Roymunson、

Androidキー内の@Roymunson。このスレッド自体でWonilの答えを見てください。
RBTは2018

14

リソースを参照せずに16進コードを直接使用する必要があります。

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

1
これは回帰バージョンです...色を変更したい場合は、1つずつ変更できます...カラーファイルで参照を作成して変更する方が簡単です。
langme

残念ながら、これがアプリを動作させる唯一の方法であるか、
gradle

3
私も同じ問題を抱えています。以前は正常に機能していた機能が無効になるのはなぜですか?これはバグでしょうか?
joaomgcd 2017年

AS3にアップデートして、この問題も発生しました。なぜその機能が削除されるのですか?
Marty、

1
これは回避策として機能vectorDrawables.useSupportLibrary = trueしますが、「正しい」答えはに追加する@ mwa91の答えbuild.gradleです。
Sean Barbeau

9

このエラーのもう少しコンテキスト:

  • Android 5.0(APIレベル21)は、ベクタードローアブルを公式にサポートした最初のバージョンでした。
  • 20未満のminSdkVersionを使用する場合、ベクタードローアブルには2つの解決策があります
    • Android StudioのVector Asset StudioはPNGを生成します。Android Studioのドキュメントをご覧ください。ただし、他のリソースへの参照は、ビルド時のPNG生成ではサポートされていません。
    • サポートライブラリを使用する
  • または、minSdkVersionに21以上を使用します

サポートライブラリの場合は、build.gradleファイルにステートメントを追加します。

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

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

@MikeHanafey minSdkVersionが24でなければならない理由をドキュメントで指摘していただけませんか?ありがとう。
Wonil 2018年

以下のメッセージは、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をご覧ください。
Mike Hanafey、2018年

3
@MikeHanafey minSdkVersionは、android:filltypeを使用する場合にのみ24にする必要があります。これは、Android Vector Assetによって自動的に挿入される場合があります。削除するだけです。
Simone

1
@ Simone提案ありがとうございます。それが私の場合の問題でした。
Abdul Rehman Yawar Khan

デフォルトfillTypeは次のとおりですが、特定の場合nonZeroとのみ異なるevenOddw3.org/TR/SVG/painting.html#FillRuleProperty
hmac

4

ベクタードローアブルのfillColor属性でcolorReferenceを使用しないでください。ヘキサコードを使用してください。

このように使う

<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のソリューションを使用すべきです。
キキワ2018


0

私は次のようにすることでこれを回避することができました:

  1. drawable-v21フォルダーを作成し、そこに変数を使用するすべての描画可能なxmlをコピーします
  2. 元のドローアブルフォルダーで、すべてのアイコンを変更して静的な色を使用する

このようにしてコンパイラは動作します


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の 回答ですべてのandroid:src="@drawable/..."属性をapp:srcCompat="@drawable/..."に変更する時間がない場合は、ドローアブルで常に16進数の色の値を使用し、後でImageViewでドローアブルに色を付けることができます。

<ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:src="@drawable/your_drawable"
      android:tint="@color/image_button_disabled"
      />
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.