อัปเดต Android Support Library เป็น 23.2.0 ทำให้เกิดข้อผิดพลาด: XmlPullParserException ไฟล์ XML ไบนารีบรรทัด # 17 แท็ก <vector> ต้องการ viewportWidth> 0


87

ฉันพยายามอัปเดต Support Library เป็น 23.2.0 และพบข้อผิดพลาดนี้:

Exception while inflating <vector>
org.xmlpull.v1.XmlPullParserException: Binary XML file line #17<vector> tag requires viewportWidth > 0
at android.support.graphics.drawable.VectorDrawableCompat.updateStateFromTypedArray(VectorDrawableCompat.java:535)
at android.support.graphics.drawable.VectorDrawableCompat.inflate(VectorDrawableCompat.java:472)
at android.support.graphics.drawable.VectorDrawableCompat.createFromXmlInner(VectorDrawableCompat.java:436)
at android.support.v7.widget.AppCompatDrawableManager$VdcInflateDelegate.createFromXmlInner(AppCompatDrawableManager.java:829)
at android.support.v7.widget.AppCompatDrawableManager.loadDrawableFromDelegates(AppCompatDrawableManager.java:303)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:178)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:173)
at android.support.v7.widget.TintTypedArray.getDrawable(TintTypedArray.java:60)
at android.support.v7.widget.Toolbar.<init>(Toolbar.java:254)
at android.support.v7.widget.Toolbar.<init>(Toolbar.java:196)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at android.view.LayoutInflater.createView(LayoutInflater.java:594)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:267)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:129)
at com.chotot.vn.v2.activities.MainActivity.onCreate(MainActivity.java:121)
at android.app.Activity.performCreate(Activity.java:5133)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)

และ

FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.chotot.vn.dev/com.chotot.vn.v2.activities.MainActivity}: android.view.InflateException: Binary XML file line #13: Error inflating class android.support.v7.widget.Toolbar
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #13: Error inflating class android.support.v7.widget.Toolbar
at android.view.LayoutInflater.createView(LayoutInflater.java:620)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:267)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:129)
at com.chotot.vn.v2.activities.MainActivity.onCreate(MainActivity.java:121)
at android.app.Activity.performCreate(Activity.java:5133)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at android.view.LayoutInflater.createView(LayoutInflater.java:594)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:267)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:129)
at com.chotot.vn.v2.activities.MainActivity.onCreate(MainActivity.java:121)
at android.app.Activity.performCreate(Activity.java:5133)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/abc_ic_ab_back_material.xml from drawable resource ID #0x7f020016
at android.content.res.Resources.loadDrawable(Resources.java:2091)
at android.content.res.Resources.getDrawable(Resources.java:695)
at android.support.v7.widget.TintResources.superGetDrawable(TintResources.java:48)
at android.support.v7.widget.AppCompatDrawableManager.onDrawableLoadedFromResources(AppCompatDrawableManager.java:374)
at android.support.v7.widget.TintResources.getDrawable(TintResources.java:44)
at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:323)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:180)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:173)
at android.support.v7.widget.TintTypedArray.getDrawable(TintTypedArray.java:60)
at android.support.v7.widget.Toolbar.<init>(Toolbar.java:254)
at android.support.v7.widget.Toolbar.<init>(Toolbar.java:196)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at android.view.LayoutInflater.createView(LayoutInflater.java:594)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:267)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:129)
at com.chotot.vn.v2.activities.MainActivity.onCreate(MainActivity.java:121)
at android.app.Activity.performCreate(Activity.java:5133)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #17: invalid drawable tag vector
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:897)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:837)
at android.content.res.Resources.loadDrawable(Resources.java:2087)
at android.content.res.Resources.getDrawable(Resources.java:695)
at android.support.v7.widget.TintResources.superGetDrawable(TintResources.java:48)
at android.support.v7.widget.AppCompatDrawableManager.onDrawableLoadedFromResources(AppCompatDrawableManager.java:374)
at android.support.v7.widget.TintResources.getDrawable(TintResources.java:44)
at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:323)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:180)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:173)
at android.support.v7.widget.TintTypedArray.getDrawable(TintTypedArray.java:60)
at android.support.v7.widget.Toolbar.<init>(Toolbar.java:254)
at android.support.v7.widget.Toolbar.<init>(Toolbar.java:196)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at android.view.LayoutInflater.createView(LayoutInflater.java:594)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:267)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:129)
at com.chotot.vn.v2.activities.MainActivity.onCreate(MainActivity.java:121)
at android.app.Activity.performCreate(Activity.java:5133)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)

