Cập nhật Thư viện hỗ trợ Android lên 23.2.0 gây ra lỗi: XmlPullParserException tệp XML nhị phân dòng # 17 Thẻ <vector> yêu cầu viewportWidth> 0


87

Tôi cố gắng cập nhật Thư viện hỗ trợ của mình lên 23.2.0 và gặp lỗi này:

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)

Của tôi 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>

Làm thế nào tôi có thể sửa chữa nó?



30
Tôi bắt đầu từ bỏ phát triển Android như một & ** & # $ toàn bộ! Không thể tin được rằng tôi đã lãng phí rất nhiều cuộc đời mình với tư cách là một cá nhân nâng cấp lên một phiên bản SDK mới để sửa lỗi mà họ đưa ra trên phiên bản trước và bây giờ là phiên bản này! ARRGGGGHHH!
Neon Warge

1
Tôi định cư cho v23.1.0 API: P
Neon Warge

4
gặp vấn đề tương tự, 24.0.0nếu ai đó có mẹo về nó, xin vui lòng chia sẻ nó, tôi thực sự đã thử mọi thứ.
wviana

1
@NeonWarge ... Tôi đã đến khu vực này vài lần rồi. Những câu trả lời này không làm bất cứ điều gì cho tôi. Tôi chắc chắn là bắt đầu cảm thấy đau
Jan Jansz

Câu trả lời:


55

Sử dụng mã này trong tệp build.gradle của bạn

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

Nếu bạn đang sử dụng Gradle 1.5, bạn sẽ sử dụng

defaultConfig {
        generatedDensities = []
    }

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

Tôi nghĩ có thể họ đang sử dụng vectơ có thể vẽ nhỏ gọn bên dưới trong lib khác. Tìm thấy ở đây


7
@ MAY3AM xin lỗi bạn chưa thử trên Eclipse. Tưởng rằng nhật thực đã lỗi thời tại sao bạn lại sử dụng nó.
Ajinkya

6
Điều cuối cùng đã giải quyết được vấn đề của tôi là câu trả lời của @ wonglik, đặt: buildToolsVersion "23.0.2".
Sid

1
Hãy nhớ sử dụng ứng dụng: srcCompat thay vì android: src trong xml để sử dụng các vector có thể vẽ trên <21 thiết bị.
Timo

1
điều này không làm việc cho tôi. cấu hình của tôi như sau: buildToolsVersion "23.0.2"; classpath 'com.android.tools.build:gradle:2.0.0-beta6'; defaultConfig {vectorDrawables.useSupportLibrary = true}
Allen Vork

6
Giải pháp này không làm việc cho tôi. Could not find property 'vectorDrawables' on ProductFlavor_Decorated
Mulgard

28

Bạn cũng có thể nâng cấp lên 23.4.0

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

và sử dụng cờ để bật chức năng này theo cách thủ công:

static
{
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

bên trong hoạt động sử dụng các vectơ.

Nguồn: Tuổi của vectơ


lệnh gọi tĩnh bên trong một số hoạt động cơ sở sẽ khắc phục sự cố cho tất cả các nhà phát triển đang gặp khó khăn với vectorDrawables.useSupportLibrary = true, vì vậy hãy +1 cho câu trả lời này.
Stoycho Andreev

Ồ, ♫ đó là một loại ma thuật ♫. Tôi đang sử dụng com.android.support:appcompat-v7:25.3.1chạy ứng dụng trong API 19. Cấu hình mặc định là vectorDrawables.useSupportLibrary = truevậy nhưng nó đã bị lỗi khi đặt ImageSwitcher có thể vẽ bằng một vectơ. Cuối cùng với câu lệnh tĩnh này, tôi có thể setImageResource với vector có thể vẽ được. Có vẻ như Android SDK vừa tuyệt vời vừa bắt chước.
Junior Mayhé

26

Vui lòng xóa appcompat gradle ( compile "com.android.support:appcompat-v7:23.2.0") và thay thế bằng support design ( compile 'com.android.support:design:23.1.1'), điều này sẽ giải quyết được vấn đề


Những thay đổi này có phải được thực hiện với 23.1.1 defaultConfig {createdDensities = []} // Điều này được xử lý cho bạn bởi 2.0+ Gradle Plugin aaptOptions {addParameters "--no-version-vectors"}
Ravi

20
nhưng nếu bạn muốn sử dụng thư viện appcompact mới nhất thì sao ??
Ajinkya

23

Trên các thiết bị pre-lollipop, bạn cần tạo bộ chọn để sử dụng VectorDrawable ở nơi khác từ ImageView

app:srcCompat="@drawable/your_vector_drawable"

Bộ chọn:

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

Sau đó, bạn có thể vượt qua bộ chọn này, ví dụ: đối với TextView drawableLeft / drawableRight trong 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" />

Không phụ thuộc vào phiên bản trong build.gradle, giải pháp này sẽ làm việc
PsyGik

Tôi có vectorDrawables.useSupportLibrary = true trong app build.gradle và tôi sử dụng compileSdkVersion 25 và buildToolsVersion "25.0.0" và các bản sửa đổi thư viện phụ thuộc 25.0.0 nhưng không được sử dụngSupportLibrary, đây là giải pháp tốt nhất cảm ơn bạn @ n1ck !!!
mr.boyfox

Giải pháp này không bị hỏng trên thư viện hỗ trợ 25.00 và 24 nữa, tôi đã thử nghiệm trên máy tính bảng Android 4.2.2 (không hỗ trợ google play) và giải pháp này hoạt động như một sự quyến rũ!
mr.boyfox

Điều này hoạt động cho đến ngày hôm nay [buildtools 25+] - không có gì khác hoạt động cho các tiêu android:drawablehao trong xml: s tham chiếu vector có thể kéo được. Đó là hoặc là thiết lập nền có thể vẽ theo chương trình. Wth!
Pär Nils Amsen

22

Thay vì ContextCompat.getDrawable , chỉ cần sử dụng AppCompatDrawableManager.get (). GetDrawable .

Điều này sẽ hoạt động trên các phiên bản cao hơn 23. +


1
Tôi đang cố gắng sử dụng vector cho chế độ xem tùy chỉnh. Điều này làm việc cho tôi. Nhưng chỉ gọi trực tiếp AppCompatDrawableManager.get().getDrawable(getContext(), R.drawable.drawable_xyz);bằng mã. Không chắc nó hoạt động như thế nào nếu được khai báo bởi xml.
Robert

1
thay đổi này tự nó đã khắc phục sự cố cho tôi. cảm ơn bạn.
albert c braun

1
Vấn đề này cũng đã được khắc phục. Cảm ơn bạn đời!
rana

1
Ngoài ra, bạn có thể sử dụng:AppCompatResources.getDrawable(getContext(), R.drawable.drawable_xyz);
Warcello

19

Sử dụng:

compileSdkVersion 24
buildToolsVersion '24.0.1'

Tôi đã gặp sự cố lúc chạy cho đến khi tôi xóa dòng

  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }

từ hội ứng dụng của tôi.gradle

Điều này dường như gây nhầm lẫn với phiên bản SDK mới hơn

Hy vọng điều này sẽ cứu ai đó đang đau đầu


Điều này giúp ích cho tôi.
Sergey Shustikov

1
Việc xóa ectorDrawables.useSupportLibrary đã dừng sự cố trên thiết bị 4.4.2 của tôi.
Acapulco

Wow nó thực sự hoạt động! Nhưng tại sao có một lỗi lint khó chịu với app:srcCompat To use VectorDrawableCompat, you need to set android.defaultConfig.vectorDrawable.useSupportLibrary = true.? Nó rất khó hiểu!
HendraWD

12

Tôi đã khắc phục sự cố này bằng cách thay thế

dependencies {

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

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

với

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

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

10

Một kết hợp của một số giải pháp trên đã hiệu quả với tôi. Đây là những gì tôi đã làm -

Thay đổi phiên bản gradle từ 1.3.0 đến 1.5.0 trong build.gradlecác dự án như thế này

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

Cập nhật bên dưới mọi thứ trong build.gradlecác ứng dụng

buildToolsVersion "23.0.2"

Đã cập nhật các phụ thuộc Mô-đun từ 23.2.0 lên 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'

Bây giờ, tùy thuộc vào phiên bản gradle bạn đang sử dụng, hãy sử dụng một trong hai đoạn mã sau. Vì tôi đang sử dụng gradle 1.5.0, tôi đã sử dụng cái này -

defaultConfig {
            generatedDensities = []
            }

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

Nhưng nếu bạn đang sử dụng Gradle 2.1.0, hãy sử dụng nó để thay thế

       defaultConfig {  
         vectorDrawables.useSupportLibrary = true  
         }

Và sau đó bạn tốt để đi. Tôi đã thử nghiệm nó cả trong xml cũng như lập trình. Trong tệp xml, tôi đã sử dụng cái này trong ImageView của mình -

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

Và để làm điều đó theo chương trình, tôi đã sử dụng cái này -

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

Hy vọng nó giúp! Chúc mừng :)


