9.0 apk加载H5页面时报错WebView is not allowed in privileged processes, apk加载H5 webview加载不出来的问题

apk加载H5页面时报错WebView is not allowed in privileged processes是需要hook下

fun hookWebView() {
        val sdkInt = Build.VERSION.SDK_INT
        try {
            val factoryClass = Class.forName("android.webkit.WebViewFactory")
            val field = factoryClass.getDeclaredField("sProviderInstance")
            field.isAccessible = true
            var sProviderInstance: Any? = field.get(null)
            if (sProviderInstance != null) {
                Log.i(TAG, "sProviderInstance isn't null")
                return
            }

            val getProviderClassMethod: Method
            if (sdkInt > 22) {
                getProviderClassMethod = factoryClass.getDeclaredMethod("getProviderClass")
            } else if (sdkInt == 22) {
                getProviderClassMethod = factoryClass.getDeclaredMethod("getFactoryClass")
            } else {
                Log.i(TAG, "Don't need to Hook WebView")
                return
            }
            getProviderClassMethod.isAccessible = true
            val factoryProviderClass = getProviderClassMethod.invoke(factoryClass) as Class<*>
            val delegateClass = Class.forName("android.webkit.WebViewDelegate")
            val delegateConstructor = delegateClass.getDeclaredConstructor()
            delegateConstructor.isAccessible = true
            if (sdkInt < 26) {//低于Android O版本
                val providerConstructor = factoryProviderClass.getConstructor(delegateClass)
                if (providerConstructor != null) {
                    providerConstructor.isAccessible = true
                    sProviderInstance =
                        providerConstructor.newInstance(delegateConstructor.newInstance())
                }
            } else {
                val chromiumMethodName =
                    factoryClass.getDeclaredField("CHROMIUM_WEBVIEW_FACTORY_METHOD")
                chromiumMethodName.isAccessible = true
                var chromiumMethodNameStr: String? = chromiumMethodName.get(null) as String
                if (chromiumMethodNameStr == null) {
                    chromiumMethodNameStr = "create"
                }
                val staticFactory =
                    factoryProviderClass.getMethod(chromiumMethodNameStr, delegateClass)
                if (staticFactory != null) {
                    sProviderInstance =
                        staticFactory.invoke(null, delegateConstructor.newInstance())
                }
            }

            if (sProviderInstance != null) {
                field.set("sProviderInstance", sProviderInstance)
                Log.i(TAG, "Hook success!")
            } else {
                Log.i(TAG, "Hook failed!")
            }
        } catch (e: Throwable) {
            Log.w(TAG, e)
        }

    }
**apk加载H5  webview加载不出来的问题**
这个还是9.0权限管理的问题,通过log可以看出来
avc: denied { read } for name=“config.gz” dev=“proc” ino=4026532109 scontext=u:r:isolated_app:s0 tcontext=u:object_r:ystem_app_data_file:s0 tclass=file permissive=0

 在isolated_app.te中添加 read权限
 system/sepolicy/private/isolated_app.te
allow isolated_app system_app_data_file:file {read write };

下面是H5报错的log