ของฉัน activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <fragment
        android:id="@+id/f_actionbar"
        android:name="com.chotot.vn.fragments.ActionBarFragment"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <android.support.v7.widget.Toolbar
        android:id="@+id/main_tool_bar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:layout_alignParentTop="true"
        android:background="@color/action_bar_bg">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <include
                android:id="@+id/main_action_bar_layout"
                layout="@layout/layout_actionbar_custom_search"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:layout_gravity="top" />

            <LinearLayout
                android:id="@+id/main_action_bar_layout_content"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@id/main_action_bar_layout"
                android:orientation="vertical" />
        </RelativeLayout>
    </android.support.v7.widget.Toolbar>

    <FrameLayout
        android:id="@+id/layout_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/main_tool_bar" />

</RelativeLayout>

จะแก้ไขได้อย่างไร?



30
ฉันเริ่มที่จะเลิกพัฒนา Android ในฐานะ & ** & # $ whole! ไม่อยากจะเชื่อเลยว่าฉันเสียเวลาไปมากในชีวิตของแต่ละคนที่อัปเกรดเป็น SDK เวอร์ชันใหม่เพื่อแก้ไขข้อบกพร่องที่พวกเขาแนะนำในเวอร์ชันก่อนหน้าและตอนนี้! ARRGGGGHH!
Neon Warge

1
ฉันตัดสินสำหรับ API v23.1.0: P
Neon Warge

4
มีปัญหาเหมือนกัน24.0.0หากมีใครมีเคล็ดลับโปรดแบ่งปันฉันพยายามทุกอย่างจริงๆ
wviana

1
@NeonWarge ... ฉันเคยไปรอบ ๆ บล็อกสองสามครั้งแล้ว คำตอบเหล่านี้ไม่ได้ทำอะไรฉัน เริ่มรู้สึกเจ็บปวดแน่ ๆ
Jan Jansz

คำตอบ:


55

ใช้รหัสนี้ในไฟล์ build.gradle ของคุณ

    //for Gradle Plugin 2.0+  
 android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 }

หากคุณใช้ Gradle 1.5 คุณจะใช้ไฟล์

defaultConfig {
        generatedDensities = []
    }

    // This is handled for you by the 2.0+ Gradle Plugin
    aaptOptions {
        additionalParameters "--no-version-vectors"
    }

ฉันคิดว่าพวกเขาอาจใช้คอมแพควาดเวกเตอร์ที่อยู่ด้านล่างใน lib อื่น ๆ พบได้ที่นี่


7
@ MAY3AM ขออภัยไม่ได้ลองใช้ Eclipse คิดว่า eclipse ล้าสมัยแล้วทำไมคุณถึงใช้มัน
Ajinkya

6
สิ่งที่แก้ปัญหาของฉันได้ในที่สุดคือคำตอบของ @ wonglik ตั้งค่า: buildToolsVersion "23.0.2"
Sid

1
อย่าลืมใช้ app: srcCompat แทน android: src ใน xml เพื่อใช้ vector drawables บนอุปกรณ์ <21
Timo

1
สิ่งนี้ไม่ได้ผลสำหรับฉัน การกำหนดค่าของฉันเป็นดังนี้: buildToolsVersion "23.0.2"; classpath 'com.android.tools.build:gradle:2.0.0-beta6'; defaultConfig {vectorDrawables.useSupportLibrary = true}
Allen Vork

6
วิธีนี้ใช้ไม่ได้กับฉัน Could not find property 'vectorDrawables' on ProductFlavor_Decorated
Mulgard

28

คุณยังสามารถอัปเกรดเป็น 23.4.0

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

และใช้แฟล็กเพื่อเปิดใช้งานฟังก์ชันนี้ด้วยตนเอง:

