android 无法加载 WebView 提供程序:未安装 WebView

新手上路,请多包涵

最近,我们开始在 crashlytics 中看到这个新条目,它表示 android 在设备上找不到 webview 包。

这是完整的堆栈跟踪(我们源代码中的类已替换为 .... 。:

  Fatal Exception: android.view.InflateException: Binary XML file line #139: Binary XML file line #139: Error inflating class <unknown>

Caused by android.view.InflateException: Binary XML file line #139: Error inflating class <unknown>

Caused by java.lang.reflect.InvocationTargetException
       at java.lang.reflect.Constructor.newInstance0(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
       at android.view.LayoutInflater.createView(LayoutInflater.java:645)
       at g.a.a.a.d.a(SourceFile:211)
       at g.a.a.a.d.a(SourceFile:20)
       at g.a.a.a.d$a.onCreateView(SourceFile:302)
       at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:189)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:777)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:858)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:518)
       at g.a.a.a.d.inflate(SourceFile:60)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
       at ......(SourceFile:148)
       at ......(SourceFile:119)
       at ......(SourceFile:28)
       at android.support.v4.view.ViewPager.a(SourceFile:1034)
       at android.support.v4.view.ViewPager.a(SourceFile:1182)
       at android.support.v4.view.ViewPager.c(SourceFile:1116)
       at android.support.v4.view.ViewPager.onMeasure(SourceFile:1642)
       at ....(SourceFile:27)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1705)
       at android.widget.LinearLayout.measureVertical(LinearLayout.java:797)
       at android.widget.LinearLayout.onMeasure(LinearLayout.java:657)
       at android.view.View.measure(View.java:20234)
       at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1320)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:214)
       at android.widget.ScrollView.onMeasure(ScrollView.java:345)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1705)
       at android.widget.LinearLayout.measureVertical(LinearLayout.java:797)
       at android.widget.LinearLayout.onMeasure(LinearLayout.java:657)
       at android.view.View.measure(View.java:20234)
       at android.support.v4.view.ViewPager.onMeasure(SourceFile:1658)
       at android.view.View.measure(View.java:20234)
       at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:825)
       at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:511)
       at android.view.View.measure(View.java:20234)
       at android.support.v4.widget.DrawerLayout.onMeasure(SourceFile:1081)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:214)
       at android.support.v7.widget.ContentFrameLayout.onMeasure(SourceFile:139)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1705)
       at android.widget.LinearLayout.measureVertical(LinearLayout.java:797)
       at android.widget.LinearLayout.onMeasure(LinearLayout.java:657)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:214)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1705)
       at android.widget.LinearLayout.measureVertical(LinearLayout.java:797)
       at android.widget.LinearLayout.onMeasure(LinearLayout.java:657)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:214)
       at com.android.internal.policy.DecorView.onMeasure(DecorView.java:716)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2659)
       at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1600)
       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1873)
       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1485)
       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7078)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:910)
       at android.view.Choreographer.doCallbacks(Choreographer.java:712)
       at android.view.Choreographer.doFrame(Choreographer.java:646)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:896)
       at android.os.Handler.handleCallback(Handler.java:836)
       at android.os.Handler.dispatchMessage(Handler.java:103)
       at android.os.Looper.loop(Looper.java:203)
       at android.app.ActivityThread.main(ActivityThread.java:6369)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1088)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:949)
