Referensi ke sumber daya lain tidak didukung oleh generasi PNG build-time

130

AndroidStudio 3.0 / Android Gradle plugin 3.0

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

Saya mendapatkan kesalahan ini:

referensi ke sumber daya lain tidak didukung oleh generasi PNG waktu bangun

Apakah mungkin untuk menyelesaikannya atau apakah itu solusi usang?

langme
sumber
Utas terkait - Diperbarui Android Studio ke 3.0 dan mendapatkan masalah ini . Padahal solusinya persis sama.
RBT

Jawaban:

315

Untuk mendukung API SDK <24 tambahkan baris berikut ke aplikasi Anda build.gradle:

defaultConfig{
   vectorDrawables.useSupportLibrary = true
}

Jika minSdkVersion Anda 24 atau lebih tinggi, maka masalah Anda akan teratasi dengan sendirinya, karena VectorDrawables memiliki dukungan penuh dimulai dengan API ini.

Lihat Android Developers: Solusi Kompatibilitas Vektor Drawable Backward untuk detail.

mwa91
sumber
4
Tetapi mengapa masalah muncul dan apakah solusi di atas merupakan perbaikan cepat atau strategi yang baik?
Pranaysharma
@Pranaysharma Lihat Pengembang Android: Solusi Kompatibilitas Vektor Drawable Backward untuk detail.
PointedEars
1
Catatan: useSupportLibrary adalah solusi yang salah untuk saya (min SDK 16, target 26), aplikasi macet di awal. Saya harus menghapus ini, menghapus @color dari vektor dan hanya mencari dan mengganti semua android: fillColor = potongan secara manual. Ini sangat cepat sebenarnya, ambil 10 detik
djdance
Di mana saya menambahkan baris ini?
Roymunson
@Roymunson di dalam kunci android. Lihatlah jawaban Wonil di utas ini sendiri.
RBT
14

Anda perlu menggunakan kode hex langsung tidak merujuk ke sumber daya.

<vector
  <path
    android:fillColor="#FFF"/></vector>
Oussema Aroua
sumber
1
ini adalah versi regresi ... jika Anda ingin mengubah warna, Anda dapat mengubah satu per satu ... lebih mudah untuk membuat referensi dalam file warna dan mengubahnya.
langme
ada sayangnya ini adalah satu-satunya cara untuk membuat aplikasi Anda berfungsi atau Anda harus menurunkan versi gradle Anda
Oussema Aroua
3
Saya juga memiliki masalah yang sama. Mengapa fitur yang sebelumnya berfungsi dengan baik dinonaktifkan? Apakah ini bug?
joaomgcd
Saya baru saja memperbarui ke AS3 dan mendapatkan masalah ini juga. Mengapa fitur itu dihapus?
Marty
1
Ini berfungsi sebagai solusi, tetapi jawaban "benar" adalah jawaban @ mwa91 untuk ditambahkan vectorDrawables.useSupportLibrary = trueke Anda build.gradle.
Sean Barbeau
9

Sedikit lebih banyak konteks untuk kesalahan ini:

  • Android 5.0 (API level 21) adalah versi pertama yang secara resmi mendukung gambar vektor.
  • Jika Anda menggunakan minSdkVersion lebih rendah dari 20, ada dua solusi untuk digambar vektor
    • Studio Aset Vector Studio Android menghasilkan PNG. Silakan lihat dokumen Android Studio . Tapi, referensi ke sumber daya lain tidak didukung oleh generasi PNG build-time.
    • Gunakan perpustakaan dukungan
  • Atau, gunakan 21 atau lebih untuk minSdkVersion

Untuk pustaka dukungan, tambahkan pernyataan ke file build.gradle Anda:

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

dependencies {
  compile 'com.android.support:appcompat-v7:23.2.0'
}
Wonil
sumber
@ MikeHanafey Bisakah Anda tunjukkan doc mengapa minSdkVersion harus 24? Terima kasih.
Wonil
Pesan di bawah ini terjadi kecuali minSdkVersion dinaikkan menjadi 24. Saya tidak punya penjelasan, dan menemukan ini hanya dengan menambah nilainya sampai gradle build berhasil. Kesalahan: java.lang.RuntimeException: java.lang.RuntimeException: Kesalahan saat memproses ./src/main/res/drawable/ic_selection_right_widen.xml: Tidak dapat memproses atribut android: fillColor = "@ color / kb_key_long_press_available": referensi ke yang lain sumber daya tidak didukung oleh generasi PNG build-time. Lihat developer.android.com/tools/help/vector-asset-studio.html untuk detailnya.
Mike Hanafey
3
@MikeHanafey minSdkVersion harus 24 hanya jika Anda menggunakan android: filltype, yang kadang-kadang dimasukkan oleh Android Vector Asset. Cukup singkirkan.
Simone
1
@Simone Terima kasih atas sarannya. Itulah masalah dalam kasus saya.
Abdul Rehman Yawar Khan
standar fillTypeadalah nonZerotetapi hanya berbeda dari evenOdddalam kasus-kasus tertentu: w3.org/TR/SVG/painting.html#FillRuleProperty
hmac
4

Jangan gunakan colorReference pada atribut fillColor di Vector drawable, cukup gunakan kode hexa

gunakan seperti ini

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

bukannya ini

<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 Me
sumber
2
Ini adalah tambalan, saya ingin dapat mengubah tema aplikasi saya tanpa menduplikasi semua gambar, juga membuat png alih-alih menjaga vektorial. Orang harus menggunakan solusi @ mwa91.
Kikiwa
0

Saya sudah bisa mengatasi ini dengan melakukan hal berikut:

  1. buat folder drawable-v21 dan salin semua xml drawable Anda yang menggunakan variabel di sana
  2. dalam folder yang dapat digambar asli, ubah semua ikon untuk menggunakan warna statis

Dengan cara ini kompiler akan bekerja

joaomgcd
sumber
1
Ya, mungkin karena API 21 mendukung Android 5.0 (Lollipop) yang mendukung gambar vektor secara asli. Namun, perangkat dengan versi sebelumnya mungkin tidak memiliki gambar yang tepat sama sekali: developer.android.com/guide/topics/graphics/…
PointedEars
0

Saya pikir Anda menggunakan android:fillColor="@color/image_button_disabled"kode ini untuk menggambar vektor.

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

Itu tidak didukung.

Ganti saja dengan android:fillColor="#c4ca5e"

Ahamadullah Saikat
sumber
0

Untuk menambahkan hingga @ mwa91, jawab .

Jika Anda membutuhkan tema dinamis drawable, tetapi Anda tidak punya waktu untuk memperbarui layout Anda dan pergi dengan @ mwa91 jawab dan ubah semua android:src="@drawable/..."atribut app:srcCompat="@drawable/...", Anda selalu dapat menggunakan nilai warna hex dalam drawable dan kemudian mewarnai drawable di ImageView:

<ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:src="@drawable/your_drawable"
      android:tint="@color/image_button_disabled"
      />
TheTechWolf
sumber