static
{
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

ภายในกิจกรรมที่ใช้เวกเตอร์

ที่มา: อายุของเวกเตอร์


การโทรแบบคงที่ภายในกิจกรรมพื้นฐานบางอย่างจะแก้ไขปัญหาสำหรับนักพัฒนาทุกคนที่กำลังดิ้นรนกับ vectorDrawables.useSupportLibrary = true ดังนั้น +1 สำหรับคำตอบนี้
Stoycho Andreev

โอ้มันเป็นเวทมนตร์ชนิดหนึ่ง♫ ฉันกำลังใช้com.android.support:appcompat-v7:25.3.1งานแอพใน API 19 การกำหนดค่าเริ่มต้นvectorDrawables.useSupportLibrary = trueแต่มันขัดข้องเมื่อตั้งค่า ImageSwitcher ที่วาดได้ด้วยเวกเตอร์ ในที่สุดด้วยคำสั่งแบบคงที่นี้ฉันสามารถ setImageResource ด้วย vector drawable ดูเหมือนว่า Android SDK จะน่าทึ่งและน่าทึ่ง
Junior Mayhé

26

โปรดลบ appcompat gradle ( compile "com.android.support:appcompat-v7:23.2.0") และแทนที่ด้วย support design ( compile 'com.android.support:design:23.1.1') ซึ่งจะช่วยแก้ปัญหาได้


การเปลี่ยนแปลงเหล่านี้ต้องทำด้วย 23.1.1 defaultConfig {createdDensities = []} // สิ่งนี้จะจัดการให้คุณโดย aaptOptions 2.0+ Gradle Plugin {additionalParameters "--no-version-vectors"}
ราวี

20
แต่ถ้าคุณต้องการใช้ไลบรารี appcompact ล่าสุดล่ะ?
Ajinkya

23

ในอุปกรณ์ pre-lollipop คุณต้องสร้างตัวเลือกเพื่อใช้ VectorDrawable จากที่อื่นจาก ImageView

app:srcCompat="@drawable/your_vector_drawable"

ตัวเลือก:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/your_vector_drawable" />

</selector>

จากนั้นคุณสามารถผ่านตัวเลือกนี้เช่นสำหรับ TextView drawableLeft / drawableRight ใน xml

<TextView
        android:gravity="center_vertical"
        android:drawableLeft="@drawable/selector_your_vector_drawable"
        android:drawableStart="@drawable/selector_your_vector_drawable"
        android:drawableRight="@drawable/selector_your_vector_drawable"
        android:drawableEnd="@drawable/selector_your_vector_drawable"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/your_string" />

ไม่ว่าจะเป็นเวอร์ชันใดใน build.gradle โซลูชันนี้จะใช้งานได้
PsyGik

ฉันมี vectorDrawables.useSupportLibrary = true ในแอป build.gradle และฉันใช้ compileSdkVersion 25 และ buildToolsVersion "25.0.0" และการแก้ไขไลบรารีแบบพึ่งพา 25.0.0 แต่ไม่ได้ช่วยใช้SupportLibraryนี่เป็นทางออกที่ดีที่สุดขอบคุณ @ n1ck !!!
mr.boyfox

โซลูชันนี้ไม่หยุดพักในไลบรารีสนับสนุน 25.00 และ 24 ด้วยฉันทดสอบบนแท็บเล็ต Android 4.2.2 (ไม่รองรับ Google Play) และโซลูชันนี้ใช้งานได้อย่างมีเสน่ห์!
mr.boyfox

สิ่งนี้ใช้งานได้ ณ วันนี้ [buildtools 25+] - ไม่มีอะไรที่ใช้ได้กับandroid:drawableAttribs ใน xml: s ที่อ้างอิง vector drawables เป็นแบบนี้หรือตั้งค่าพื้นหลังที่วาดได้โดยใช้โปรแกรม วิ ธ !
Pär Nils Amsen

22

แทนที่จะContextCompat.getDrawableเพียงใช้AppCompatDrawableManager.get (). getDrawable

สิ่งนี้ควรใช้ได้กับเวอร์ชันที่สูงกว่า 23 +


1
ฉันกำลังพยายามใช้เวกเตอร์สำหรับมุมมองที่กำหนดเอง สิ่งนี้ใช้ได้กับฉัน แต่โทรโดยตรงAppCompatDrawableManager.get().getDrawable(getContext(), R.drawable.drawable_xyz);โดยใช้รหัส ไม่แน่ใจว่ามันทำงานอย่างไรหากประกาศโดย xml
Robert

1
การเปลี่ยนแปลงนี้ช่วยแก้ปัญหาให้ฉันได้ด้วยตัวเอง ขอขอบคุณ.
albert c braun

1
ปัญหาแม่คงที่นี้ด้วย ขอบคุณเพื่อน!
rana

1
คุณสามารถใช้:AppCompatResources.getDrawable(getContext(), R.drawable.drawable_xyz);
Warcello

19

ใช้:

compileSdkVersion 24
buildToolsVersion '24.0.1'

ฉันล้มเหลวในเวลาทำงานจนกว่าฉันจะลบบรรทัด

  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }

