<强> 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 ()”); 尝试{ ClassAndroid webveiw出现栈错误解决办法