untime: Process: com.neostra.funbooksettings, PID: 3087
untime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.neostra.funbooksettings/com.neostra.feedback.WebviewActivity}: android.view.InflateException: Binary XML file line #23: Binary XML file line #23: Error inflating class android.webkit.WebView
untime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2944)
untime:        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3079)
untime:        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
untime:        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
untime:        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
untime:        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1836)
untime:        at android.os.Handler.dispatchMessage(Handler.java:106)
untime:        at android.os.Looper.loop(Looper.java:193)
untime:        at android.app.ActivityThread.main(ActivityThread.java:6702)
untime:        at java.lang.reflect.Method.invoke(Native Method)
untime:        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
untime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)
untime: Caused by: android.view.InflateException: Binary XML file line #23: Binary XML file line #23: Error inflating class android.webkit.WebView
untime: Caused by: android.view.InflateException: Binary XML file line #23: Error inflating class android.webkit.WebView
untime: Caused by: java.lang.reflect.InvocationTargetException
untime:        at java.lang.reflect.Constructor.newInstance0(Native Method)
untime:        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
untime:        at android.view.LayoutInflater.createView(LayoutInflater.java:647)
untime:        at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)
untime:        at android.view.LayoutInflater.onCreateView(LayoutInflater.java:720)
untime:        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:803)
untime:        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
untime:        at android.view.LayoutInflater.rInflate(LayoutInflater.java:880)
untime:        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:841)
untime:        at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
untime:        at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
untime:        at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
untime:        at android.support.v7.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469)
untime:        at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
untime:        at com.neostra.feedback.WebviewActivity.onCreate(WebviewActivity.java:34)
untime:        at android.app.Activity.performCreate(Activity.java:7136)
untime:        at android.app.Activity.performCreate(Activity.java:7127)
untime:        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
untime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2924)
untime:        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3079)
untime:        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
untime:        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
untime:        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
untime:        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1836)
untime:        at android.os.Handler.dispatchMessage(Handler.java:106)
untime:        at android.os.Looper.loop(Looper.java:193)
untime:        at android.app.ActivityThread.main(ActivityThread.java:6702)
untime:        at java.lang.reflect.Method.invoke(Native Method)
untime:        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
untime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)
untime: Caused by: java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in privileged processes
untime:        at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:235)
untime:        at android.webkit.WebView.getFactory(WebView.java:2681)
untime:        at android.webkit.WebView.ensureProviderCreated(WebView.java:2676)
untime:        at android.webkit.WebView.setOverScrollMode(WebView.java:2741)
untime:        at android.view.View.<init>(View.java:4809)
untime:        at android.view.View.<init>(View.java:4950)
untime:        at android.view.ViewGroup.<init>(ViewGroup.java:660)
untime:        at android.widget.AbsoluteLayout.<init>(AbsoluteLayout.java:55)
untime:        at android.webkit.WebView.<init>(WebView.java:659)
untime:        at android.webkit.WebView.<init>(WebView.java:604)
untime:        at android.webkit.WebView.<init>(WebView.java:587)
untime:        at android.webkit.WebView.<init>(WebView.java:574)
untime:        ... 30 more
orHal: getWifiLinkLayerStats(l.937) failed {.code = ERROR_NOT_SUPPORTED, .description = }
orHal: getWifiLinkLayerStats(l.937) failed {.code = ERROR_NOT_SUPPORTED, .description = }
: getDiskStats failed with result NOT_SUPPORTED and size 0
hapingUtils: Exception openLteGateByDataShaping  in java.lang.NullPointerException: null receiver
orHal: getWifiLinkLayerStats(l.937) failed {.code = ERROR_NOT_SUPPORTED, .description = }
aultHeartbeatImpl: |[seq:umeng:5d4158e04ca35700f300040d.AWCN2_1] close session in background session:Session@[umeng:5d4158e04ca35700f300040d.AWCN2_1|http2_0rtt_acs]
tSpdySession: |[seq:umeng:5d4158e04ca35700f300040d.AWCN2_1] force close! session:Session@[umeng:5d4158e04ca35700f300040d.AWCN2_1|http2_0rtt_acs]
sion: |[seq:umeng:5d4158e04ca35700f300040d.AWCN2_1] notifyStatus status:DISCONNECTING
tSpdySession: |[seq:umeng:5d4158e04ca35700f300040d.AWCN2_1] spdySessionCloseCallback  errorCode::-2002
sion: |[seq:umeng:5d4158e04ca35700f300040d.AWCN2_1] notifyStatus status:DISCONNECTED
orHal: getWifiLinkLayerStats(l.937) failed {.code = ERROR_NOT_SUPPORTED, .description = }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心有纤纤结

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值