จากแอปพลิเคชัน guild.gradle ของฉัน

ดูเหมือนว่าจะทำให้ SDK เวอร์ชันที่ใหม่กว่าสับสน

หวังว่านี่จะช่วยให้คนอื่นปวดหัวได้


สิ่งนี้ช่วยให้ฉัน
Sergey Shustikov

1
การลบ ectorDrawables.useSupportLibrary หยุดข้อขัดข้องบนอุปกรณ์ 4.4.2 ของฉัน
Acapulco

ว้าวมันใช้งานได้จริง! แต่ทำไมมีข้อผิดพลาดที่น่ารำคาญด้วยapp:srcCompat To use VectorDrawableCompat, you need to set android.defaultConfig.vectorDrawable.useSupportLibrary = true.? งงมาก!
HendraWD

12

ฉันแก้ไขปัญหานี้โดยการแทนที่

dependencies {

compile 'com.android.support:appcompat-v7:23.2.0'

compile 'com.android.support:design:23.2.0'
}

ด้วย

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

compile 'com.android.support:design:23.0.1'
}

10

วิธีแก้ปัญหาข้างต้นผสมผสานกันได้ผลสำหรับฉัน นี่คือสิ่งที่ฉันทำ -

เปลี่ยนรุ่น gradle จาก 1.3.0 ไป 1.5.0 ในbuild.gradleของโครงการเช่นนี้

classpath 'com.android.tools.build:gradle:1.5.0'

การปรับปรุงด้านล่างสิ่งที่อยู่ในbuild.gradleของแอป

buildToolsVersion "23.0.2"

อัปเดตการอ้างอิงโมดูลจาก 23.2.0 ถึง 23.4.0:

compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
compile 'com.android.support:support-vector-drawable:23.4.0'
compile 'com.android.support:animated-vector-drawable:23.4.0'

ตอนนี้ขึ้นอยู่กับเวอร์ชันของ gradle ที่คุณใช้อยู่ให้ใช้สองตัวอย่างต่อไปนี้ เนื่องจากฉันใช้ gradle 1.5.0 ฉันจึงใช้สิ่งนี้ -

defaultConfig {
            generatedDensities = []
            }

    aaptOptions {
        additionalParameters "--no-version-vectors"
        }

แต่ถ้าคุณใช้ Gradle 2.1.0 ให้ใช้สิ่งนี้แทน

       defaultConfig {  
         vectorDrawables.useSupportLibrary = true  
         }

แล้วคุณก็ไปได้ดี ฉันทดสอบทั้งใน xml และโดยใช้โปรแกรม ในไฟล์ xml ฉันใช้สิ่งนี้ใน ImageView ของฉัน -

app:srcCompat="@drawable/anim_droid"
// where droid_anim is an animated-vector file containing set of animations to animate different paths of the SVG file

และในการทำแบบเป็นโปรแกรมฉันใช้สิ่งนี้ -

    imageView.setImageResource(R.drawable.anim_droid);
    Drawable drawable = imageView.getDrawable();
    if (drawable instanceof Animatable) {
      ((Animatable) drawable).start();
    }

หวังว่าจะช่วยได้! ไชโย :)



9

ประสบปัญหาการหยุดทำงานใน api 19 เมื่ออัปเดตเป็น 23.2.0 ฉันแก้ไขปัญหานี้โดยอัปเดตเวอร์ชันเป็น 23.2.1 (เวอร์ชันล่าสุดเมื่อตอบคำถามนี้พยายามอัปเดตเป็นเวอร์ชันล่าสุด Google อาจได้รับการแก้ไขแล้ว)

compile 'com.android.support:appcompat-v7:23.2.1'
compile 'com.android.support:support:23.2.1'.

1
ทำไมต้องคอมไพล์ทั้งหมด'com.android.support:support:23.2.1'?
IgorGanapolsky