Caused by android.util.AndroidRuntimeException: android.webkit.WebViewFactory$MissingWebViewPackageException: Failed to load WebView provider: No WebView installed
       at android.webkit.WebViewFactory.getProviderClass(WebViewFactory.java:395)
       at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:194)
       at android.webkit.WebView.getFactory(WebView.java:2592)
       at android.webkit.WebView.findAddress(WebView.java:1958)
       at android.text.util.Linkify.gatherMapLinks(Linkify.java:599)
       at android.text.util.Linkify.addLinks(Linkify.java:287)
       at android.widget.TextView.setText(TextView.java:4474)
       at android.widget.TextView.setText(TextView.java:4395)
       at android.widget.TextView.<init>(TextView.java:1472)
       at android.widget.TextView.<init>(TextView.java:727)
       at android.widget.TextView.<init>(TextView.java:723)
       at me.grantland.widget.AutofitTextView.<init>(SourceFile:25)
       at java.lang.reflect.Constructor.newInstance0(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
       at android.view.LayoutInflater.createView(LayoutInflater.java:645)
       at g.a.a.a.d.a(SourceFile:211)
       at g.a.a.a.d.a(SourceFile:20)
       at g.a.a.a.d$a.onCreateView(SourceFile:302)
       at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:189)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:777)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:858)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:518)
       at g.a.a.a.d.inflate(SourceFile:60)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
       at ....(SourceFile:148)
       at ....(SourceFile:119)
       at ....(SourceFile:28)
       at android.support.v4.view.ViewPager.a(SourceFile:1034)
       at android.support.v4.view.ViewPager.a(SourceFile:1182)
       at android.support.v4.view.ViewPager.c(SourceFile:1116)
       at android.support.v4.view.ViewPager.onMeasure(SourceFile:1642)
       at ....(SourceFile:27)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1705)
       at android.widget.LinearLayout.measureVertical(LinearLayout.java:797)
       at android.widget.LinearLayout.onMeasure(LinearLayout.java:657)
       at android.view.View.measure(View.java:20234)
       at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1320)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:214)
       at android.widget.ScrollView.onMeasure(ScrollView.java:345)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1705)
       at android.widget.LinearLayout.measureVertical(LinearLayout.java:797)
       at android.widget.LinearLayout.onMeasure(LinearLayout.java:657)
       at android.view.View.measure(View.java:20234)
       at android.support.v4.view.ViewPager.onMeasure(SourceFile:1658)
       at android.view.View.measure(View.java:20234)
       at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:825)
       at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:511)
       at android.view.View.measure(View.java:20234)
       at android.support.v4.widget.DrawerLayout.onMeasure(SourceFile:1081)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:214)
       at android.support.v7.widget.ContentFrameLayout.onMeasure(SourceFile:139)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1705)
       at android.widget.LinearLayout.measureVertical(LinearLayout.java:797)
       at android.widget.LinearLayout.onMeasure(LinearLayout.java:657)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:214)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1705)
       at android.widget.LinearLayout.measureVertical(LinearLayout.java:797)
       at android.widget.LinearLayout.onMeasure(LinearLayout.java:657)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:214)
       at com.android.internal.policy.DecorView.onMeasure(DecorView.java:716)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2659)
       at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1600)
       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1873)
       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1485)
       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7078)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:910)
       at android.view.Choreographer.doCallbacks(Choreographer.java:712)
       at android.view.Choreographer.doFrame(Choreographer.java:646)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:896)
       at android.os.Handler.handleCallback(Handler.java:836)
       at android.os.Handler.dispatchMessage(Handler.java:103)
       at android.os.Looper.loop(Looper.java:203)
       at android.app.ActivityThread.main(ActivityThread.java:6369)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1088)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:949)
