java.lang.UnsupportedOperationException WebView is not allowed in privileged processes
来源:互联网 发布:c语言编程书籍推荐 编辑:程序博客网 时间:2024/04/30 21:16
最近做一个项目,项目调试基础库的一个调试工具展示设备信息页面使用WebView。有一个应用集成调试基础库展示内容时出现
java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in privileged processes
因为应用是系统级别的,在AndroidManifest.xml中添加了android:sharedUserId="android.uid.system"
根据exception提示出于安全原因,所以初步断定很可能跟应用为系统应用有很大关系,于是开始了查找代码寻源之旅
首先我们看一下具体的错误堆栈
根据exception提示出于安全原因,所以初步断定很可能跟应用为系统应用有很大关系,于是开始了查找代码寻源之旅
首先我们看一下具体的错误堆栈
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)at android.app.ActivityThread.access$800(ActivityThread.java:151)at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)at android.os.Handler.dispatchMessage(Handler.java:102)at android.os.Looper.loop(Looper.java:135)at android.app.ActivityThread.main(ActivityThread.java:5257)at java.lang.reflect.Method.invoke(Native Method)at java.lang.reflect.Method.invoke(Method.java:372)at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:955)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:750)aused by: android.view.InflateException: Binary XML file line #17: Error inflating class android.webkit.WebViewat android.view.LayoutInflater.createView(LayoutInflater.java:633)at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682)at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)at android.view.LayoutInflater.inflate(LayoutInflater.java:504)at android.view.LayoutInflater.inflate(LayoutInflater.java:414)at android.view.LayoutInflater.inflate(LayoutInflater.java:365)at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:379)at android.app.Activity.setContentView(Activity.java:2145)at com.mipt.store.activity.InfoActivity.onCreate(Unknown Source)at android.app.Activity.performCreate(Activity.java:5990)at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)... 10 moreaused by: java.lang.reflect.InvocationTargetExceptionat java.lang.reflect.Constructor.newInstance(Native Method)at java.lang.reflect.Constructor.newInstance(Constructor.java:288)at android.view.LayoutInflater.createView(LayoutInflater.java:607)... 23 moreaused by: java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in privileged processesat android.webkit.WebViewFactory.getProvider(WebViewFactory.java:96)at android.webkit.WebView.getFactory(WebView.java:2194)at android.webkit.WebView.ensureProviderCreated(WebView.java:2189)at android.webkit.WebView.setOverScrollMode(WebView.java:2248)at android.view.View.<init>(View.java:3588)at android.view.View.<init>(View.java:3682)at android.view.ViewGroup.<init>(ViewGroup.java:497)at android.widget.AbsoluteLayout.<init>(AbsoluteLayout.java:55)at android.webkit.WebView.<init>(WebView.java:544)at android.webkit.WebView.<init>(WebView.java:489)at android.webkit.WebView.<init>(WebView.java:472)at android.webkit.WebView.<init>(WebView.java:459)... 26 more
错误提示显示为“Caused by: java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in privileged processes”
security reasons即安全原因。为了查明原因直接查看android源码。经过一番查找,发现抛出Exception的在
frameworks/base/master/core/java/android/webkit/WebViewFactory.java
static WebViewFactoryProvider getProvider() { synchronized (sProviderLock) { // For now the main purpose of this function (and the factory abstraction) is to keep // us honest and minimize usage of WebView internals when binding the proxy. if (sProviderInstance != null) return sProviderInstance; final int uid = android.os.Process.myUid(); if (uid == android.os.Process.ROOT_UID || uid == android.os.Process.SYSTEM_UID) { throw new UnsupportedOperationException( "For security reasons, WebView is not allowed in privileged processes"); } StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "WebViewFactory.getProvider()"); try { Class<WebViewFactoryProvider> providerClass = getProviderClass(); Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "providerClass.newInstance()"); try { sProviderInstance = providerClass.getConstructor(WebViewDelegate.class) .newInstance(new WebViewDelegate()); if (DEBUG) Log.v(LOGTAG, "Loaded provider: " + sProviderInstance); return sProviderInstance; } catch (Exception e) { Log.e(LOGTAG, "error instantiating provider", e); throw new AndroidRuntimeException(e); } finally { Trace.traceEnd(Trace.TRACE_TAG_WEBVIEW); } } finally { Trace.traceEnd(Trace.TRACE_TAG_WEBVIEW); StrictMode.setThreadPolicy(oldPolicy); } } }
WebView在初始化的时候会检查初始化进程的id.
final int uid = android.os.Process.myUid();if (uid == android.os.Process.ROOT_UID || uid == android.os.Process.SYSTEM_UID) { throw new UnsupportedOperationException( "For security reasons, WebView is not allowed in privileged processes");}
如果进程ID是root或者system,就会抛出UnsupportedOperationException。为什么会有这种安全机制呢?因为webview允许运行js,如果用户通过js注入安全代码,那么js就可以肆无忌惮的使用系统权限,这无疑是一个漏洞,可谓门户大开。
果不其然就是android:sharedUserId="android.uid.system"的问题,因为是系统应用所以只能修改基础调试库的展示控件,把展示调试信息的webview改为textview。
果不其然就是android:sharedUserId="android.uid.system"的问题,因为是系统应用所以只能修改基础调试库的展示控件,把展示调试信息的webview改为textview。
0 0
- java.lang.UnsupportedOperationException WebView is not allowed in privileged processes
- WebView运行在系统进程出现的问题 WebView is not allowed in privileged processes
- For security reasons, WebView is not allowed in privileged processes报错解决
- java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
- java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
- java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
- java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
- java.lang.UnsupportedOperationException: Not supported by BasicDataSource
- java.lang.UnsupportedOperationException: Not supported by BasicDataSource
- java.lang.UnsupportedOperationException: Not supported by BasicDataSource
- Exception in thread "main" java.lang.UnsupportedOperationException
- Content is not allowed in prolog
- Content is not allowed in trailing section
- Content is not allowed in prolog.解决方法
- tomcat #{..} is not allowed in template text
- DOM4j:Content is not allowed in prolog
- Content is not allowed in prolog.
- Content is not allowed in prolog.解决
- 快速搭建自己的物联网平台,zigbee协议(不会控制你的物联网系统)
- Cannot open volume for direct access +++ Can unspecified error occurred
- MyBatis批量插入数据
- HDFS原理
- maven打包
- java.lang.UnsupportedOperationException WebView is not allowed in privileged processes
- mac mysql 安装
- sklearn中的模型评估
- Java多线程问题总结
- Java读取文件的几种方法
- MySQL中的行级锁,表级锁,页级锁
- Java 集合系列06之 Vector详细介绍(源码解析)和使用示例
- 数据库日志文件解决方案
- React.js留言板(Flux结构实现)