ล่าสุดในขณะนี้คอมไพล์ 'com.android.support:support-v4:23.3.0' คอมไพล์ 'com.android.support:appcompat-v7:23.3.0' คอมไพล์ 'com.android.support:design:23.3.0 '
Alexandr

7

ตรวจสอบให้แน่ใจว่าคุณใช้เวอร์ชันล่าสุด buildToolsVersionเช่นกัน (ดาวน์โหลดจากตัวจัดการ SDK หากจำเป็น)

ตัวอย่าง Gradle:

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.0"
    defaultConfig {
        ...
        vectorDrawables.useSupportLibrary = true
    }
    dependencies {
        ...
        compile 'com.android.support:appcompat-v7:24.0.0'
        ...
    }
}

3
buildToolsVersion "24.0.0" save my day :)
NullPointer

นี่เป็นคำตอบที่ถูกต้องสำหรับผู้ที่พยายามอัปเดตเพื่อคอมไพล์ sdk 24 แต่ยังคงได้รับข้อผิดพลาดบนอุปกรณ์ 4.x
fillobotto

4

ใน Gradle (gradle: 2.1.0):

defaultConfig {
    vectorDrawables.useSupportLibrary = true
}

ในเค้าโครง:

<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:srcCompat="@drawable/you_vector_drawable"/>

3

ฉันมีปัญหานี้ แต่การอัปเดตเป็นเวอร์ชัน build: grade:

classpath 'com.android.tools.build:gradle:1.5.0'

และ:

buildToolsVersion "23.0.2"

สำเร็จ!



2

ฉันได้รับการสนับสนุนจากปัญหาเดียวกันนี้เมื่อฉันสร้างแอปเวอร์ชันใหม่ การพึ่งพาของฉันกับ appcompact ถูกตั้งค่าให้อัปเดตอัตโนมัติ

compile 'com.android.support:appcompat-v7:23+'

ดังนั้นทันทีที่มีเวอร์ชันใหม่ (ในกรณีนี้คือเวอร์ชัน 23.2.0) มันจะแทนที่เวอร์ชันเก่าที่คุณสร้างด้วย

ดังนั้นคุณสามารถเปลี่ยนกลับไปใช้ไลบรารี appcompat เวอร์ชันก่อนหน้าได้ (แก้ไขด่วน):

compile 'com.android.support:appcompat-v7:23.1.1'

หรือเก็บรุ่นปัจจุบันห้องสมุดและใช้Ajinkyaคำตอบ 's อธิบายโดยgoogle ในรุ่นบันทึก หากคุณเลือกใช้ในภายหลังอย่าลืมอัปเดตเครื่องมือสร้าง gradle ของคุณเป็นเวอร์ชัน 1.5.0 หรือคุณไม่สามารถใช้พารามิเตอร์ใหม่เช่นgeneratedDensities:

classpath 'com.android.tools.build:gradle:1.5.0'

2

ประสบปัญหาเดียวกันวิธีนี้แก้ไขได้

ในชั้นเรียนของคุณเพียงแค่ทำ

public class YourClass extends xxx {
    static {
        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
    }
    ...
}

และเพิ่มสิ่งนี้ในไฟล์ gradle ของคุณหากยังไม่ได้ทำ

defaultConfig {
    vectorDrawables.useSupportLibrary = true
}

1

ได้แก้ไขแล้วโดยตั้ง ..

compile 'com.android.support:appcompat-v7:24.1.1'
compile 'com.android.support:design:24.1.1' and buildToolsVersion '24.0.0'

พยายามแล้ว แต่ไม่ได้ผลสำหรับฉัน ... ใช้ Android-IDE
Karyuu Ouji

1

ฉันพบปัญหานี้เช่นกันสิ่งที่ฉันทำ: เปลี่ยน

compileSdkVersion 24
buildToolsVersion "22.0.1"

ถึง

compileSdkVersion 24
buildToolsVersion "24.0.1"

1

แทรกลงใน build.gradle (โมดูล: แอป):

android {  
  defaultConfig {  
    vectorDrawables.useSupportLibrary = true  
  }  
}

dependencies {
    implementation 'com.android.support:appcompat-v7:26.1.0'
}

หลังจากนั้นใช้รหัสด้านล่างใน AppActivity ของคุณ:

 AppCompatResources.getDrawable(getContext(), R.drawable.ic_your);

