XmlPullParserException Бинарная строка XML файла # 17 <vector> требует viewportWidth> 0
Это следующий вопрос к этому вопросу:
Обновить библиотеку поддержки Android до 23.2.0 вызвать ошибку: XmlPullParserException Бинарная строка XML файла # 17 <vector> тегу требуется viewportWidth > 0
Я также обновил библиотеку поддержки до 23.2 и начал получать ошибку:
XmlPullParserException Binary XML file line #17<vector> tag requires viewportWidth > 0
Этот вопрос решил его для Android Studio и Gradle. Как это можно решить при использовании Eclipse без Gradle?
Ответы
Ответ 1
Предыдущий ответ на этот вопрос имел решение для разработчиков, которые используют Gradle, но я не использую Gradle, поэтому я хочу обобщить его ответ, который помог нескольким людям и тем, что я в итоге сделал. Я принял свой собственный ответ, а не его, так как, как я уже сказал, я не использую Gradle, поэтому я не использовал то, что он написал.
Я сделал несколько вещей, чтобы он работал в конце. Возможные решения:
Сначала для пользователей Gradle:
1) Верните библиотеку поддержки в более старую версию, так как в ней есть ошибка.
2) используйте компиляцию 'com.android.support:appcompat-v7:23.2.1', поскольку там была исправлена ошибка.
3) для Gradle Плагин 2.0:
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
Или вы можете использовать Grade Build Tools 1.5.0 (classpath 'com.android.tools.build:gradle:1.5.0'
)
defaultConfig {
generatedDensities = []
}
//нет необходимости в этом с помощью Gradle 2.0
aaptOptions {
additionalParameters "--no-version-vectors"
}
Это часть для пользователей Gradle:
1) Откройте диспетчер SDK.
2) Утилита "Android Wear X" (где X - ARM или Intel) из API 22 и 23.
3) У меня тогда была ошибка компиляции в одном из стилей библиотеки AppCompat. Я просто прокомментировал их (я рискую, что очень специфическое устройство не работает, если оно использует этот очень специфический стиль).
После этого я очистил проект, и он только начал работать.
Ответ 2
Вы можете либо вернуться к предыдущей версии библиотеки appcompat (Quick fix):
compile 'com.android.support:appcompat-v7:23.1.1'
Или сохраните текущую версию библиотеки и внесите соответствующее обновление в файл сборки gradle, как описано в google в примечании к выпуску версии 23.2.0.
//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"
}
Не забудьте обновить свой инструмент сборки gradle до версии 1.5.0, по крайней мере, или вы не сможете использовать новые параметры, такие как generateDensities:
classpath 'com.android.tools.build:gradle:1.5.0'
Дополнительная информация о том, почему здесь
Ответ 3
Только для новых пользователей эта проблема исправлена в:
compile 'com.android.support:appcompat-v7:23.2.1'
Ответ 4
Я получил эту же ошибку в 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 и посмотрите, соответствует ли она версиям зависимостей.
Надеюсь, это поможет кому-то.
Ответ 5
Событие после проверки уже предоставленных ответов, приложение рушилось на некоторых устройствах (в основном Samsung). Таким образом, я попытался загрузить векторные чертежи, подобные этому
Drawable drawable = AppCompatDrawableManager.get().getDrawable(context, R.drawable.resource_id);
Этот AppCompatDrawableManager
внутренне пытается извлечь drawable различными способами:
Drawable getDrawable(@NonNull Context context, @DrawableRes int resId,
boolean failIfNotKnown) {
checkVectorDrawableSetup(context);
Drawable drawable = loadDrawableFromDelegates(context, resId);
if (drawable == null) {
drawable = createDrawableIfNeeded(context, resId);
}
if (drawable == null) {
drawable = ContextCompat.getDrawable(context, resId);
}
if (drawable != null) {
// Tint it if needed
drawable = tintDrawable(context, resId, failIfNotKnown, drawable);
}
if (drawable != null) {
// See if we need to 'fix' the drawable
DrawableUtils.fixDrawable(drawable);
}
return drawable;
}
Таким образом, он работает со всеми версиями Android и всеми устройствами (надеюсь).
Примечание. Не пытайтесь использовать метод Picasso (2.5.2) или Glide (3.7.0) для загрузки векторных чертежей. Потому что они внутренне используют устаревший метод getDrawable(@DrawableRes int id)
. Это приведет к Resources.NotFoundException
на некоторых устройствах.
Ответ 6
Для таких людей, как я, все еще использующих Eclipse без Gradle, у меня была эта ошибка с Android-библиотекой поддержки r23.2.0, работающей на устройствах до Lollipop (API < 21).
Эта проблема исправлена в r23.2.1, и я успешно выполнил мой проект на уровне API 16.
Эта версия библиотеки для Eclipse больше не доступна через SDK Manager, однако вы можете загрузить ее вручную из .