XmlPullParserException二进制XML文件行#17 <vector>标记需要viewportWidth&gt; 0

时间:2016-02-26 23:11:38

标签: android android-xml android-xmlpullparser

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

Update Android Support Library to 23.2.0 cause error: XmlPullParserException Binary XML file line #17<vector> tag requires viewportWidth > 0

我还将支持库更新为23.2并开始收到错误:

$form = $this->createForm(\AppBundle\Form\LoginType::class, $defaultData);

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

7 个答案:

答案 0 :(得分:9)

您可以切换回以前版本的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

的更多信息

答案 1 :(得分:4)

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

我最后做了几件工作。可能的解决方案是:

首先是Gradle用户:

1)将支持库还原为旧版本,因为这个版本有错误。

2)使用compile&#39; com.android.support:appcompat-v7:23.2.1&#39;因为那里的bug被修复了。

3)Gradle Plugin 2.0:

android {  
    defaultConfig {  
        vectorDrawables.useSupportLibrary = true  
    }  
}

或者您可以使用成绩构建工具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)同时卸载&#34; Android Wear X&#34; (其中X是ARM或Intel)来自API 22和23。

3)然后,我仍然在AppCompat库的一种样式中出现编译错误。我只是简单地评论了它们(如果使用非常特殊的样式,我将冒这个特定设备无法工作的风险)。

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:3)

在我将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保持在&#34; 22.0.1&#34;像这样:

    buildToolsVersion "22.0.1"

所以我所做的就是将buildToolsVersion更新为24,如下所示:

    buildToolsVersion "24"

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

希望这有助于某人。

答案 4 :(得分:3)

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

<a href="https://www.amazon.com/Stanley-Screwdriver/dp/B0014KMDZ0/ref=as_li_ss_tl?ie=UTF8&amp;qid=1482529941&amp;sr=8-1&amp;keywords=Pocket+Screwdriver&amp;linkCode=ll1&amp;tag=rasrf1-20&amp;linkId=a7cefc1156af5144695cf921ad1241c1"><img class="aligncenter wp-image-312" src="http://mysiteexample.com/wp-content/uploads/2016/11/review-1024x768.jpg" alt="Stanley Review" width="256" height="192" /></a>

Drawable drawable = AppCompatDrawableManager.get().getDrawable(context, R.drawable.resource_id); 内部尝试使用各种方法获取drawable:

AppCompatDrawableManager

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

注意:不要尝试使用Picasso(2.5.2)或Glide(3.7.0)的方法来加载矢量绘图。因为他们在内部使用弃用的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; } 方法。这将在某些设备上产生getDrawable(@DrawableRes int id)

答案 5 :(得分:0)

对于像我这样仍然没有使用Gradle的Eclipse的人,我在Android Lollipop设备(API&lt; 21)上运行Android支持库r23.2.0时出现此错误。

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

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

答案 6 :(得分:0)

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

    {
        ..
        minifyEnabled true
        shrinkResources false

    }