9

Có cùng một vấn đề. Đối với tôi thực sự nâng cấp phiên bản Công cụ xây dựng đã giúp:

buildToolsVersion "23.0.2"

9

Đối mặt với sự cố sập trên api 19 khi cập nhật lên 23.2.0. Tôi đã giải quyết vấn đề này bằng cách cập nhật phiên bản lên 23.2.1. (Phiên bản mới nhất khi trả lời câu hỏi này. Hãy cố gắng cập nhật lên mới nhất, có thể google đã sửa nó)

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

1
Tại sao bạn cần phải biên dịch toàn bộ 'com.android.support:support:23.2.1'?
IgorGanapolsky

Bản mới nhất hiện tại là biên dịch 'com.android.support:support-v4:23.3.0' biên dịch 'com.android.support:appcompat-v7:23.3.0' biên dịch 'com.android.support:design:23.3.0 '
Alexandr

7

Đảm bảo bạn cũng sử dụng phiên bản mới nhất buildToolsVersion(Tải xuống từ trình quản lý SDK nếu cần).

Gradle mẫu:

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" tiết kiệm ngày của tôi :)
NullPointer

Đây là câu trả lời chính xác cho những ai đang cố gắng cập nhật để biên dịch sdk 24 nhưng vẫn gặp lỗi trên thiết bị 4.x.
fillobotto

4

Trong Gradle (gradle: 2.1.0):

defaultConfig {
    vectorDrawables.useSupportLibrary = true
}

Trong bố cục:

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

3

Tôi gặp sự cố này nhưng đang cập nhật lên phiên bản build: grade:

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

Và:

buildToolsVersion "23.0.2"

Sự thành công!



2

Tôi đã gặp phải vấn đề tương tự như vậy khi tôi tạo một phiên bản ứng dụng mới của mình. Sự phụ thuộc của tôi vào appcompact đã được đặt thành tự động cập nhật.

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

Vì vậy, ngay khi có phiên bản mới (trong trường hợp này là phiên bản 23.2.0), nó sẽ thay thế phiên bản cũ mà bạn đang xây dựng.

Vì vậy, bạn có thể chuyển về phiên bản trước của thư viện appcompat (Sửa nhanh):

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

Hoặc giữ phiên bản thư viện hiện tại và sử dụng câu trả lời của Ajinkya như được giải thích bởi google trong ghi chú phát hành phiên bản 23.2.0 . Nếu bạn chọn sau này, đừng quên cập nhật công cụ tạo gradle của bạn lên phiên bản 1.5.0 hoặc bạn không thể sử dụng các tham số mới như generatedDensities:

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

2

Đối mặt với cùng một vấn đề, giải pháp này đã khắc phục nó.

Trong lớp của bạn chỉ làm

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

và cũng thêm điều này vào tệp gradle của bạn nếu chưa.

defaultConfig {
    vectorDrawables.useSupportLibrary = true
}

1

Tôi đã sửa nó bằng cách thiết lập ..

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

Thử này, nhưng đã không làm việc cho tôi ... Sử dụng Android IDE
Karyuu Ouji

1

Tôi cũng gặp sự cố này, những gì tôi đã làm: thay đổi

compileSdkVersion 24
buildToolsVersion "22.0.1"

đến

compileSdkVersion 24
buildToolsVersion "24.0.1"

1

Chèn vào build.gradle (Mô-đun: ứng dụng):

android {  
  defaultConfig {  
    vectorDrawables.useSupportLibrary = true  
  }  
}

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

Sau đó, sử dụng mã bên dưới, trong AppActivity của bạn:

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

Nếu có sẵn, hãy sử dụng ứng dụng: srcCompat thay cho android: srcandroid: background , trong tệp tài nguyên XML


0

Tôi gặp sự cố này nhưng việc cập nhật lên các phiên bản bên dưới đã khắc phục sự cố cho tôi:

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

Và:

buildToolsVersion "23.0.2"

Phụ thuộc mô-đun:

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

Tôi đã khắc phục sự cố bằng cách thay thế

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

với

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

0

Tôi cũng gặp lỗi này trong Android Studio 2.2 sau khi cập nhật các phần phụ thuộc Gradle của mình lên phiên bản mới nhất nhưng quên cập nhật buildToolsVersion của dự án của mình.

