Diğer kaynaklara yapılan başvurular, derleme sırasında PNG oluşturma tarafından desteklenmez


131

AndroidStudio 3.0 / Android Gradle eklentisi 3.0

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

Bu hatayı alıyorum:

diğer kaynaklara başvurular, derleme sırasında PNG oluşturma tarafından desteklenmez

Çözmek mümkün olacak mı yoksa kullanımdan kaldırılmış bir çözüm mü?


İlgili konu - Android Studio 3.0'a güncellendi ve bu sorunu alıyorum . Yine de çözüm tamamen aynı.
— RBT

Yanıtlar:


315

API SDK <24'ü desteklemek için uygulamanıza aşağıdaki satırı ekleyin build.gradle:

defaultConfig{
   vectorDrawables.useSupportLibrary = true
}

MinSdkVersion 24 veya daha yüksekse, sorununuz kendiliğinden çözülecektir çünkü VectorDrawables bu API ile başlayan tam desteğe sahiptir.

Ayrıntılar için Android Geliştiricileri: Vector Drawables Geriye Dönük Uyumluluk Çözümü'ne bakın.


4
Ancak sorun neden ortaya çıkıyor ve yukarıdaki çözüm bir hızlı düzeltme mi yoksa iyi bir strateji mi?
— Pranaysharma


1
not: useSupportLibrary benim için yanlış çözüm (min. SDK 16, hedef 26), uygulama başlangıçta çöküyor. Bunu kaldırmam, vektörlerden @color'u kaldırmam ve tüm android: fillColor = parçalarını manuel olarak arayıp değiştirmem gerekiyordu. Aslında çok hızlı, 10 saniye sürüyor
— djdance

Bu satırı nereye eklerim?
— Roymunson

@Roymunson android anahtar içinde. Wonil'in bu konudaki cevabına bir bakın .
— RBT

14

onaltılık kodu doğrudan bir kaynağa atıfta bulunmadan kullanmanız gerekir.

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

1
bu bir regresyon versiyonudur ... eğer rengi değiştirmek isterseniz, tek tek değiştirebilirsiniz ... Renk dosyasında referans yapmak ve değiştirmek daha kolaydır.
— langme

orada maalesef uygulamanızın çalışması için tek yol budur veya gradle sürümünüzü
— düşürmeniz gerekir

3
Bende de aynı sorun var. Daha önce iyi çalışan bir özellik neden devre dışı bırakılsın? Bu bir hata olabilir mi?
— joaomgcd

AS3'e yeni güncelledim ve bu sorunu da aldım. Bu özellik neden kaldırılsın?
— Marty

1
Bu bir geçici çözüm olarak çalışır, ancak "doğru" yanıt, @ mwa91'in vectorDrawables.useSupportLibrary = truesizin build.gradle.
— Sean Barbeau

10

Bu hata için biraz daha fazla bağlam:

  • Android 5.0 (API seviyesi 21), vektör çizimlerini resmi olarak destekleyen ilk sürümdü.
  • 20'den düşük minSdkVersion kullanıyorsanız, vektör çekilebilir için iki çözüm vardır.
    • Android Studio'nun Vektör Varlık Stüdyosu PNG oluşturur. Lütfen Android Studio belgesine bir göz atın . Ancak, diğer kaynaklara yapılan başvurular, derleme zamanı PNG oluşturma tarafından desteklenmez.
    • Destek kitaplığını kullan
  • Veya minSdkVersion için 21 veya üstünü kullanın

Destek kitaplığı için build.gradle dosyanıza bir ifade ekleyin:

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

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

@MikeHanafey Lütfen minSdkVersion'ın neden 24 olması gerektiğini belirtebilir misiniz? Teşekkürler.
— Wonil

Aşağıdaki mesaj minSdkVersion 24'e yükseltilmedikçe ortaya çıkar. Bir açıklamam yok ve bunu gradle oluşturma başarılı olana kadar değeri artırarak buldum. Hata: java.lang.RuntimeException: java.lang.RuntimeException: ./src/main/res/drawable/ic_selection_right_widen.xml: android özniteliği işlenemiyor: fillColor = "@ color / kb_key_long_press_available": diğerlerine referanslar kaynaklar, derleme zamanı PNG oluşturma tarafından desteklenmez. Ayrıntılar için developer.android.com/tools/help/vector-asset-studio.html adresine bakın.
— Mike Hanafey

3
@MikeHanafey minSdkVersion yalnızca android: filltype kullanıyorsanız 24 olmalıdır, bu bazen Android Vector Asset otomatik olarak yerleştirilir. Sadece kurtulun.
— Simone

1
@Simone Öneri için teşekkürler. Benim durumumdaki sorun buydu.
— Abdul Rehman Yawar Khan

varsayılan değerdirfillType , nonZeroancak yalnızca evenOddbelirli durumlarda farklılık gösterir : w3.org/TR/SVG/painting.html#FillRuleProperty
— hmac

4

Vector drawable'daki fillColor özniteliğinde colorReference kullanmayın sadece hexa kodunu kullanın

bunun gibi kullan

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

bunun yerine

<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
Bu bir yama, tüm çekilebilir öğeleri kopyalamadan uygulamamı yeniden temalandırabilmek istiyorum, ayrıca vektörel tutmak yerine png oluşturuyor. İnsanlar @ mwa91'in çözümünü kullanmalıdır.
— Kikiwa


0

Aşağıdakileri yaparak bu sorunu çözmeyi başardım:

  1. çekilebilir bir v21 klasörü oluşturun ve burada değişkenler kullanan tüm çekilebilir xml'lerinizi kopyalayın
  2. orijinal çekilebilir klasörde tüm simgeleri statik bir renk kullanacak şekilde değiştirin

Bu şekilde derleyici çalışacak


1
Evet, muhtemelen API 21'in vektör çizimlerini yerel olarak destekleyen Android 5.0'ı (Lollipop) desteklemesi nedeniyle. Ancak, daha eski sürümlere sahip cihazlarda hiç uygun görsel olmayabilir: developer.android.com/guide/topics/graphics/…
— PointedEars

0

Sanırım android:fillColor="@color/image_button_disabled"bu kodu vektör çizilebilir için kullanıyorsunuz .

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

Desteklenmiyor.

Sadece değiştir android:fillColor="#c4ca5e"


0

@ Mwa91 cevabına kadar eklemek için .

Eğer çekilebilir dinamik tema kullanımını gerekir, ancak Düzenlerinizi güncellemek için zaman var ve birlikte gitmez mwa91 @ cevap ve tüm değiştirmek android:src="@drawable/..."için özelliklerini app:srcCompat="@drawable/..."her zaman çekilebilir içinde altılık renk değeri kullanabilir ve daha sonra ImageView drawable tonu:

<ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:src="@drawable/your_drawable"
      android:tint="@color/image_button_disabled"
      />
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.