Подтвердить что ты не робот

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?

4b9b3361

Ответ 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, однако вы можете загрузить ее вручную из .