Tôi đã thay đổi:

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

đến:

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

Trong khi buildToolsVersion vẫn "22.0.1"như vậy:

buildToolsVersion "22.0.1"

Vì vậy, tất cả những gì tôi làm là cập nhật buildToolsVersion lên 24 như sau:

buildToolsVersion "24"

vì trước đó nó đã được tải xuống bằng Trình quản lý SDK. Vì vậy, hãy kiểm tra bản mới nhất buildToolsVersiontừ Trình quản lý SDK và xem nó có khớp với phiên bản phụ thuộc hay không.

Hy vọng điều này sẽ giúp ai đó.


0

Đối với tôi, điều hoạt động ... là xóa 's' khỏi 'https' trong khai báo không gian tên của vector có thể vẽ được xml của tôi.

XML đó đến từ chính tài liệu Google Android. Bạn có thể thấy trong ảnh chụp màn hình rằng xmlns là 'http' nhưng trong phiên bản có thể sao chép bên dưới, nó là 'https.'

Điều này sẽ ngăn lỗi hiển thị trong trình xem Nội dung vectơ, nhưng bạn vẫn sẽ không nhìn thấy bất kỳ thứ gì, vì lý do tôi không hiểu. Nó phải trông giống như một cờ lê.

Nếu bạn nhấp chuột phải vào thư mục có thể vẽ và "Mới -> Tài sản vectơ", bạn sẽ nhận được tài sản biểu tượng android hoạt động.

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

Cả thiết kế và appcompat-v7 của tôi đều sử dụng 23.2.1 và buildToolsVersion 23.0.2.

Điều này chỉ trong. Cờ lê được tạo bởi tệp giao diện 'biểu tượng vật liệu' -> mới -> tài sản vectơ -> biểu tượng vật liệu (sau đó nhấp vào biểu tượng và chọn cờ lê) là:

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

Tiện ích trực tuyến này đã làm tốt bởi tôi. Sử dụng Chrome. Nó chuyển đổi SVG sang các tệp có thể vẽ được vector android.


0

vấn đề là:

/VdcInflateDelegate: Exception while inflating <vector>

giải pháp:

đổi compileSdkVersion 23 buildToolsVersion "23.0.2" thànhcompileSdkVersion 24 buildToolsVersion "24.0.2"

mã giải pháp:

compileSdkVersion 24
buildToolsVersion '24.0.1'

bằng cách sử dụng mã trên, tôi đã giải quyết được vấn đề


0

Chỉ cần thêm phần phụ thuộc sau vào build.gradle của bạn. điều này sẽ khắc phục sự cố của bạn. Tôi đang sử dụng buildToolsVersion 25.0.2.

biên dịch 'com.android.support:support-vector-drawable:25.3.0'


0

Tôi đã thay đổi FragmentActivity thành AppCompatActivity, vấn đề đã được giải quyết. Môi trường của tôi là:

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

0

Trong trường hợp của tôi , giải pháp này đã hoạt động:

Sử dụng

android:theme="@style/TextLabelWhite"

giống như trong xml của bạn. Thay đổi kiểu gốc thành kiểu AppTheme của bạn, như:

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

0

Mặc dù tôi đã bật hỗ trợ vectơ trong gradle của mình và có phiên bản gradle mới nhất, công cụ xây dựng, thư viện hỗ trợ và Android studio, tôi vẫn gặp lỗi.

Đây là một bản sửa lỗi cho trường hợp của tôi:

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

để chèn cảnh báo xơ vải, hãy thêm cái này @SuppressLint("RestrictedApi")


0

thử sử dụng: biên dịch 'com.android.support:design:23.1.1'

thay vì: biên dịch "com.android.support:appcompat-v7:23.2.0"


0

Cũng được quan sát trên buildToolsVersion '26 .0.2 '

Downgrade để buildToolsVersion '25 .0.3' làm việc .

Đối với buildToolsVersion '26 .0.2 ': Hãy dùng thử AppCompat cho Widgets Ví dụ: TextView -> android.support.v7.widget.AppCompatTextView (Đối với hỗ trợ Phiên bản Android cũ hơn) Cũng được quan sát thấy trên các thiết bị cấp thấp hơn khi thiết bị không thể mở rộng các ngăn kéo do bộ nhớ sự thiếu hụt. (Mặc dù cái có thể vẽ tồn tại trong dir có thể kéo được của bạn): Hãy thử thay đổi cái có thể vẽ của bạn bằng những cái ít phức tạp hơn .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.