Android 7.0中的android.webkit.WebViewFactory$MissingWebViewPackageException

13

以下崩溃偶尔(很少)报告,仅来自Android 7.0设备:

android.util.AndroidRuntimeException: 
  at android.webkit.WebViewFactory.getProviderClass (WebViewFactory.java:371)
  at android.webkit.WebViewFactory.getProvider (WebViewFactory.java:194)
  at android.webkit.WebViewDatabase.getInstance (WebViewDatabase.java:38)
  at com.amazon.device.ads.AdLayout.isWebViewDatabaseNull (SourceFile:352)
  at com.amazon.device.ads.AdLayout.initializeIfNecessary (SourceFile:260)
  at com.amazon.device.ads.AdLayout.getAdController (SourceFile:303)
  at com.amazon.device.ads.AdLayout.onLayout (SourceFile:478)
  at android.view.View.layout (View.java:17838)
  at android.view.ViewGroup.layout (ViewGroup.java:5754)
  at android.widget.RelativeLayout.onLayout (RelativeLayout.java:1189)
  at android.view.View.layout (View.java:17838)
  at android.view.ViewGroup.layout (ViewGroup.java:5754)
  at android.widget.RelativeLayout.onLayout (RelativeLayout.java:1189)
  at android.view.View.layout (View.java:17838)
  at android.view.ViewGroup.layout (ViewGroup.java:5754)
  at android.widget.LinearLayout.setChildFrame (LinearLayout.java:1982)
  at android.widget.LinearLayout.layoutVertical (LinearLayout.java:1826)
  at android.widget.LinearLayout.onLayout (LinearLayout.java:1735)
  at android.view.View.layout (View.java:17838)
  at android.view.ViewGroup.layout (ViewGroup.java:5754)
  at android.widget.FrameLayout.layoutChildren (FrameLayout.java:383)
  at android.widget.FrameLayout.onLayout (FrameLayout.java:321)
  at android.view.View.layout (View.java:17838)
  at android.view.ViewGroup.layout (ViewGroup.java:5754)
  at android.widget.FrameLayout.layoutChildren (FrameLayout.java:383)
  at android.widget.FrameLayout.onLayout (FrameLayout.java:321)
  at android.view.View.layout (View.java:17838)
  at android.view.ViewGroup.layout (ViewGroup.java:5754)
  at android.widget.LinearLayout.setChildFrame (LinearLayout.java:1982)
  at android.widget.LinearLayout.layoutVertical (LinearLayout.java:1826)
  at android.widget.LinearLayout.onLayout (LinearLayout.java:1735)
  at android.view.View.layout (View.java:17838)
  at android.view.ViewGroup.layout (ViewGroup.java:5754)
  at android.widget.FrameLayout.layoutChildren (FrameLayout.java:383)
  at android.widget.FrameLayout.onLayout (FrameLayout.java:321)
  at android.view.View.layout (View.java:17838)
  at android.view.ViewGroup.layout (ViewGroup.java:5754)
  at android.widget.LinearLayout.setChildFrame (LinearLayout.java:1982)
  at android.widget.LinearLayout.layoutVertical (LinearLayout.java:1826)
  at android.widget.LinearLayout.onLayout (LinearLayout.java:1735)
  at android.view.View.layout (View.java:17838)
  at android.view.ViewGroup.layout (ViewGroup.java:5754)
  at android.widget.FrameLayout.layoutChildren (FrameLayout.java:383)
  at android.widget.FrameLayout.onLayout (FrameLayout.java:321)
  at com.android.internal.policy.DecorView.onLayout (DecorView.java:751)
  at android.view.View.layout (View.java:17838)
  at android.view.ViewGroup.layout (ViewGroup.java:5754)
  at android.view.ViewRootImpl.performLayout (ViewRootImpl.java:2698)
  at android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2371)
  at android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1462)
  at android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:6960)
  at android.view.Choreographer$CallbackRecord.run (Choreographer.java:907)
  at android.view.Choreographer.doCallbacks (Choreographer.java:709)
  at android.view.Choreographer.doFrame (Choreographer.java:644)
  at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:893)
  at android.os.Handler.handleCallback (Handler.java:836)
  at android.os.Handler.dispatchMessage (Handler.java:103)
  at android.os.Looper.loop (Looper.java:208)
  at android.app.ActivityThread.main (ActivityThread.java:6267)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1063)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:924)
Caused by: android.webkit.WebViewFactory$MissingWebViewPackageException: 
  at android.webkit.WebViewFactory.getWebViewContextAndSetProvider (WebViewFactory.java:270)
  at android.webkit.WebViewFactory.getProviderClass (WebViewFactory.java:330)

堆栈跟踪中没有包含任何与应用程序相关的内容,因此我不知道在哪里查找。有谁能够帮忙解决这个问题吗?如何预防这种情况发生?

3个回答

17

1
不是建议(因为你将会捕获运行时异常):我猜你应该能够捕获MissingWebViewPackageException并显示一个进度条,然后每秒轮询你尝试使用的组件,当异常不再发生时,你就可以安全地使用webview了。但这似乎是亚马逊的广告包表现不佳? - Magnus
3
谢谢。由于亚马逊广告导致各种崩溃和ANR,我已经将其禁用。这只是其中之一。 - Hong
它会因为在onCreate()之上被声明为类对象而崩溃,还是只有在实际使用时才会崩溃? - isJulian00

1

检查您是否安装了包com.google.android.webview并且它是否处于活动状态。

有可能为了“去除手机垃圾”,您禁用了它,例如通过pm disable com.google.android.webview(如果已获取root权限)或pm disable-user --user 0 com.google.android.webview(如果未获取root权限)。

可以通过设置>应用程序(显示系统应用程序)>Android系统WebView>启用或通过终端(需要在设置中启用adb调试)重新启用它:

pm enable com.google.android.webview

如果WebView已启用,请尝试“设置>应用程序”中的“卸载更新”选项 - 有时系统升级或通过Google Play的升级可能会安装有缺陷的WebView版本。
另一个选择是访问 https://play.google.com/store/apps/details?id=com.google.android.webview 并安装可用的更新。如果它不能解决错误,则卸载它,以便您的设备返回到随机ROM提供的原始系统WebView。

1
手动更新Chrome可能会导致此问题。 我们的模拟器运行的是非Play版本的安卓系统,所以我们不得不使用APK文件手动更新Chrome以完成其他任务。可能选择了错误的文件。任何使用WebView的应用都会崩溃,包括其自身的应用程序。
移除Chrome的更新后,WebView又可以正常工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接