android Failed to load WebView provider: No WebView installed

I figured out a probable problem here. As we know that webview has been shipping as a separate app from android 5.0, it may be the case that at the time my view is being inflated, the webview package is being updated by the os and therefore it can't find the webview pacakge for those few moments. I know it's a very borderline case but

  • as I can see, the crash is happening on only >= 5.0 devices which support this hypothesis
  • it's very hard to believe that all such devices don't have webview installed. As a matter of fact, I tried uninstalling the system and chrome packages from my device but still the app doesn't crash.

So here's what I did (hacky solution but prevents crashes):

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
        }
    }

Basically nothing but handling that exception. No rocket science there.


I faced the same issue in Android 12. I opened the Android System Webiew in my Play Store app and uninstalled it. After it was uninstalled I enabled it by clicking on the Enable button. That worked for me.


Please refer to this issue.

Workaround

try {
    super.setText(spannableStringBuilder, type);
} catch (Exception e) {
    // WebView is not installed in some devices by default, Linkify.MAP_ADDRESSES causes the exception
    if (e.getMessage().contains("webview")){
        setAutoLinkMask(Linkify.WEB_URLS | Linkify.EMAIL_ADDRESSES | Linkify.PHONE_NUMBERS);
    }
    super.setText(spannableStringBuilder, type);
}