Android:在res中使用SVG会导致错误:"文件名必须以.xml或.png"结尾。

时间:2015-05-29 15:49:29

标签: android svg gradle android-gradle

我刚刚更新了Android Studio 1.2.1.1,现在gradle在我的资源文件夹中遇到svg问题。我总是使用SVG没有问题,我希望他们将被允许"在将来。

: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

任何想法如何解决?

6 个答案:

答案 0 :(得分:19)

Android不支持SVG文件作为drawables。即使你把它们放在那里,系统也无法像你期望的那样解码它们。而是尝试将它们放在src/main/res/rawsrc/main/assets文件夹中并适当加载它们(通过外部库)。大多数人混淆SVG和Vector-drawables,它们不是一回事。 Vector-drawables使用与SVG兼容的路径迷你语言,但就是这样。

当前接受的解决方案是恢复到Gradle插件的古老版本,这在大多数情况下会适得其反。工具团队正在投入大量精力来使构建更好(这是非常值得注意的)。

而不是恢复你应该向前推进1.5.0(现在已稳定一段时间)并添加 android.disableResourceValidation=true放入gradle.properties文件(通常位于settings.gradle旁边的根项目中),以启用1.2.2之前的行为。

有关详细信息,请参阅http://b.android.com/192493

答案 1 :(得分:6)

drawable资源目录中的webp文件存在同样的问题。

最新的gradle插件(v1.2.3)无法识别以前使用过的某些图像格式。当我切换回v1.2.2

时,我没有这个问题

更新:鉴于此功能已修复,您应该升级到最新的gradle插件版本而不是还原。

您可以通过设置:

来更改build.gradle中的版本
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'
  }
}

答案 2 :(得分:1)

在Android中你应该使用(XML)Vector Drawable文件(它们包含XML中的SVG信息,详细信息:https://developer.android.com/training/material/drawables.html#VectorDrawables)。

Vector Drawables可以从这个存储库下载:https://github.com/google/material-design-icons。在图标目录中查找名为 drawable-anydpi-v21 的文件夹。此文件夹包含要放置在应用程序的drawable目录中的Vector Drawable文件。

请注意,仅支持Android 5.0及更高版本才能使用Vector Drawable文件。如果您需要与< 5.0 Android版兼容,我建议您使用此库:https://github.com/trello/victor 在编译应用程序期间,此库可用于将SVG文件转换为不同格式的drawable。这使您无需手动创建和保存mdpi / hdpi / xhdpi / xxhdpi文件夹。

如果您同等地命名Vector drawable文件和SVG文件,则可以使用彼此相邻的两种方法。

答案 3 :(得分:0)

问题仍然存在于gradle 1.5上。 似乎未来唯一的选择是使用“创建矢量资产”将svg文件转换为xml,然后选择svg文件选项。

答案 4 :(得分:0)

将以下内容添加到您的gradle.properties中:

  

android.disableResourceValidation = true

答案 5 :(得分:-1)

在使用build时,android studio 1.5.1中存在一个问题:gradle:1.5.0.please给出解决方案。 我刚刚更新了Android Studio 1.5.1,现在gradle在我的资源文件夹中遇到svg问题。我总是使用SVG没有问题,我希望他们将来会被“允许”。