android - MissingWebViewPackageException:无法加载 WebView 提供程序:未安装 WebView
问题描述
最近我的应用程序得到了更新。更新包括一个在启动时加载 webview 的对话框。上线后,我的 firebase 控制台加载了有关未安装 webview 的崩溃。崩溃报告说
Caused by android.webkit.WebViewFactory$MissingWebViewPackageException: Failed to load WebView provider: No WebView installed
at android.webkit.WebViewFactory.getWebViewContextAndSetProvider(WebViewFactory.java:339)
at android.webkit.WebViewFactory.getProviderClass(WebViewFactory.java:402)
at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:252)
at android.webkit.WebView.getFactory(WebView.java:2551)
at android.webkit.WebView.ensureProviderCreated(WebView.java:2545)
at android.webkit.WebView.setOverScrollMode(WebView.java:2613)
at android.view.View.<init>(View.java:5441)
at android.view.View.<init>(View.java:5632)
at android.view.ViewGroup.<init>(ViewGroup.java:677)
at android.widget.AbsoluteLayout.<init>(AbsoluteLayout.java:56)
at android.webkit.WebView.<init>(WebView.java:410)
at android.webkit.WebView.<init>(WebView.java:353)
at android.webkit.WebView.<init>(WebView.java:336)
at android.webkit.WebView.<init>(WebView.java:323)
at java.lang.reflect.Constructor.newInstance0(Constructor.java)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at android.view.LayoutInflater.createView(LayoutInflater.java:854)
at android.view.LayoutInflater.createView(LayoutInflater.java:776)
at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:930)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:950)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1004)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1126)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
at android.view.LayoutInflater.inflate(LayoutInflater.java:481)
at android.support.v7.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
at com.myapp.ui.DialogActivity.onCreate(DialogActivity.kt:18)
at android.app.Activity.performCreate(Activity.java:7981)
at android.app.Activity.performCreate(Activity.java:7970)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3594)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2146)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7762)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1047)
这DialogActivity
是在启动时加载的。应用程序以前可以通过 WebView 顺利运行,它是从应用程序菜单内部启动的,并且以前从未崩溃过。现在有了这个在启动时使用 WebView 的新更新,应用程序会因这个日志而崩溃。
我用谷歌搜索了这个问题,并遇到了许多其他 stackoverflow 和谷歌问题跟踪器的答案,这些答案都说这是在WebView
被操作系统更新时膨胀/初始化时发生的,对此无能为力,只有 try catch 才能使应用程序免于崩溃.
参考: android 无法加载 WebView 提供程序:未安装 WebView https://groups.google.com/forum/#!topic/google-admob-ads-sdk/k94v72E NameNotFoundException webview
所以我的问题是,在 Firebase 控制台的 5 天内,这个崩溃已经出现了 33 次,真的是因为操作系统更新了 WebView 吗?为什么它的频率这么高?据报道,此次崩溃发生在 10 台 Android 10 和 1 台 Android 5.0.1 设备上,Android 10 设备均为三星手机,包括:Galaxy Note10 Lite、Galaxy S20 5G、Galaxy S20 Ultra 5G、Galaxy S10。Android 5.0.1 设备是华为 P8 Lite。然而,华为设备的崩溃情况略有不同
Caused by android.content.pm.PackageManager$NameNotFoundException: com.google.android.webview
at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:120)
at android.webkit.WebViewFactory.getFactoryClass(WebViewFactory.java:137)
at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:105)
at android.webkit.WebView.getFactory(WebView.java:2192)
at android.webkit.WebView.ensureProviderCreated(WebView.java:2187)
at android.webkit.WebView.setOverScrollMode(WebView.java:2246)
at android.view.View.<init>(View.java:3591)
at android.view.View.<init>(View.java:3685)
at android.view.ViewGroup.<init>(ViewGroup.java:491)
at android.widget.AbsoluteLayout.<init>(AbsoluteLayout.java:55)
at android.webkit.WebView.<init>(WebView.java:538)
at android.webkit.WebView.<init>(WebView.java:483)
at android.webkit.WebView.<init>(WebView.java:466)
at android.webkit.WebView.<init>(WebView.java:453)
at java.lang.reflect.Constructor.newInstance(Constructor.java)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.view.LayoutInflater.createView(LayoutInflater.java:626)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)
at com.android.internal.policy.impl.HwPhoneLayoutInflater.onCreateView(HwPhoneLayoutInflater.java:75)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:701)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:760)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:825)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:828)
at android.view.LayoutInflater.inflate(LayoutInflater.java:523)
at android.view.LayoutInflater.inflate(LayoutInflater.java:425)
at android.view.LayoutInflater.inflate(LayoutInflater.java:368)
at android.support.v7.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
at com.myapp.ui.DialogActivity.onCreate(DialogActivity.kt:18)
at android.app.Activity.performCreate(Activity.java:6013)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2359)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2466)
at android.app.ActivityThread.access$1200(ActivityThread.java:152)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1341)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5538)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
但是从一些stackoverflow的答案来看,这背后的原因也是一样的。
try catch 是唯一的解决方案还是我在这里做错了什么?对此的任何见解都将非常有帮助和赞赏。谢谢。
解决方案
推荐阅读
- react-native - React-Native-Camera 从 uri 获取高度和宽度
- linux - 无法在 Amazon Linux AMI 上安装 libatk-bridge-2.0.so.0
- django - Django:通过图像传递参数以在下一页中获取过滤视图
- python - 如何根据特定数字分隔字母?
- azure-functions - 从应用服务计划切换到 Azure Functions 高级计划
- compilation - 我如何确定为什么代码编译与 mpif90 一起挂起?
- svg - THREE.ExtrudeBufferGeometry 的多边形很少
- r - 将显着性星添加到优势比图 (ggplot)
- python - python sqlalchemy原始查询非常慢
- python - 无法将字符串转换为浮点数:'100.0000%'