【安卓开发】系统级APP使用webview时出错

在开发系统级Android APP时,如果遇到WebView加载报错'Error inflating class android.webkit.WebView',可以通过在启动WebView的Activity或Fragment的setContentView()前调用initStatusBar()方法来解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果你开发的APP是系统级的,即在AndroidManifest.xml的manifest下添加了android:sharedUserId="android.uid.system",那么你在使用webview的时候可能会出现如下错误 :Error inflating class android.webkit.WebView

错误截图

解决方式,在调用webview的activity或者fragment的setContentView()之前,调用文中末尾的initStatusBar()方法即可正常运行。


public static void hookWebView() {

        int sdkInt = Build.VERSION.SDK_INT;

        try {

            Class factoryClass = Class.forName("android.webkit.WebViewFactory");

            Field field = factoryClass.getDeclaredField("sProviderInstance");

            field.setAccessible(true);

            Object sProviderInstance = field.get(null);

            if (sProviderInstance != null) {

                return;

            }

            Method getProviderClassMethod;

            if (sdkInt > 22) {

                getProviderClassMethod = factoryClass.getDeclaredMethod("getProviderClass");

            } else if (sdkInt == 22) {

                getProviderClassMethod = factoryClass.getDeclaredMethod("getFactoryClass");

            } else {

                return;

            }

            getProviderClassMethod.setAccessible(true);

            Class providerClass = (Class) getProviderClassMethod.invoke(factoryClass);

            Class delegateClass = Class.forName("android.webkit.WebViewDelegate");

            Constructor providerConstructor = providerClass.getConstructor(delegateClass);

            if (providerConstructor != null) {

                providerConstructor.setAccessible(true);

                Constructor declaredConstructor = delegateClass.getDeclaredConstructor();

                declaredConstructor.setAccessible(true);

                sProviderInstance = providerConstructor.newInstance(declaredConstructor.newInstance());

                field.set("sProviderInstance", sProviderInstance);

            }

        } catch (Throwable e) {

        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值