【问题标题】:android.webkit.WebViewFactory$MissingWebViewPackageException from Android 7.0android.webkit.WebViewFactory$MissingWebViewPackageException 来自 Android 7.0
【发布时间】:2017-09-18 11:56:54
【问题描述】:

偶尔(很少)报告以下崩溃,并且仅来自 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)

堆栈跟踪不包含与应用程序相关的任何内容,所以我不知道在哪里查看。任何人都可以对此有所了解吗?如何预防?

【问题讨论】:

    标签: android crash


    【解决方案1】:

    这是因为 Webview 在您尝试在应用程序中使用的同时通过 google play 更新。

    更多信息在这里: https://bugs.chromium.org/p/chromium/issues/detail?id=506369

    【讨论】:

    • 不是建议(因为您将捕获运行时异常):我想您应该能够捕获 MissingWebViewPackageException 并显示一个progresspinner,并轮询您尝试使用的组件,例如,当不再发生异常,您可以安全地使用 webview。但这似乎是来自亚马逊的一个行为不端的广告包?
    • 谢谢。我禁用了亚马逊广告,因为它导致了各种崩溃和 ANR。这只是其中之一。
    • 它会因为被声明为 onCreate() 之上的类对象而崩溃,还是只有一次实际使用它?
    【解决方案2】:

    检查您是否有包 com.google.android.webview 以及它是否处于活动状态。

    您可能为了“消除”您的手机而禁用了它,例如通过pm disable com.google.android.webview(如果已获得root)或pm disable-user --user 0 com.google.android.webview(如果未获得root)。

    可以通过设置>应用(显示系统应用)>Android系统WebView>启用或通过终端重新启用(需要adb调试enabled in settings):

    pm enable com.google.android.webview
    

    如果它已启用,请尝试在“设置”>“应用程序”中选择 Uninstall Updates - 有时系统升级或通过 Google Play 进行的升级可能会安装有缺陷的 WebView 版本。

    另一种选择是转到https://play.google.com/store/apps/details?id=com.google.android.webview 并安装更新(如果有可用的话)。如果它不能修复错误,则将其卸载,以便您的设备回退到其原始系统 web 视图,该系统 webview 随股票 ROM 一起提供。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-05
      • 2019-01-13
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 2020-07-24
      • 2017-01-06
      • 2018-05-11
      相关资源
      最近更新 更多