Android: Using SVG in res leads to error: "The file name must end with .xml or .png"

Android: Using SVG in res leads to error: "The file name must end with .xml or .png"

我刚刚更新了 Android Studio 1.2.1.1,现在 gradle 我的资源文件夹中的 svg 出现问题。我一直在毫无问题地使用 SVG,我希望它们将来会 "allowed"。

: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

有什么解决办法吗?

可绘制资源目录中的 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'
  }
}

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

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

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

如果您将 Vector drawable 文件和 SVG 文件命名为相同的名称,则可以同时使用这两种方法。

问题仍然存在于 gradle 1.5。 似乎未来唯一的选择是使用 "create vector asset" 然后 select svg 文件选项将 svg 文件转换为 xml。

android studio 1.5.1 在使用 build:gradle:1.5.0.please 时出现问题,请给出解决方案。 我刚刚更新了 Android Studio 1.5.1,现在 gradle 我的资源文件夹中的 svg 出现问题。我一直在毫无问题地使用 SVG,我希望它们将来会 "allowed"。

Android 不支持 SVG 文件作为可绘制对象。即使你把它们放在那里,系统也不能像你期望的那样解码它们。而是尝试将它们放在 src/main/res/rawsrc/main/assets 文件夹中并适当地加载它们(通过外部库)。大多数人混淆了 SVG 和 Vector-drawables,它们不是一回事。矢量绘图使用 SVG 兼容的路径迷你语言,仅此而已。

当前接受的解决方案是恢复到 Gradle 插件的旧版本,这在大多数情况下会适得其反。工具团队正在投入大量精力使构建变得更好(这真的很明显)。

而不是还原你应该拉到1.5.0(现在已经稳定了一段时间)并添加 android.disableResourceValidation=true 到您的 gradle.properties 文件(通常位于 settings.gradle 旁边的根项目中)以启用 1.2.2 之前的行为。

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

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

android.disableResourceValidation=true

通过“资源管理器”svg 简单导入到 xml