調試報錯信息: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