अन्य संसाधनों के संदर्भ बिल्ड-टाइम पीएनजी पीढ़ी द्वारा समर्थित नहीं हैं


130

AndroidStudio 3.0 / Android ग्रैडल प्लगइन 3.0

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

मुझे यह त्रुटि मिली:

अन्य संसाधनों के संदर्भ बिल्ड-टाइम पीएनजी पीढ़ी द्वारा समर्थित नहीं हैं

क्या इसे हल करना संभव होगा या क्या यह एक पदावनत समाधान है?


संबंधित थ्रेड - अद्यतित एंड्रॉइड स्टूडियो 3.0 और इस मुद्दे को प्राप्त करना । हालांकि समाधान बिल्कुल वैसा ही है।
आरबीटी

जवाबों:


315

एपीआई एसडीके <24 का समर्थन करने के लिए अपने ऐप में निम्नलिखित पंक्ति जोड़ें build.gradle:

defaultConfig{
   vectorDrawables.useSupportLibrary = true
}

यदि आपका minSdkVersion 24 या अधिक है, तो आपका मुद्दा अपने आप ही हल हो जाएगा, क्योंकि इस एपीआई के साथ वेक्टरड्राइव का पूरा समर्थन है।

Android डेवलपर देखें : विवरण के लिए वेक्टर ड्रा बैकवर्ड कम्पेटिबिलिटी सॉल्यूशन


4
लेकिन मुद्दा क्यों उठ रहा है और उपरोक्त समाधान एक उपसर्ग या एक अच्छी रणनीति है?
प्रणिधर्म


1
नोट: useSupportLibrary मेरे लिए गलत समाधान है (न्यूनतम एसडीके 16, लक्ष्य 26), शुरू होने पर ऐप क्रैश। मुझे इसे हटाना था, वैक्टर से @color को हटाना था और बस सभी एंड्रॉइड को भरना और बदलना था: fillColor = pieces मैन्युअल रूप से। यह वास्तव में बहुत तेज़ है, 10 सेकंड
djdance

मैं इस पंक्ति को कहां जोड़ूं?
रॉयमुनसन

@Roymunson Android कुंजी के अंदर। इस सूत्र में खुद वोनिल का जवाब देखिए ।
RBT

14

आपको सीधे किसी संसाधन का जिक्र न करते हुए हेक्स कोड का उपयोग करने की आवश्यकता है।

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

1
यह एक प्रतिगमन संस्करण है ... यदि आप रंग बदलना चाहते हैं, तो आप एक-एक करके बदल सकते हैं ... रंग फ़ाइल में एक संदर्भ बनाना और इसे बदलना आसान है।
लैंगमे ऑक्ट

दुर्भाग्य से यह आपके ऐप को काम करने का एकमात्र तरीका है या आपको अपने
ग्रेडेल

3
मेरा भी यही मुद्दा है। एक सुविधा जो पहले ठीक काम कर रही थी उसे निष्क्रिय क्यों किया जाएगा? यह शायद एक बग है?
17

मैंने अभी AS3 को अपडेट किया है और मुझे यह मुद्दा भी मिला है। उस सुविधा को क्यों हटाया जाएगा?
मार्टी

1
यह एक वर्कअराउंड के रूप में काम करता है, लेकिन "सही" उत्तर @ mwa91 का उत्तर है जो आपको जोड़ना vectorDrawables.useSupportLibrary = trueहै build.gradle
सीन बारब्यू

9

इस त्रुटि के लिए थोड़ा और संदर्भ:

  • Android 5.0 (एपीआई स्तर 21) आधिकारिक तौर पर वेक्टर ड्रॉ का समर्थन करने वाला पहला संस्करण था।
  • यदि आप 20 से कम minSdkVersion का उपयोग करते हैं, तो वेक्टर ड्रिबल के लिए दो समाधान हैं
    • Android Studio का वेक्टर एसेट स्टूडियो PNG उत्पन्न करता है। कृपया Android स्टूडियो दस्तावेज़ देखें । लेकिन, अन्य संसाधनों के संदर्भ बिल्ड-टाइम पीएनजी पीढ़ी द्वारा समर्थित नहीं हैं।
    • समर्थन पुस्तकालय का उपयोग करें
  • या, minSdkVersion के लिए 21 या उससे ऊपर का उपयोग करें

समर्थन लाइब्रेरी के लिए, अपनी build.gradle फ़ाइल में एक बयान जोड़ें:

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

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

@ माइकहाफनी क्या आप बता सकते हैं कि डॉक क्यों minSdkVersion 24 होना चाहिए? धन्यवाद।
वोनिल

नीचे का संदेश तब तक होता है जब तक कि minSdkVersion को 24 तक नहीं बढ़ाया जाता है। मेरे पास स्पष्टीकरण नहीं है, और यह तब तक पाया गया है जब तक कि वैकलिट बिल्ड सफल नहीं हो जाता है। त्रुटि: java.lang.RuntimeException: java.lang.RuntimeException: त्रुटि करते समय। संसाधन पीएनजी पीढ़ी के निर्माण के समय समर्थित नहीं हैं। विवरण के लिए डेवलपर .android.com/ tools/ help/ vector- asset- studio.html देखें।
माइक हनफी ने

3
@MikeHanafey minSdkVersion केवल 24 होना चाहिए जब आप Android का उपयोग करते हैं: filltype, जो कभी-कभी Android वेक्टर एसेट स्वचालित रूप से डालता है। बस इससे छुटकारा पाएं।
सिमोन

1
@Simone सुझाव के लिए धन्यवाद मेरे मामले में यही मुद्दा था।
अब्दुल रहमान यवर खान

डिफ़ॉल्ट fillTypeहै, nonZeroलेकिन यह केवल evenOddकुछ मामलों में भिन्न है : w3.org/TR/SVG/painting.html#FillRuleProperty
hmac

4

वेक्टर ड्रिबल में फिलरेलर विशेषता पर 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 के समाधान का उपयोग करना चाहिए।
किकिवा

4

यदि आपका minSdkVersion 21 है, तो आप इस पंक्ति को जोड़कर PNG की पीढ़ी को अक्षम कर सकते हैं:

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

इस लाइन को हटाने से अभी भी पीएनजी उत्पन्न होगी।

स्रोत: http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.VectorDrawablesOptions.html


0

मैं निम्नलिखित काम करके इसके आसपास काम करने में सक्षम रहा हूं:

  1. एक drawable-v21 फोल्डर बनाएं और अपने सभी drawable xmls को कॉपी करें जो वहां वैरिएबल का उपयोग करते हैं
  2. मूल ड्रा करने योग्य फ़ोल्डर में स्थिर रंग का उपयोग करने के लिए सभी आइकन बदलते हैं

इस तरह संकलक काम करेगा


1
हां, शायद इसलिए कि एपीआई 21 एंड्रॉइड 5.0 (लॉलीपॉप) का समर्थन करता है जो मूल रूप से वेक्टर ड्रॉबल्स का समर्थन करता है। हालाँकि, पहले के संस्करणों वाले उपकरणों में कोई उचित चित्र नहीं हो सकता है: developer.android.com/guide/topics/graphics/…
पॉइंटेड ईयर

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/...", तो आप हमेशा ड्रॉ में हेक्स रंग मान का उपयोग कर सकते हैं और बाद में इमेज व्यू में ड्रॉबल को टिंट कर सकते हैं।

<ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:src="@drawable/your_drawable"
      android:tint="@color/image_button_disabled"
      />
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.