ในกรณีที่มีให้ใช้แอป: srcCompatแทนandroid: srcและandroid: backgroundในไฟล์ทรัพยากรXML


0

ฉันมีปัญหานี้ แต่การอัปเดตเป็นเวอร์ชันด้านล่างได้แก้ไขให้ฉัน:

classpath 'com.android.tools.build:gradle:1.5.0'

และ:

buildToolsVersion "23.0.2"

การขึ้นต่อกันของโมดูล:

compile 'com.android.support:appcompat-v7:23.2.0'
compile 'com.android.support:support-v4:23.2.0'

compile 'com.google.android.gms:play-services:8.4.0'

0

ฉันแก้ไขปัญหาโดยการแทนที่

compile 'com.android.support:appcompat-v7:23.2.0'
compile 'com.android.support:support-v4:23.2.0'

ด้วย

compile 'com.android.support:appcompat-v7:23.0.2'
compile 'com.android.support:support-v4:23.0.2'

0

ฉันได้รับข้อผิดพลาดเดียวกันนี้ใน Android Studio 2.2 หลังจากที่ฉันอัปเดตการอ้างอิง Gradle เป็นเวอร์ชันล่าสุด แต่ลืมอัปเดต buildToolsVersion ของโครงการของฉัน

ฉันเปลี่ยน:

compile 'com.android.support:appcompat-v7:22.2.1'

ถึง:

compile 'com.android.support:appcompat-v7:24.2.1'

ในขณะที่ buildToolsVersion ยังคงเป็น"22.0.1"เช่นนั้น:

buildToolsVersion "22.0.1"

สิ่งที่ฉันทำคืออัปเดต buildToolsVersion เป็น 24 ดังนี้:

buildToolsVersion "24"

เนื่องจากก่อนหน้านี้ดาวน์โหลดด้วย SDK Manager ดังนั้นตรวจสอบล่าสุดbuildToolsVersionจาก SDK Manager และดูว่าตรงกับเวอร์ชันอ้างอิงหรือไม่

หวังว่านี่จะช่วยใครบางคนได้


0

สำหรับฉันสิ่งที่ได้ผล ... กำลังลบ 's' จาก 'https' ในการประกาศเนมสเปซของเวกเตอร์ xml ที่วาดได้ของฉัน

XML นั้นมาจากเอกสารของ Google Android เองคุณจะเห็นในภาพหน้าจอว่า xmlns คือ "http" แต่ในเวอร์ชันที่สามารถคัดลอกได้ด้านล่างนี้จะเป็น "https"

การดำเนินการนี้จะหยุดข้อผิดพลาดในการแสดงผลในโปรแกรมดู Vector Asset แต่คุณยังคงไม่เห็นอะไรเลยด้วยเหตุผลที่ฉันไม่เข้าใจ มันควรจะมีลักษณะเหมือนประแจ

หากคุณคลิกขวาที่โฟลเดอร์ drawables และ "New -> Vector Asset" คุณจะได้รับเนื้อหาไอคอน Android ที่ใช้งานได้

<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="#FF000000"
        android:pathData="M6,18c0,0.55 0.45,1 1,1h1v3.5c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5L11,19h2v3.5c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5L16,19h1c0.55,0 1,-0.45 1,-1L18,8L6,8v10zM3.5,8C2.67,8 2,8.67 2,9.5v7c0,0.83 0.67,1.5 1.5,1.5S5,17.33 5,16.5v-7C5,8.67 4.33,8 3.5,8zM20.5,8c-0.83,0 -1.5,0.67 -1.5,1.5v7c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5v-7c0,-0.83 -0.67,-1.5 -1.5,-1.5zM15.53,2.16l1.3,-1.3c0.2,-0.2 0.2,-0.51 0,-0.71 -0.2,-0.2 -0.51,-0.2 -0.71,0l-1.48,1.48C13.85,1.23 12.95,1 12,1c-0.96,0 -1.86,0.23 -2.66,0.63L7.85,0.15c-0.2,-0.2 -0.51,-0.2 -0.71,0 -0.2,0.2 -0.2,0.51 0,0.71l1.31,1.31C6.97,3.26 6,5.01 6,7h12c0,-1.99 -0.97,-3.75 -2.47,-4.84zM10,5L9,5L9,4h1v1zM15,5h-1L14,4h1v1z"/>

