web-dev-qa-db-fra.com

Le drapeau Vector Drawables ne fonctionne pas sur la bibliothèque de support 24+

Aujourd'hui, il semble que Android Nougat était publié . Ainsi, je suis plus heureux que jamais d'optimiser mon application pour les nouvelles fonctionnalités comme l'écran partagé. Je voudrais tiens à pousser une version de mon application qui cible la version du SDK 24 afin que les utilisateurs ne soient pas informés que mon application peut ne pas fonctionner en écran partagé. Cependant, cela signifie que je devrais également mettre à jour vers la version 24 de la bibliothèque de support. Comme beaucoup d'autres, j'ai rencontré un problème lors de la mise à jour vers la version 23.2.0 de la bibliothèque de support. Cependant, j'ai suivi cette réponse et cela a résolu mon problème. Maintenant, le problème revient à partir de la version 24.0.0 et plus de la bibliothèque de support. Dans tous mes tests, j'utilise le drapeau gradle décrit dans la réponse liée:

vectorDrawables.useSupportLibrary = true

Il est également important de noter que cela ne se produit que sur les appareils pré-Lolliop (KitKat et inférieurs). Lollipop and up fonctionne parfaitement. Lorsque vous utilisez les dépendances suivantes, l'indicateur fonctionne correctement:

compile 'com.Android.support:support-v4:23.4.0'
compile 'com.Android.support:appcompat-v7:23.4.0'
compile 'com.Android.support:design:23.4.0'
compile 'com.Android.support:cardview-v7:23.4.0'

Mais lorsque j'utilise ces dépendances, j'obtiens un plantage similaire à celui que j'ai reçu avant d'utiliser l'indicateur:

compile 'com.Android.support:support-v4:24.2.0'
compile 'com.Android.support:appcompat-v7:24.2.0'
compile 'com.Android.support:design:24.2.0'
compile 'com.Android.support:cardview-v7:24.2.0'

Voici la trace de pile du crash:

FATAL EXCEPTION: main
Process: com.badon.brigham.time, PID: 2070
Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.badon.brigham.time/com.badon.brigham.time.MainActivity}: Android.content.res.Resources$NotFoundException: File res/drawable/abc_vector_test.xml from drawable resource ID #0x7f02004f
      at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2195)
      at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2245)
      at Android.app.ActivityThread.access$800(ActivityThread.Java:135)
      at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1196)
      at Android.os.Handler.dispatchMessage(Handler.Java:102)
      at Android.os.Looper.loop(Looper.Java:136)
      at Android.app.ActivityThread.main(ActivityThread.Java:5017)
      at Java.lang.reflect.Method.invokeNative(Native Method)
      at Java.lang.reflect.Method.invoke(Method.Java:515)
      at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:779)
      at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:595)
      at dalvik.system.NativeStart.main(Native Method)
    Caused by: Android.content.res.Resources$NotFoundException: File res/drawable/abc_vector_test.xml from drawable resource ID #0x7f02004f
      at Android.content.res.Resources.loadDrawable(Resources.Java:2101)
      at Android.content.res.Resources.getDrawable(Resources.Java:700)
      at Android.support.v4.content.ContextCompat.getDrawable(ContextCompat.Java:346)
      at Android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.Java:194)
      at Android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.Java:182)
      at Android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.Java:717)
      at Android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.Java:187)
      at Android.support.v7.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.Java:77)
      at Android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.Java:127)
      at Android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.Java:147)
      at Android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.Java:27)
      at Android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.Java:50)
      at Android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.Java:201)
      at Android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.Java:181)
      at Android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.Java:521)
      at Android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.Java:71)
      ...

