添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

14 人关注

我刚刚更新了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

有什么办法可以解决这个问题吗?

2 个评论
虽然昨天在Google I|O 2015上宣布了SVG作为可绘制资源的基础,但AFAIK它需要Android Studio 1.3。有一些第三方的Gradle插件可以提供SVG到drawable的转换。除此之外,我不知道SVG曾经是合法的可绘制资源文件。
谢谢,但我用Android Studio 1.3+试了一下,但没有帮助。当然,我清理了几次项目,什么都没有。 即使在Android Studio的早期,我在使用SVG时也从未遇到过问题。
android
svg
gradle
android-gradle-plugin
Rob Anderson
Rob Anderson
发布于 2015-05-29
6 个回答
TWiStErRob
TWiStErRob
发布于 2015-12-06
已采纳
0 人赞同

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

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

你不应该恢复,而是应该向前拉到 1.5.0 (已经稳定了一段时间),并将 替换代码3】到你的 gradle.properties 文件中(通常位于根项目中的 settings.gradle 旁边)以启用1.2.2之前的行为。

For more info see http://b.android.com/192493

谢谢,在使用了一年的过时的Gradle之后,我现在可以转移到最新的Gradle了 :)
如何添加这个属性,在我的项目中,没有名为 "gradle.properties "的文件?
@Srinivasan 创建文件 ?! ;)
@TWiStErRob 伟大的解决方案。它有助于我使用Gradle 2.10,我在更新后又遇到了一个问题 stackoverflow.com/questions/36787855/...
afrank
afrank
发布于 2015-12-06
0 人赞同

在drawable resource目录下的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'
    
这解决了我的问题--谢谢。但我想今后我必须改用xml,并在那里嵌入我的svgs。
Fortran
Fortran
发布于 2015-12-06
0 人赞同

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

Peter
Peter
发布于 2015-12-06
0 人赞同

在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 图标目录内。这个文件夹包括将被放置在你的应用程序的drawable目录中的Vector Drawable文件。

Note that working with the Vector Drawable files is only supported for Android 5.0 and higher. In case you need to be compatible with <5.0 Android version I would recommend to make use of this library: https://github.com/trello/victor 这个库可以用来在你的应用程序的编译过程中把SVG文件转换为不同格式的drawable。这使你不必手动创建和维护mdpi/hdpi/xhdpi/xxhdpi文件夹。

如果你对Vector drawable文件和SVG文件进行了同样的命名,你可以在旁边使用两种方法。

如果我想自动将SVG转换为PNG可画性,怎么办? 这在新的Android Studio中不是应该可以实现吗?
这还不能用(但在2015年谷歌I/O大会期间已经宣布了)。我正在使用我上面描述的解决方案,一旦有了这个解决方案,我就会切换到最终的解决方案。
I don't think should 是一个合适的建议。使用第三方SVG库有很多好处,最明显的是向后兼容。
atitpatel
atitpatel
发布于 2015-12-06
0 人赞同

在你的gradle.properties中添加以下内容。