Android webveiw出现栈错误解决办法

  

<强> Android webveiw出现栈错误解决办法

  

<强>前言:

  

最近做一个项目,项目调试基础库的一个调试工具展示设备信息页面使用WebView。有一个应用集成调试基础库展示内容时出现

        . lang。UnsupportedOperationException:方式是不允许出于安全原因,WebView特权进程      

因为应用是系统级别的,在AndroidManifest.xml中添加了android: sharedUserId=癮ndroid.uid.system”

  

根据异常提示出于安全原因,所以初步断定很可能跟应用为系统应用有很大关系,于是开始了查找代码寻源之旅

  

首先我们看一下具体的错误堆栈

        android.app.ActivityThread.performLaunchActivity (ActivityThread.java: 2325)   android.app.ActivityThread.handleLaunchActivity (ActivityThread.java: 2387)   android.app.ActivityThread.access 800美元(ActivityThread.java: 151)   android.app.ActivityThread H.handleMessage美元(ActivityThread.java: 1303)   android.os.Handler.dispatchMessage (Handler.java: 102)   android.os.Looper.loop (Looper.java: 135)   android.app.ActivityThread.main (ActivityThread.java: 5257)   在java.lang.reflect.Method。调用(本地方法)   java.lang.reflect.Method.invoke (Method.java: 372)   com.android.internal.os.ZygoteInit MethodAndArgsCaller.run美元(ZygoteInit.java: 955)   com.android.internal.os.ZygoteInit.main (ZygoteInit.java: 750)   因为:android.view。InflateException:二进制XML文件# 17行:错误android.webkit.WebView膨胀类   android.view.LayoutInflater.createView (LayoutInflater.java: 633)   com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView (PhoneLayoutInflater.java: 55)   android.view.LayoutInflater.onCreateView (LayoutInflater.java: 682)   android.view.LayoutInflater.createViewFromTag (LayoutInflater.java: 741)   android.view.LayoutInflater.rInflate (LayoutInflater.java: 806)   android.view.LayoutInflater.inflate (LayoutInflater.java: 504)   android.view.LayoutInflater.inflate (LayoutInflater.java: 414)   android.view.LayoutInflater.inflate (LayoutInflater.java: 365)   com.android.internal.policy.impl.PhoneWindow.setContentView (PhoneWindow.java: 379)   android.app.Activity.setContentView (Activity.java: 2145)   在com.mipt.store.activity.InfoActivity。onCreate(未知来源)   android.app.Activity.performCreate (Activity.java: 5990)   android.app.Instrumentation.callActivityOnCreate (Instrumentation.java: 1106)   android.app.ActivityThread.performLaunchActivity (ActivityThread.java: 2278)   …10个   因为:java.lang.reflect.InvocationTargetException   在java.lang.reflect.Constructor。newInstance(本地方法)   java.lang.reflect.Constructor.newInstance (Constructor.java: 288)   android.view.LayoutInflater.createView (LayoutInflater.java: 607)   …23日更   因为:. lang。UnsupportedOperationException:方式是不允许出于安全原因,WebView特权进程   android.webkit.WebViewFactory.getProvider (WebViewFactory.java: 96)   android.webkit.WebView.getFactory (WebView.java: 2194)   android.webkit.WebView.ensureProviderCreated (WebView.java: 2189)   android.webkit.WebView.setOverScrollMode (WebView.java: 2248)   在android.view.View灵活;init> (View.java: 3588)   在android.view.View灵活;init> (View.java: 3682)   在android.view.ViewGroup灵活;init> (ViewGroup.java: 497)   在android.widget.AbsoluteLayout灵活;init> (AbsoluteLayout.java: 55)   在android.webkit.WebView灵活;init> (WebView.java: 544)   在android.webkit.WebView灵活;init> (WebView.java: 489)   在android.webkit.WebView灵活;init> (WebView.java: 472)   在android.webkit.WebView灵活;init> (WebView.java: 459)   …26日更   之前      

错误提示显示为"

  

安全原因即安全原因。为了查明原因直接查看android源码。经过一番查找,发现抛出异常的在

  

框架/库/主/核心/java/android webkit/WebViewFactory.java

        静态WebViewFactoryProvider getProvider () {   同步(sProviderLock) {//现在这个函数的主要目的是保持(和抽象工厂)//我们诚实和最小化时使用WebView内部绑定代理。   如果(sProviderInstance !=null)返回sProviderInstance;   最后一个int uid=android.os.Process.myUid ();   如果(uid==android.os.Process。ROOT_UID | | uid==android.os.Process.SYSTEM_UID) {   把新UnsupportedOperationException(方式   “出于安全考虑,是不允许WebView特权进程”);   }   StrictMode。ThreadPolicy oldPolicy=StrictMode.allowThreadDiskReads ();   Trace.traceBegin(跟踪。TRACE_TAG_WEBVIEW”WebViewFactory.getProvider ()”);   尝试{   Class

Android webveiw出现栈错误解决办法