Suis-je totalement en train de manquer quelque chose? Ou est-ce déjà un problème connu (je n'ai rien trouvé sur Google)? Toute aide serait appréciée.

23
Brigham B.

Ugh ... Je déteste quand ça arrive. Vous posez une question et y répondez vous-même quelques heures plus tard. Quoi qu'il en soit, il semble que j'utilisais une version obsolète des outils de construction. Tout ce que j'avais à faire était de changer une ligne dans mon gradle:

buildToolsVersion "24.0.1"
30
Brigham B.

En plus de la configuration Gradle, l'astuce était pour moi d'ajouter cette ligne dans l'activité onCreate () :

@Override
public void onCreate() {
    super.onCreate();
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

Votre build.gradle (projet) si vous utilisez la version 2.0+ ajoutez le code ci-dessous dans votre build.gradle (application)

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

et, si vous utilisez la version 1.5, ajoutez ci-dessous dans votre build.gradle (app)

// Gradle Plugin 1.5  
 Android {  
   defaultConfig {  
     generatedDensities = []  
  }  

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

et, bien sûr, dans les fichiers de mise en page, vous devez utiliser l'attribut srcCompat:

<ImageView  
  Android:layout_width="wrap_content"  
  Android:layout_height="wrap_content"  
  app:srcCompat="@drawable/ic_add"/>
11
Mr.Moustard

Dans la version 24.2.0, la bibliothèque de support v4 a été divisée par Google en plusieurs modules plus petits:

com.Android.support:support-compat:24.2.0

Fournit des wrappers de compatibilité pour les nouvelles API de framework, telles que Context.getDrawable () et View.performAccessibilityAction ().

com.Android.support:support-core-utils:24.2.0

Fournit un certain nombre de classes d'utilitaires, telles que AsyncTaskLoader et PermissionChecker.

com.Android.support:support-core-ui:24.2.0

Implémente une variété de composants liés à l'interface utilisateur, tels que ViewPager, NestedScrollView et ExploreByTouchHelper.

com.Android.support:support-media-compat:24.2.0

Rétroportage des parties du cadre multimédia, y compris MediaBrowser et MediaSession.

com.Android.support:support-fragment:24.2.0

Rétroporte le cadre de fragment. Ce module a des dépendances sur support-compat, support-core-utils, support-core-ui et support-media-compat.

Vous pouvez voir tous les changements ici

3
Duda

La réponse à ce problème est donc de rappeler Android mainteneurs qu'ils ont laissé tomber la balle et leur demander de réparer leurs bibliothèques.

Le fichier abc_vector_text.xml est absent du projet au moment de l'exécution, mais le fichier manquant ne sera pas signalé dans la génération si votre projet ne l'utilise pas en premier lieu. Le nom du fichier indique qu'il ne fait partie que d'une suite de tests.

J'utilise la dépendance suivante: compile 'com.Android.support:appcompat-v7:25.0.1'

Parce que cette page indique que le fichier se trouve dans cette bibliothèque: https://github.com/dandar3/Android-support-v7-appcompat/blob/master/res/drawable/abc_vector_test.xml.

et pourtant, je vois toujours l'erreur au moment de l'exécution.

Notez que c'est un lien github d'un projet qui n'est pas le projet officiel Android. Je n'arrive pas à trouver le fichier dans la construction officielle du projet. Ce qui, encore une fois, indique que c'est juste un problème de maintenance bâclée. Voici mon stacktrace pour comparaison:

ontent.res.Resources$NotFoundException: File res/drawable/abc_vector_test.xml from drawable resource ID #0x7f020052
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2180)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2230)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.app.ActivityThread.access$600(ActivityThread.Java:141)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1234)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.os.Handler.dispatchMessage(Handler.Java:99)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.os.Looper.loop(Looper.Java:137)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.app.ActivityThread.main(ActivityThread.Java:5041)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Java.lang.reflect.Method.invokeNative(Native Method)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Java.lang.reflect.Method.invoke(Method.Java:511)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:793)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:560)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at dalvik.system.NativeStart.main(Native Method)
01-02 00:02:23.130 E/AndroidRuntime( 3037): Caused by: Android.content.res.Resources$NotFoundException: File res/drawable/abc_vector_test.xml from drawable resource ID #0x7f020052
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.content.res.Resources.loadDrawable(Resources.Java:1953)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.content.res.Resources.getDrawable(Resources.Java:660)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.support.v4.content.ContextCompat.getDrawable(ContextCompat.Java:374)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.Java:200)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.Java:188)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.Java:723)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.Java:193)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.support.v7.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.Java:81)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.Java:127)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.Java:147)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.Java:27)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.Java:53)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.Java:205)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.Java:185)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.Java:525)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.Java:74)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at com.ccc.lib.activity.LoggingAppCompatActivity.onCreate(LoggingAppCompatActivity.Java:416)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at com.ccc.lib.debugMode.DebugModeActivity.onCreate(DebugModeActivity.Java:95)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at com.ccc.lib.activity.IBusActivity.onCreate(IBusActivity.Java:46)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at com.ccc.lib.activity.MainActivity.onCreate(MainActivity.Java:173)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.app.Activity.performCreate(Activity.Java:5104)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1080)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2144)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     ... 11 more
01-02 00:02:23.130 E/AndroidRuntime( 3037): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #17: invalid drawable tag vector
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.graphics.drawable.Drawable.createFromXmlInner(Drawable.Java:881)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.graphics.drawable.Drawable.createFromXml(Drawable.Java:822)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     at Android.content.res.Resources.loadDrawable(Resources.Java:1950)
01-02 00:02:23.130 E/AndroidRuntime( 3037):     ... 33 more
2
Coder Roadie

J'ai eu le même problème avec dexguard. Ajoutez cette ligne sur votre fichier de configuration:

-keepresourcexmlattributenames vector/*
1
ialfa1987

pour moi, c'était l'ancien wrapper des outils de construction dans le fichier racine build.gradle du projet

dependencies {
    ....
    classpath 'com.Android.tools.build:gradle:2.1.2'
}

au lieu de

classpath 'com.Android.tools.build:gradle:1.X.X'
0
zaPlayer