java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in privileged

最近做的项目,用webview加载网页,自测好好的,突然有一天,项目赋予了系统级应用能力,这个时候,webview不能用了;

狗血,怎么办呢?

因为应用是系统级别的,在AndroidManifest.xml中添加了android:sharedUserId=“android.uid.system”
根据异常分析,是安全问题限制了webview控件使用

java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in privileged_第1张图片

追溯源码发现有这样的判断

    if (uid == android.os.Process.ROOT_UID || uid == android.os.Process.SYSTEM_UID
                    || uid == android.os.Process.PHONE_UID || uid == android.os.Process.NFC_UID
                    || uid == android.os.Process.BLUETOOTH_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。

方案二:修改framework层代码

禁用判断条件
因为我们是做硬件的,所以可以支持修改framework层代码,通过OTA更新来解决

你可能感兴趣的:(Android,webview,java,android)