web-dev-qa-db-fra.com

XmlPullParserException ligne de fichier XML binaire # 17 La balise <vector> nécessite viewportWidth>

Ceci est une question de suivi à cette question:

Mise à jour de la bibliothèque de support Android sur 23.2.0: Cause: la ligne de fichier XML binaire # 17 de la balise <vector> XmlPullParserException requiert viewportWidth> 0

J'ai également mis à jour la bibliothèque de support à 23.2 et j'ai commencé à avoir l'erreur suivante:

XmlPullParserException Binary XML file line #17<vector> tag requires viewportWidth > 0

Cette question a résolu pour Android Studio et Gradle. Comment cela peut-il être résolu lorsque vous utilisez Eclipse sans Gradle?

21
Yonatan Nir

Une réponse précédente à cette question avait une solution pour les développeurs qui utilisent Gradle, mais comme je n’utilise pas Gradle, je veux résumer sa réponse qui a aidé plusieurs personnes et ce que j’ai finalement fait. J'ai accepté ma propre réponse et non la sienne puisque, comme je l'ai dit, je n'utilise pas Gradle, je n'ai donc pas utilisé ce qu'il a écrit.

J'ai fait plusieurs choses pour que cela fonctionne à la fin. Les solutions possibles sont:

Tout d'abord pour les utilisateurs de Gradle:

1) Rétablissez la version précédente de la bibliothèque de support, car celle-ci présente un bogue.

2) utilisez la compilation 'com.Android.support:appcompat-v7:23.2.1' car le bogue a été corrigé ici.

3) pour Gradle Plugin 2.0:

Android {  
    defaultConfig {  
        vectorDrawables.useSupportLibrary = true  
    }  
}

Ou vous pouvez utiliser Grade Build Tools 1.5.0 (classpath 'com.Android.tools.build:gradle:1.5.0')

defaultConfig {
    generatedDensities = []
}

// pas besoin de ça avec Gradle 2.0

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

Ceci est la partie pour les utilisateurs non Gradle:

1) Ouvrez le gestionnaire de SDK.

2) Désinstallez "Android Wear X" (où X est ARM ou Intel) des API 22 et 23.

3) Il me restait encore une erreur de compilation dans l’un des styles de la bibliothèque AppCompat. Je les ai simplement commentés (je risquerais de perdre le périphérique spécifique si ce style est utilisé).

Après cela, j'ai nettoyé le projet et il a juste commencé à fonctionner.

4
Yonatan Nir

Vous pouvez soit revenir à la version précédente de la bibliothèque appcompat (solution rapide):

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

Ou conservez la version actuelle de la bibliothèque et effectuez la mise à jour appropriée de votre fichier de génération, comme expliqué par google dans la version 23.2.0 release note

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

Si vous utilisez Gradle 1.5, vous utiliserez plutôt

defaultConfig {
    generatedDensities = []
}

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

N'oubliez pas de mettre à jour votre outil de génération de Gradle à la version 1.5.0 au moins, sinon vous ne pourriez pas utiliser les nouveaux paramètres tels que généréDensités:

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

Plus d'infos sur pourquoi ici

9
Gomino

Pour les nouveaux utilisateurs uniquement, ce problème est résolu dans:

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

3
Arsalan Shah

Événement après avoir essayé les réponses déjà fournies, l'application se bloquait sur certains appareils (principalement Samsung). Donc, parallèlement à cela, j'ai essayé de charger un vecteur comme celui-ci

Drawable drawable = AppCompatDrawableManager.get().getDrawable(context, R.drawable.resource_id);

Cette AppCompatDrawableManager tente en interne d'extraire drawable avec différentes méthodes:

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

Ainsi, cela fonctionne sur toutes les versions d'Android et tous les appareils (espérons-le).

Remarque: Ne pas essayez d'utiliser la méthode de Picasso (2.5.2) ou de Glide (3.7.0) pour charger des vecteurs extractibles. Parce qu’ils utilisent en interne la méthode obsolète getDrawable(@DrawableRes int id). Ce qui entraînera Resources.NotFoundException sur certains appareils.

3
Rohit Arya

J'ai eu la même erreur dans Android Studio 2.2 après avoir mis à jour mes dépendances Gradle avec les dernières versions, mais j'ai oublié de mettre à jour le buildToolsVersion de mon projet. 

J'ai changé:

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

à:

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

Alors que buildToolsVersion est resté à "22.0.1" comme ceci:

    buildToolsVersion "22.0.1"

Donc tout ce que j'ai fait est de mettre à jour le buildToolsVersion à 24 comme ceci: 

    buildToolsVersion "24"

depuis qu'il a été précédemment téléchargé avec SDK Manager. Vérifiez donc la dernière buildToolsVersion du gestionnaire de SDK et voyez si elle correspond à la version des dépendances.

J'espère que ça aide quelqu'un.

3
Cletus Ajibade

Pour les personnes comme moi qui utilisent encore Eclipse sans Gradle, cette erreur s'est produite avec Android Support Library r23.2.0 s'exécutant sur des périphériques antérieurs à Lollipop (API <21). 

Ce problème a été résolu dans la version 23.2.1 et j'ai pu exécuter mon projet avec le niveau 16 de l'API.

Cette version de la bibliothèque pour Eclipse n’est plus disponible par le biais du SDK Manager, mais vous pouvez la télécharger manuellement à partir de ce link .

0
Couitchy

Si le problème est dans la version de l'application version. Ceci a résolu pour ma version Je pense que parce que si vous mettez shrinkResources true, les dossiers pouvant être créés créés ne contiennent pas les fichiers pouvant être utilisés.

    {
        ..
        minifyEnabled true
        shrinkResources false

    }
0
Somir Saikia