XmlPullParserException 二进制 XML 文件行 #17<vector> 标记需要 viewportWidth > 0
XmlPullParserException Binary XML file line #17<vector> tag requires viewportWidth > 0
这是这个问题的后续问题:
我也将支持库更新到 23.2 并开始出现错误:
XmlPullParserException Binary XML file line #17<vector> tag requires viewportWidth > 0
Android Studio 和 Gradle 已解决该问题。在没有 Gradle 的情况下使用 Eclipse 时如何解决这个问题?
您可以切换回以前版本的 appcompat 库(快速修复):
compile 'com.android.support:appcompat-v7:23.1.1'
或者保留当前的库版本并对构建 gradle 文件进行适当的更新,如 google in version 23.2.0 release note 所述。
//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"
}
不要忘记至少将 gradle 构建工具更新到版本 1.5.0,否则您将无法使用新参数,例如 generatedDensities:
classpath 'com.android.tools.build:gradle:1.5.0'
有关原因的更多信息 here
仅限新用户,此问题已在以下版本中修复:
compile 'com.android.support:appcompat-v7:23.2.1'
这个问题的前一个答案为使用 Gradle 的开发人员提供了解决方案,但我不使用 Gradle 所以我想总结一下他的答案,它帮助了几个人以及我最终做过。我接受了我自己的回答而不是他的,因为就像我说的,我不使用 Gradle 所以我没有使用他写的东西。
我做了几件事才让它最终起作用。可能的解决方案是:
第一个 Gradle 用户:
1) 将支持库恢复到旧版本,因为这个有一个错误。
2) 使用编译 'com.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'
)
defaultConfig {
generatedDensities = []
}
// Gradle 2.0
不需要这个
aaptOptions {
additionalParameters "--no-version-vectors"
}
这是非 Gradle 用户的部分:
1) 打开 SDK 管理器。
2) 从 API 22 和 23 卸载了 "Android Wear X"(其中 X 是 ARM 或 Intel)。
3) 然后,我仍然在 AppCompat 库的一种样式中遇到编译错误。我只是将它们注释掉了(如果它使用那种非常具体的样式,我会冒着非常具体的设备无法工作的风险)。
之后我清理了项目,它才开始工作。
在我将 Gradle 依赖项更新到最新版本后,我在 Android Studio 2.2 中遇到了同样的错误,但忘记更新项目的 buildToolsVersion。
我改了:
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下载的。因此,请从 SDK Manager 检查最新的 buildToolsVersion
,看看它是否与依赖项版本匹配。
希望这对某人有所帮助。
事件在尝试了已经提供的答案后,应用程序在某些设备(主要是三星)上崩溃了。因此,除此之外,我尝试像这样加载矢量绘图
Drawable drawable = AppCompatDrawableManager.get().getDrawable(context, R.drawable.resource_id);
这个 AppCompatDrawableManager
在内部尝试使用各种方法获取可绘制对象:
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 版本和所有设备(希望如此)。
注意:不要尝试使用 Picasso(2.5.2) 或 Glide(3.7.0) 的方法来加载矢量绘图。因为他们在内部使用已弃用的 getDrawable(@DrawableRes int id)
方法。这将导致在某些设备上 Resources.NotFoundException
。
对于像我这样仍在使用没有 Gradle 的 Eclipse 的人,我在 Lollipop 之前的设备上使用 Android 支持库 r23.2.0 运行ning 时遇到了这个错误(API < 21).
此问题已在 r23.2.1 中修复,我已经能够 运行 我的项目在 API 级别 16 上成功。
此版本的 Eclipse 库不再通过 SDK 管理器提供,但您可以从此 link.
手动下载它
如果问题出在发布的应用程序版本中。这解决了我的
发布。我想是因为如果你把 shrinkResources true
创建的可绘制文件夹没有可绘制文件。
{
..
minifyEnabled true
shrinkResources false
}
这是这个问题的后续问题:
我也将支持库更新到 23.2 并开始出现错误:
XmlPullParserException Binary XML file line #17<vector> tag requires viewportWidth > 0
Android Studio 和 Gradle 已解决该问题。在没有 Gradle 的情况下使用 Eclipse 时如何解决这个问题?
您可以切换回以前版本的 appcompat 库(快速修复):
compile 'com.android.support:appcompat-v7:23.1.1'
或者保留当前的库版本并对构建 gradle 文件进行适当的更新,如 google in version 23.2.0 release note 所述。
//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"
}
不要忘记至少将 gradle 构建工具更新到版本 1.5.0,否则您将无法使用新参数,例如 generatedDensities:
classpath 'com.android.tools.build:gradle:1.5.0'
有关原因的更多信息 here
仅限新用户,此问题已在以下版本中修复:
compile 'com.android.support:appcompat-v7:23.2.1'
这个问题的前一个答案为使用 Gradle 的开发人员提供了解决方案,但我不使用 Gradle 所以我想总结一下他的答案,它帮助了几个人以及我最终做过。我接受了我自己的回答而不是他的,因为就像我说的,我不使用 Gradle 所以我没有使用他写的东西。
我做了几件事才让它最终起作用。可能的解决方案是:
第一个 Gradle 用户:
1) 将支持库恢复到旧版本,因为这个有一个错误。
2) 使用编译 'com.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'
)
defaultConfig {
generatedDensities = []
}
// Gradle 2.0
不需要这个aaptOptions {
additionalParameters "--no-version-vectors"
}
这是非 Gradle 用户的部分:
1) 打开 SDK 管理器。
2) 从 API 22 和 23 卸载了 "Android Wear X"(其中 X 是 ARM 或 Intel)。
3) 然后,我仍然在 AppCompat 库的一种样式中遇到编译错误。我只是将它们注释掉了(如果它使用那种非常具体的样式,我会冒着非常具体的设备无法工作的风险)。
之后我清理了项目,它才开始工作。
在我将 Gradle 依赖项更新到最新版本后,我在 Android Studio 2.2 中遇到了同样的错误,但忘记更新项目的 buildToolsVersion。
我改了:
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下载的。因此,请从 SDK Manager 检查最新的 buildToolsVersion
,看看它是否与依赖项版本匹配。
希望这对某人有所帮助。
事件在尝试了已经提供的答案后,应用程序在某些设备(主要是三星)上崩溃了。因此,除此之外,我尝试像这样加载矢量绘图
Drawable drawable = AppCompatDrawableManager.get().getDrawable(context, R.drawable.resource_id);
这个 AppCompatDrawableManager
在内部尝试使用各种方法获取可绘制对象:
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 版本和所有设备(希望如此)。
注意:不要尝试使用 Picasso(2.5.2) 或 Glide(3.7.0) 的方法来加载矢量绘图。因为他们在内部使用已弃用的 getDrawable(@DrawableRes int id)
方法。这将导致在某些设备上 Resources.NotFoundException
。
对于像我这样仍在使用没有 Gradle 的 Eclipse 的人,我在 Lollipop 之前的设备上使用 Android 支持库 r23.2.0 运行ning 时遇到了这个错误(API < 21).
此问题已在 r23.2.1 中修复,我已经能够 运行 我的项目在 API 级别 16 上成功。
此版本的 Eclipse 库不再通过 SDK 管理器提供,但您可以从此 link.
手动下载它如果问题出在发布的应用程序版本中。这解决了我的
发布。我想是因为如果你把 shrinkResources true
创建的可绘制文件夹没有可绘制文件。
{
..
minifyEnabled true
shrinkResources false
}