调试报错信息:html
warn 17:28:54.379 VFY: unable to resolve virtual method 599: Landroid/content/res/TypedArray;.getChangingConfigurations ()I warn 17:28:54.379 VFY: unable to resolve virtual method 621: Landroid/content/res/TypedArray;.getType (I)I error 17:28:54.409 Exception while inflating <vector> org.xmlpull.v1.XmlPullParserException: Binary XML file line #17<vector> tag requires viewportWidth > 0 at android.support.graphics.drawable.VectorDrawableCompat.updateStateFromTypedArray(VectorDrawableCompat.java:535) at android.support.graphics.drawable.VectorDrawableCompat.inflate(VectorDrawableCompat.java:472) at android.support.graphics.drawable.VectorDrawableCompat.createFromXmlInner(VectorDrawableCompat.java:436) at android.support.v7.widget.AppCompatDrawableManager$VdcInflateDelegate.createFromXmlInner(AppCompatDrawableManager.java:704) at android.support.v7.widget.AppCompatDrawableManager.loadDrawableFromDelegates(AppCompatDrawableManager.java:356) at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:182) at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:175) at android.support.v7.widget.TintTypedArray.getDrawable(TintTypedArray.java:66) at android.support.v7.widget.Toolbar.<init>(Toolbar.java:295) at android.support.v7.widget.Toolbar.<init>(Toolbar.java:226) at java.lang.reflect.Constructor.constructNative(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at android.view.LayoutInflater.createView(LayoutInflater.java:600) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702) at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) at android.view.LayoutInflater.inflate(LayoutInflater.java:498) at android.view.LayoutInflater.inflate(LayoutInflater.java:398) at android.view.LayoutInflater.inflate(LayoutInflater.java:354) at android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:389) at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:309) at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:273) at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:136) at cordova.plugin.rongcloud.im.ConversationActivity.onCreate(ConversationActivity.java:27) at android.app.Activity.performCreate(Activity.java:5394) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2246) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2340) at android.app.ActivityThread.access$800(ActivityThread.java:157) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:157) at android.app.ActivityThread.main(ActivityThread.java:5293) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) at dalvik.system.NativeStart.main(Native Method) warn 17:28:54.409 threadid=1: thread exiting with uncaught exception (group=0x41792da0) error 17:28:54.419 FATAL EXCEPTION: main Process: com.falv58app.im, PID: 28609 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.falv58app.im/cordova.plugin.rongcloud.im.ConversationActivity}: android.view.InflateException: Binary XML file line #36: Error inflating class android.support.v7.widget.Toolbar at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2282) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2340) at android.app.ActivityThread.access$800(ActivityThread.java:157) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:157) at android.app.ActivityThread.main(ActivityThread.java:5293) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) at dalvik.system.NativeStart.main(Native Method) Caused by: android.view.InflateException: Binary XML file line #36: Error inflating class android.support.v7.widget.Toolbar at android.view.LayoutInflater.createView(LayoutInflater.java:626) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702) at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) at android.view.LayoutInflater.inflate(LayoutInflater.java:498) at android.view.LayoutInflater.inflate(LayoutInflater.java:398) at android.view.LayoutInflater.inflate(LayoutInflater.java:354) at android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:389) at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:309) at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:273) at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:136) at cordova.plugin.rongcloud.im.ConversationActivity.onCreate(ConversationActivity.java:27) at android.app.Activity.performCreate(Activity.java:5394) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2246) ... 11 more Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.constructNative(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at android.view.LayoutInflater.createView(LayoutInflater.java:600) ... 25 more Caused by: android.content.res.Resources$NotFoundException: File res/drawable/abc_ic_ab_back_material.xml from drawable resource ID #0x7f020013 at android.content.res.Resources.loadDrawable(Resources.java:3008) at android.content.res.Resources.getDrawable(Resources.java:1586) at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:354) at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:187) at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:175) at android.support.v7.widget.TintTypedArray.getDrawable(TintTypedArray.java:66) at android.support.v7.widget.Toolbar.<init>(Toolbar.java:295) at android.support.v7.widget.Toolbar.<init>(Toolbar.java:226) ... 28 more Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #17: invalid drawable tag vector at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:969) at android.graphics.drawable.Drawable.createFromXml(Drawable.java:913) at android.content.res.Resources.loadDrawable(Resources.java:3004) ... 35 more warn 17:28:54.419 Force finishing activity com.falv58app.im/cordova.plugin.rongcloud.im.ConversationActivity warn 17:28:54.429 Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1471 com.android.server.am.ActivityStack.startPausingLocked:1002 com.android.server.am.ActivityStack.finishActivityLocked:3110 com.android.server.am.ActivityStack.finishTopRunningActivityLocked:2960 com.android.server.am.ActivityStackSupervisor.finishTopRunningActivityLocked:3014 warn 17:28:54.429 Force finishing activity com.falv58app.im/.MainActivity warn 17:28:54.429 Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1471 com.android.server.analytics.data.collection.application.CrashAnrDetector.broadcastEvent:296 com.android.server.analytics.data.collection.application.CrashAnrDetector.processDropBoxEntry:254 com.android.server.analytics.data.collection.application.CrashAnrDetector.access$100:60 com.android.server.analytics.data.collection.application.CrashAnrDetector$1.onReceive:102 warn 17:28:54.439 getCSCPackageItemText() info 17:28:54.449 begin info 17:28:54.449 setFocusWindow0 info 17:28:54.469 id=179 createSurf (1x1),1 flag=4, jm error 17:28:54.739 !@Dumpstate > sdumpstate -k -t -z -d -o /data/log/dumpstate_app_error warn 17:28:54.929 Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1471 com.android.server.am.ActivityStack.resumeTopActivityLocked:2144 com.android.server.am.ActivityStackSupervisor.resumeTopActivitiesLocked:2997 com.android.server.am.ActivityStack.completePauseLocked:1220 com.android.server.am.ActivityStack.activityPausedLocked:1088 info 17:28:54.959 id=180 createSurf (1080x1920),1 flag=4, Mauncher warn 17:28:55.49 EDMNativeHelperService is published warn 17:28:55.409 mDVFSHelper.release() info 17:28:55.519 Function: selinux_android_load_priority [0], There is no sepolicy file.
其实问题在于:前端
Binary XML file line #17<vector> tag requires viewportWidth > 0
Vector Drawable
Android 5.0发布的时候,Google提供了Vector的支持。Vector Drawable相对于普通的Drawable来讲,有如下几个好处:java
Vector图像能够自动进行适配,不须要经过分辨率来设置不一样的图片linux
Vector图像能够大幅减小图像的体积,一样一张图,用Vector来实现,可能只有PNG的几十分之一android
使用简单,不少设计工具,均可以直接导出SVG图像,从而转换成Vector图像ios
功能强大,不用写不少代码就能够实现很是复杂的动画数组
成熟、稳定,前端已经很是普遍的进行使用了android-studio
Vector图像刚发布的时候,是只支持Android 5.0+的,对于Android pre-L的系统来讲,并不能使用,因此,能够说那时候的Vector并无什么卵用。不过自从AppCompat 23.2以后,Google对p-View的Android系统也进行了兼容,也就是说,Vector可使用于Android 2.1以上的全部系统,只须要引用com.android.support:appcompat-v7:23.2.0以上的版本就能够了,这时候,Vector应该算是迎来了它的春天。app
如何得到Vector图像
概念
首先,须要讲解两个概念——SVG和Vector。eclipse
SVG,即Scalable Vector Graphics 矢量图,这种图像格式在前端中已经使用的很是普遍了,详见WIKI:https://en.wikipedia.org/wiki/Scalable_Vector_Graphics
Vector,在Android中指的是Vector Drawable,也就是Android中的矢量图,详见:https://developer.android.com/reference/android/graphics/drawable/VectorDrawable.html
所以,能够说Vector就是Android中的SVG实现,由于Android中的Vector并非支持所有的SVG语法,也没有必要,由于完整的SVG语法是很是复杂的,但已经支持的SVG语法已经够用了,特别是Path语法,几乎是Android中Vector的标配,详细能够参考:http://www.w3.org/TR/SVG/paths.html
Vector是在Android L中提出来的新概念,因此在刚开始的时候是只兼容L+的。
Gradle Plugin 1.5的兼容
从Gradle Plugin 1.5开始,Google支持了一种兼容方式,即在Android L之上,使用Vector,而在L之下,则使用Gradle将Vector生成PNG图像。
Android gradle plugin 1.5发布之后,加入了一个跟VectorDrawable有关的新功能。Android build tools 提供了另一种解决兼容性的方案,若是编译的版本是5.0以前的版本,那么build tools 会把VectorDrawable生成对应的png图片,这样在5.0如下的版本则使用的是生成的png图,而在5.0以上的版本中则使用VectorDrawable.在build.gradle添加generatedDensities配置,能够配置生成的png图片的密度。
AppCompat23.2的兼容
从AppCompat23.2开始,Google开始支持在低版本上使用Vector。
静态Vector图像
咱们有不少方法可以获得这些Vector,那么如何使用它们呢,Android 5.0以上的使用就不讲了,不太具备广泛表明性,咱们从pre-L版本的兼容开始作起。
pre-L版本兼容
VectorDrawableCompat依赖于AAPT的一些功能,它能保持最近矢量图使用的添加的属性ID,以便他们能够被pre-L版本以前的引用。
在Android 5.0以前使用Vector,须要aapt来对资源进行一些处理,这一过程能够在aapt的配置中进行设置,若是没有启用这样一个flag,那么在5.0如下的设备上运行就会发生
android.content.res.Resources$NotFoundException。
首先,你须要在项目的build.gradle脚本中,增长对Vector兼容性的支持,代码以下所示:
使用Gradle Plugin 2.0以上:
android { defaultConfig { vectorDrawables.useSupportLibrary = true }}
使用Gradle Plugin 2.0如下,Gradle Plugin 1.5以上:
android { defaultConfig { // Stops the Gradle plugin’s automatic rasterization of vectors generatedDensities = [] } // Flag to tell aapt to keep the attribute ids around aaptOptions { additionalParameters "--no-version-vectors" }}
像前面提到的,这种兼容方式其实是先关闭AAPT对pre-L版本使用Vector的妥协,即在L版本以上,使用Vector,而在pre-L版本上,使用Gradle生成相应的PNG图片,generatedDensities这个数组,实际上就是要生成PNG的图片分辨率的数组,使用appcompat后就不须要这样了。
固然,最重要的仍是添加appcompat的支持:
compile 'com.android.support:appcompat-v7:23.4.0'
同时,确保你使用的是AppCompatActivity而不是普通的Activity。
在 build.gradle 中添加兼容代码:
aaptOptions { additionalParameters "--no-version-vectors" }
由于一开始工程彻底没有问题,并且一开始反馈的很少,就没当回事, 后来被催着解决的时候懵了, 解决的思路不对离真相反而愈来愈远.
在某一个无休得周末, 看着蹭蹭上涨的用户量, 下定决心即便重构整个工程也必定要解决, 才找到了答案.
虽然最终解决问题也就几分钟的事情, 可是在没解决前的那种状态很很差, 如鲠在喉, 老是潜意识里感受有不干净的东西(不能控制代码结果的因素)在工程里, 致使写新功能的时候内心充满不肯定和不自信, 这时候不管与人沟通仍是工做效率都会打折扣.
http://stackoverflow.com/questions/35622438/update-android-support-library-to-23-2-0-cause-error-xmlpullparserexception-bin
http://blog.csdn.net/heqiangflytosky/article/details/51009123
http://www.vccoo.com/v/0c0cc7?source=rss