Использование библиотеки поддержки Android 23.2 в приложении build.gradle crashes (XmlPullParserException: XmlPullParserException: недопустимый вектор ярлыка)

Приложение прекрасно работает при использовании плагина поддержки библиотеки v23.1.1 и работает под Android 4.4.4 (API 19):

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

Однако, когда я его создаю, используя новую версию (23.2) библиотеки поддержки Android, он сбой:

XmlPullParserException: Binary XML file line #17: invalid drawable tag vector

Это происходит, когда приложение хочет раздуть диалоговое окно с простым пользовательским представлением. Пользовательское представление использует XML-файл, содержащий <shape> как один из его доступных.

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="@android:color/white" > </solid> <corners android:radius="5dp"> </corners> <stroke android:width="1dp" android:color="@color/AppColor" /> </shape> 

Хотя я не могу точно определить этот SVG-based, который можно использовать в журналах сбоев, но я предполагаю, что с тех пор, как Google представил поддержку VectorDrawables , она каким-то образом сталкивается с моим приложением.

Любой намек или ввод о том, как определить виновника, оценивают.

Solutions Collecting From Web of "Использование библиотеки поддержки Android 23.2 в приложении build.gradle crashes (XmlPullParserException: XmlPullParserException: недопустимый вектор ярлыка)"

Я столкнулся с подобной проблемой. Я получал ту же ошибку, потому что я все еще использовал атрибут android: src вместо приложения: srcCompat при настройке источника моего ImageView

Изменение этого атрибута везде, где вы ссылаетесь на переносимый вектор, поможет устранить проблему.

Старый:

 <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_add" /> 

Новое:

 <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" app:srcCompat="@drawable/ic_add" /> 

Оказалось, что есть два отдельных вопроса:

  • Я использовал простой RadioButton в своих XML-файлах. Сменив его на android.support.v7.widget.AppCompatRadioButton исправлена ​​проблема.
  • Во-вторых, поскольку сообщение в блоге предполагало, что мне пришлось переносить некоторые из выделенных элементов в контейнеры, поэтому библиотека поддержки могла использовать их при создании векторного чертежа. Например, в одной из моих пользовательских кнопок у меня был фон на основе вектора, сохраненный в dialog_bg.xml , button_round_bg.xml и button_round_bg_2.xml .

    Чтобы исправить это, я должен был поместить их в один из контейнеров (например, список состояний , вставка или уровень ). Эта оболочка была сохранена в vector_wrapper.xlm именем vector_wrapper.xlm :

 <level-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/dialog_bg" android:maxLevel="1" android:minLevel="1" /> <item android:drawable="@drawable/button_round_bg" android:maxLevel="2" android:minLevel="2" /> <item android:drawable="@drawable/button_round_bg_2" android:maxLevel="3" android:minLevel="3" /> </level-list> 

Теперь я бы изменил фон своей пользовательской кнопки, чтобы сказать

 <customButton android:background="@drawable/vector_wrapper" </customButton> 

Поскольку обертка теперь имеет три чертежа, я могу выбрать их в коде Java в соответствии с моими потребностями:

 customButton btnSave = (customButton) view.findViewById(R.id.btnSave); btnSave.getBackground().setLevel(3); 

Вам не нужно обертывать контейнеры, если ваше представление – это образное представление, поскольку другой ответ by @themichaelscott предполагает, что в этом случае просто измените src на app:srcCompat="@drawable/ic_add"