web-dev-qa-db-fra.com

Android: L'utilisation de SVG dans res entraîne l'erreur: "Le nom du fichier doit se terminer par .xml ou .png"

Je viens de mettre à jour Android Studio 1.2.1.1 et gradle a maintenant des problèmes avec svg dans mon dossier de ressources. J'utilisais toujours les SVG sans problème et j'espère qu'ils seront "autorisés" à l'avenir.

:app:mergeDebugResources
:app:mergeDebugResources FAILED
/home/petergriffin/folder1/another-app/MyAwesome-App/app/src/main/res/drawable-hdpi/logo.svg
Error:Error: The file name must end with .xml or .png
Error:Execution failed for task ':app:mergeDebugResources'.
> /home/petergriffin/folder1/another-app/MyAwesome-App/app/src/main/res/drawable-hdpi/logo.svg: Error: The file name must end with .xml or .png
Information:BUILD FAILED

Des idées comment résoudre cela?

10
Rob Anderson

Même problème avec les fichiers webp dans le répertoire de ressources pouvant être dessiné.

Le dernier plugin Gradle (v1.2.3) ne reconnaît pas certains formats d'image qui fonctionnaient auparavant. Je n'ai pas le problème quand je repasse en v1.2.2

UPDATE: Étant donné que cette fonctionnalité a été corrigée, vous devez mettre à niveau le dernier plugin Gradle au lieu de revenir en arrière.

Vous pouvez changer la version dans votre build.gradle en définissant:

buildscript {

  repositories {
      jcenter()
      mavenCentral()
      // mavenLocal() // Only if you want to use your local maven repo
  }

  dependencies {
      // classpath 'com.Android.tools.build:gradle:+'
      classpath 'com.Android.tools.build:gradle:1.2.2'
  }
}
6
afrank

Les fichiers SVG ne sont pas pris en charge par Android en tant que dessinables. Même si vous les mettez là, le système ne peut pas les décoder comme vous le souhaiteriez. Essayez plutôt de les mettre dans le dossier src/main/res/raw ou src/main/assets et de les charger correctement (via une bibliothèque externe). La plupart des gens confondent SVG et Vector-drawables, ce n'est pas la même chose. Les dessins vectoriels utilisent le mini-langage de chemin compatible SVG, mais c'est à peu près tout.

La solution actuellement acceptée consiste à revenir à une version archaïque du plugin Gradle, ce qui est contre-productif dans la plupart des cas. L'équipe des outils investit beaucoup d'efforts pour améliorer la construction (c'est vraiment perceptible).

Au lieu de revenir en arrière, vous devriez extraire 1.5.0 (stable depuis un moment) et ajouter Android.disableResourceValidation=true dans votre fichier gradle.properties (généralement situé dans le projet racine à côté de settings.gradle) pour activer le comportement antérieur à 1.2.2.

Pour plus d'informations, voir http://b.Android.com/192493

17
TWiStErRob

Sous Android, vous devez utiliser des fichiers vectoriels dessinés (XML) (ils contiennent les informations SVG contenues dans le fichier XML, détails: https://developer.Android.com/training/material/drawables.html#VectorDrawables ). 

Vector Drawables peut être téléchargé à partir de ce référentiel: https://github.com/google/material-design-icons . Recherchez les dossiers appelés drawable-anydpi-v21 dans les répertoires d'icônes. Ce dossier contient les fichiers Vector Drawable à placer dans le répertoire drawable de votre application.

Notez que l'utilisation des fichiers Vector Drawable est uniquement prise en charge pour Android 5.0 et versions ultérieures. Si vous devez être compatible avec la version Android <5.0, je vous recommande d’utiliser cette bibliothèque: https://github.com/trello/victor Cette bibliothèque peut être utilisée pour convertir des fichiers SVG en tirables dans différents formats lors de la compilation de votre application. Ce qui vous évite de devoir créer et conserver manuellement des dossiers mdpi/hdpi/xhdpi/xxhdpi.

Si vous nommez les fichiers vectoriels vectoriels et les fichiers SVG de la même manière, vous pouvez utiliser les deux approches l'une à côté de l'autre.

1
Peter

le problème persiste toujours au niveau 1.5 . Il semble que la seule option à l’avenir soit de convertir les fichiers svg en xml à l’aide de "créer un actif vectoriel", puis de sélectionner l’option de fichier svg.

0
Noam a