ทั้งการออกแบบและ appcompat-v7 ของฉันใช้ 23.2.1 และ buildToolsVersion 23.0.2

เพียงแค่นี้ประแจที่สร้างโดยไฟล์อินเทอร์เฟซ 'ไอคอนวัสดุ' -> ใหม่ -> สินทรัพย์เวกเตอร์ -> ไอคอนวัสดุ (จากนั้นคลิกไอคอนและเลือกประแจ) คือ:

<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="#FF000000"
        android:pathData="M22.7,19l-9.1,-9.1c0.9,-2.3 0.4,-5 -1.5,-6.9 -2,-2 -5,-2.4 -7.4,-1.3L9,6 6,9 1.6,4.7C0.4,7.1 0.9,10.1 2.9,12.1c1.9,1.9 4.6,2.4 6.9,1.5l9.1,9.1c0.4,0.4 1,0.4 1.4,0l2.3,-2.3c0.5,-0.4 0.5,-1.1 0.1,-1.4z"/>
</vector>

ยูทิลิตี้ออนไลน์นี้ไม่เป็นไรสำหรับฉัน ใช้ Chrome จะแปลง SVG เป็นเวกเตอร์ที่วาดได้ของ Android


0

ปัญหาคือ:

/VdcInflateDelegate: Exception while inflating <vector>

วิธีการแก้:

เปลี่ยนcompileSdkVersion 23 buildToolsVersion "23.0.2" เป็นcompileSdkVersion 24 buildToolsVersion "24.0.2"

รหัสโซลูชัน:

compileSdkVersion 24
buildToolsVersion '24.0.1'

การใช้รหัสด้านบนนี้ฉันแก้ปัญหาได้


0

เพียงเพิ่มการอ้างอิงต่อไปนี้ใน build.gradle ของคุณ วิธีนี้จะแก้ไขปัญหาของคุณ ฉันใช้25.0.2 buildToolsVersion

รวบรวม 'com.android.support:support-vector-drawable:25.3.0'


0

ฉันเปลี่ยน FragmentActivity เป็น AppCompatActivity ปัญหาได้รับการแก้ไขแล้ว สภาพแวดล้อมของฉันคือ:

compileSdkVersion = 25
buildToolsVersion = "25.0.0"
supportVersion = "25.2.0"

0

ในกรณีของฉันวิธีนี้ใช้ได้ผล :

ใช้

android:theme="@style/TextLabelWhite"

เช่นเดียวกับใน xml ของคุณ เปลี่ยนสไตล์พาเรนต์เป็นสไตล์ AppTheme ของคุณเช่น:

<style name="TextLabelWhite" parent="AppTheme">

0

แม้ว่าฉันจะรองรับ vector ที่เปิดใช้งานใน gradle ของฉันและมี gradle, build tools, support library และ Android studio เวอร์ชันล่าสุด แต่ฉันก็ยังได้รับข้อผิดพลาด

นี่คือการแก้ไขสำหรับกรณีของฉัน:

AppCompatDrawableManager.get().getDrawable(getContext(), R.drawable.drawable_xyz);

หากต้องการลบคำเตือนผ้าสำลีให้เพิ่มสิ่งนี้ @SuppressLint("RestrictedApi")


0

พยายามใช้: รวบรวม 'com.android.support:design:23.1.1'

แทนที่จะเป็น: คอมไพล์ "com.android.support:appcompat-v7:23.2.0"


0

นอกจากนี้ยังสังเกตในbuildToolsVersion '26 .0.2'

การดาวน์เกรดเป็นbuildToolsVersion '25 .0.3 'ใช้งานได้ได้

สำหรับ buildToolsVersion '26 .0.2 ': ลองใช้ AppCompat สำหรับวิดเจ็ตตัวอย่าง: TextView -> android.support.v7.widget.AppCompatTextView (สำหรับการรองรับ Android เวอร์ชันเก่า) นอกจากนี้ยังพบในอุปกรณ์ระดับล่างเมื่ออุปกรณ์ไม่สามารถขยายสิ่งที่วาดได้เนื่องจากหน่วยความจำ . ขาดแคลน (แม้ว่า drawable ที่มีอยู่ในของคุณ res-> drawable dir): ลองเปลี่ยน drawable ของคุณกับคนที่ซับซ้อนน้อยกว่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.