【问题标题】:XmlPullParserException Binary XML file line #17<vector> tag requires viewportWidth > 0XmlPullParserException 二进制 XML 文件行 #17<vector> 标签需要 viewportWidth > 0
【发布时间】:2016-02-26 23:11:38
【问题描述】:

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

Update Android Support Library to 23.2.0 cause error: 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 时如何解决?

【问题讨论】:

标签: android android-xml android-xmlpullparser


【解决方案1】:

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

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

或者保留当前的库版本,并按照google in version 23.2.0 release note 的说明对您的构建 gradle 文件进行适当的更新。

//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的信息

【讨论】:

  • 这适用于我。我的 gradle 构建工具版本是 1.3.1。我只是将 aaptOptions { additionalParameters "--no-version-vectors" } 添加到我的 build.gradle 而不添加 generatedDensities = [] 并且它可以工作
【解决方案2】:

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

我做了几件事让它最终工作。可能的解决方案是:

Gradle 用户优先:

1) 将支持库恢复为旧版本,因为该版本存在错误。

2) 使用 compile 'com.android.support:appcompat-v7:23.2.1' 修复该错误。

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 库的一种样式中遇到编译错误。我只是将它们注释掉(如果它使用非常特定的样式,我将冒非常特定的设备无法工作的风险)。

之后我清理了项目,它才开始工作。

【讨论】:

    【解决方案3】:

    仅限新用户,此问题已修复:

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

    【讨论】:

      【解决方案4】:

      在尝试了已经提供的答案后,该应用程序在某些设备(主要是三星)上崩溃了。因此,我尝试加载像这样的矢量可绘制对象

      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。

      【讨论】:

        【解决方案5】:

        在我将 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 管理器下载。所以从 SDK Manager 中检查最新的buildToolsVersion,看看它是否与依赖版本匹配。

        希望这对某人有所帮助。

        【讨论】:

          【解决方案6】:

          对于像我这样仍在使用不带 Gradle 的 Eclipse 的人,我在棒棒糖之前的设备 (API

          此问题已在 r23.2.1 中修复,我已经能够在 API 级别 16 上成功运行我的项目。

          此版本的 Eclipse 库不再通过 SDK Manager 提供,但您可以从 link 手动下载。

          【讨论】:

            【解决方案7】:

            如果问题出在发布应用版本中。这解决了我的 释放。我想是因为如果你把shrinkResources true 创建的可绘制文件夹没有可绘制文件。

                {
                    ..
                    minifyEnabled true
                    shrinkResources false
            
                }
            

            【讨论】:

              猜你喜欢
              • 2017-05-07
              • 1970-01-01
              • 1970-01-01
              • 2020-07-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-12-01
              • 2017-09-30
              相关资源
              最近更新 更多