XmlPullParserException二进制XML文件行#17 <vector>标记要求viewportWidth> 0

这是这个问题的后续问题:

更新Android支持库到23.2.0导致错误:XmlPullParserException二进制XML文件行#17 <vector>标记要求viewportWidth> 0

我也更新了支持库到23.2,并开始得到错误:

XmlPullParserException Binary XML file line #17<vector> tag requires viewportWidth > 0 

这个问题解决了Android Studio和Gradle。 如何在不使用Gradle的情况下使用Eclipse来解决这个问题?

Solutions Collecting From Web of "XmlPullParserException二进制XML文件行#17 <vector>标记要求viewportWidth> 0"

您可以切换回以前版本的appcompat库(快速修复):

 compile 'com.android.support:appcompat-v7:23.1.1' 

或者保留当前的库版本,并按照google版本23.2.0发行说明中的说明,对您的构buildgradle文件进行适当的更新。

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

如果您使用的是Gradle 1.5,则可以使用

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

不要忘记至less将Gradle构build工具更新到版本1.5.0,或者不能使用像generatedDensities这样的新参数:

 classpath 'com.android.tools.build:gradle:1.5.0' 

关于为什么在这里的更多信息

以前对这个问题的回答为使用Gradle的开发者提供了一个解决scheme,但是我不使用Gradle,所以我想总结一下他帮助几个人以及我最终做了什么的答案。 我接受了我自己的回答,而不是他自从就像我说的,我不使用Gradle,所以我没有使用他写的。

我做了几件事情最后才能做到。 可能的解决scheme是

首先为Gradle用户:

1)将支持库恢复为旧版本,因为这个版本有一个bug。

2)使用compile'c​​om.android.support:appcompat-v7:23.2.1',因为bug已经修复了。

3)Gradle插件2.0:

 android { defaultConfig { vectorDrawables.useSupportLibrary = true } } 

或者你可以使用Grade Build Tools 1.5.0( classpath 'com.android.tools.build:gradle:1.5.0' 1.5.0 classpath 'com.android.tools.build:gradle:1.5.0'

 defaultConfig { generatedDensities = [] } 

// Gradle 2.0不需要这个

 aaptOptions { additionalParameters "--no-version-vectors" } 

这是非Gradle用户的一部分:

1)打开SDKpipe理器。

2)从API 22和23卸载“Android Wear X”(其中X是ARM或Intel)。

3)然后,我仍然有一个AppCompat库的风格之一编译错误。 我只是评论他们(我会冒着非常具体的设备不工作,如果它使用非常具体的风格)。

之后,我清理了这个项目,并开始工作。

仅针对新用户,此问题在以下方面得到解决:

compile 'com.android.support:appcompat-v7:23.2.1'

在尝试已经提供的答案之后,应用程序在某些设备(主要是三星)上崩溃。 所以与此同时,我尝试加载这样的vector绘图

 Drawable drawable = AppCompatDrawableManager.get().getDrawable(context, R.drawable.resource_id); 

这个AppCompatDrawableManager内部试图用各种方法来获取drawable:

 Drawable getDrawable(@NonNull Context context, @DrawableRes int resId, boolean failIfNotKnown) { checkVectorDrawableSetup(context); Drawable drawable = loadDrawableFromDelegates(context, resId); if (drawable == null) { drawable = createDrawableIfNeeded(context, resId); } if (drawable == null) { drawable = ContextCompat.getDrawable(context, resId); } if (drawable != null) { // Tint it if needed drawable = tintDrawable(context, resId, failIfNotKnown, drawable); } if (drawable != null) { // See if we need to 'fix' the drawable DrawableUtils.fixDrawable(drawable); } return drawable; } 

因此,它适用于所有的Android版本和所有设备(希望)。

注意: 不要尝试使用毕加索(2.5.2)或Glide(3.7.0)的方法加载vector绘图。 因为他们内部使用不赞成的getDrawable(@DrawableRes int id)方法。 这将导致在某些设备上的Resources.NotFoundException

我更新了我的Gradle依赖关系到最新版本,但忘记更新我的项目的buildToolsVersion后,我在Android Studio 2.2中得到了同样的错误。

我变了:

  compile 'com.android.support:appcompat-v7:22.2.1' 

至:

  compile 'com.android.support:appcompat-v7:24.2.1' 

虽然buildToolsVersion保持在“22.0.1”,如下所示:

  buildToolsVersion "22.0.1" 

所以我所做的只是将buildToolsVersion更新为24

  buildToolsVersion "24" 

因为之前已经使用SDK Manager下载。 因此,从SDKpipe理器中检查最新的buildToolsVersion ,看它是否与依赖版本匹配。

希望这有助于某人。

对于像我这样仍然在不使用Gradle的情况下使用Eclipse的人,我在Android Lollipop设备(API <21)上运行的Android支持库r23.2.0出现了这个错误。

这个问题已经在r23.2.1中解决了,我已经能够成功地在API级别16上运行我的项目。

此版本的Eclipse库不再可通过SDKpipe理器使用,但是您可以从此链接手动下载。