Caused by android.webkit.WebViewFactory$MissingWebViewPackageException: Failed to load WebView provider: No WebView installed
       at android.webkit.WebViewFactory.getWebViewContextAndSetProvider(WebViewFactory.java:294)
       at android.webkit.WebViewFactory.getProviderClass(WebViewFactory.java:354)
       at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:194)
       at android.webkit.WebView.getFactory(WebView.java:2592)
       at android.webkit.WebView.findAddress(WebView.java:1958)
       at android.text.util.Linkify.gatherMapLinks(Linkify.java:599)
       at android.text.util.Linkify.addLinks(Linkify.java:287)
       at android.widget.TextView.setText(TextView.java:4474)
       at android.widget.TextView.setText(TextView.java:4395)
       at android.widget.TextView.<init>(TextView.java:1472)
       at android.widget.TextView.<init>(TextView.java:727)
       at android.widget.TextView.<init>(TextView.java:723)
       at me.grantland.widget.AutofitTextView.<init>(SourceFile:25)
       at java.lang.reflect.Constructor.newInstance0(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
       at android.view.LayoutInflater.createView(LayoutInflater.java:645)
       at g.a.a.a.d.a(SourceFile:211)
       at g.a.a.a.d.a(SourceFile:20)
       at g.a.a.a.d$a.onCreateView(SourceFile:302)
       at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:189)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:777)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:858)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:518)
       at g.a.a.a.d.inflate(SourceFile:60)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
       at ....(SourceFile:148)
       at ....(SourceFile:119)
       at ....(SourceFile:28)
       at android.support.v4.view.ViewPager.a(SourceFile:1034)
       at android.support.v4.view.ViewPager.a(SourceFile:1182)
       at android.support.v4.view.ViewPager.c(SourceFile:1116)
       at android.support.v4.view.ViewPager.onMeasure(SourceFile:1642)
       at ....(SourceFile:27)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1705)
       at android.widget.LinearLayout.measureVertical(LinearLayout.java:797)
       at android.widget.LinearLayout.onMeasure(LinearLayout.java:657)
       at android.view.View.measure(View.java:20234)
       at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1320)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:214)
       at android.widget.ScrollView.onMeasure(ScrollView.java:345)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1705)
       at android.widget.LinearLayout.measureVertical(LinearLayout.java:797)
       at android.widget.LinearLayout.onMeasure(LinearLayout.java:657)
       at android.view.View.measure(View.java:20234)
       at android.support.v4.view.ViewPager.onMeasure(SourceFile:1658)
       at android.view.View.measure(View.java:20234)
       at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:825)
       at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:511)
       at android.view.View.measure(View.java:20234)
       at android.support.v4.widget.DrawerLayout.onMeasure(SourceFile:1081)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:214)
       at android.support.v7.widget.ContentFrameLayout.onMeasure(SourceFile:139)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1705)
       at android.widget.LinearLayout.measureVertical(LinearLayout.java:797)
       at android.widget.LinearLayout.onMeasure(LinearLayout.java:657)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:214)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1705)
       at android.widget.LinearLayout.measureVertical(LinearLayout.java:797)
       at android.widget.LinearLayout.onMeasure(LinearLayout.java:657)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6249)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:214)
       at com.android.internal.policy.DecorView.onMeasure(DecorView.java:716)
       at android.view.View.measure(View.java:20234)
       at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2659)
       at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1600)
       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1873)
       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1485)
       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7078)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:910)
       at android.view.Choreographer.doCallbacks(Choreographer.java:712)
       at android.view.Choreographer.doFrame(Choreographer.java:646)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:896)
       at android.os.Handler.handleCallback(Handler.java:836)
       at android.os.Handler.dispatchMessage(Handler.java:103)
       at android.os.Looper.loop(Looper.java:203)
       at android.app.ActivityThread.main(ActivityThread.java:6369)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1088)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:949)

我们在 :

安卓版本:5、6、7

设备制造商:联想、oneplus、三星、摩托罗拉

而且,这些设备没有植根。

搜索了一段时间后,我找不到任何合适的原因(和处理)。也经历了 这个 问题,但没有任何解决方案。

请帮忙。

编辑:我们的很多用户都会遇到这种情况,所以我不能告诉大家从 Play 商店检查/安装 webiew。有更好的解决方案吗?

原文由 Yash 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.6k
2 个回答

我在这里发现了一个可能的问题。正如我们所知,webview 已经作为一个独立的应用程序从 android 5.0 中发布,可能是 在我的视图被膨胀时,操作系统正在更新 webview 包,因此它找不到 webview pacakge对于那些片刻。我知道这是一个非常边缘的案例,但是

  • 如我所见,崩溃仅发生在 >= 5.0 支持此假设的设备上
  • 很难相信所有这些设备都没有安装 webview。事实上,我尝试从我的设备上卸载系统和 chrome 包,但应用程序仍然没有崩溃。

所以这就是我所做的(hacky 解决方案,但可以防止崩溃):

 try {
        // the inflating code that's causing the crash

    } catch (Exception e) {
        if (e.getMessage() != null && e.getMessage().contains("webview")) {
            // If the system failed to inflate this view because of the WebView (which could
            // be one of several types of exceptions), it likely means that the system WebView
            // is either not present (unlikely) OR in the process of being updated (also unlikely).
            // It's unlikely but we have been receiving a lot of crashes.
            // In this case, show the user a message and finish the activity
        }
    }

基本上只是处理那个异常。那里没有火箭科学。

原文由 Yash 发布,翻译遵循 CC BY-SA 4.0 许可协议

我在 Android 12 中遇到了同样的问题。我在我的 Play 商店应用程序中打开了 Android System Webiew 并将其卸载。卸载后,我通过单击“启用”按钮启用了它。那对我有用。

原文由 Jude Osbert K 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题