Webpage not available error in production

We recently upgraded from cordova to capacitor and some of our users (not all) are seeing this error page when they open the app on Android.

We have the hostname set to stormcloudapp as that is what it was set to previously with cordova and is required for CORS.

Still having this issue. Anyone?

You need to give us more info than that… How do I ask a good question? - Help Center - Stack Overflow

Fair enough. I have since been able to pull these logs from a device:

12-07 09:12:31.794 16984 16984 I in.mobile.ioni: Rejecting re-init on previously-failed class java.lang.Class<androidx.webkit.internal.WebViewRenderProcessClientFrameworkAdapter>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/webkit/WebViewRenderProcessClient;
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void androidx.webkit.WebViewCompat.addWebMessageListener(android.webkit.WebView, java.lang.String, java.util.Set, androidx.webkit.WebViewCompat$WebMessageListener) (WebViewCompat.java:671)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void com.getcapacitor.MessageHandler.<init>(com.getcapacitor.Bridge, android.webkit.WebView, org.apache.cordova.PluginManager) (MessageHandler.java:36)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void com.getcapacitor.Bridge.<init>(androidx.appcompat.app.AppCompatActivity, com.getcapacitor.ServerPath, androidx.fragment.app.Fragment, android.webkit.WebView, java.util.List, java.util.List, com.getcapacitor.cordova.MockCordovaInterfaceImpl, org.apache.cordova.PluginManager, org.apache.cordova.CordovaPreferences, com.getcapacitor.CapConfig) (Bridge.java:209)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void com.getcapacitor.Bridge.<init>(androidx.appcompat.app.AppCompatActivity, com.getcapacitor.ServerPath, androidx.fragment.app.Fragment, android.webkit.WebView, java.util.List, java.util.List, com.getcapacitor.cordova.MockCordovaInterfaceImpl, org.apache.cordova.PluginManager, org.apache.cordova.CordovaPreferences, com.getcapacitor.CapConfig, com.getcapacitor.Bridge-IA) (Bridge.java:-1)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at com.getcapacitor.Bridge com.getcapacitor.Bridge$Builder.create() (Bridge.java:1519)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void com.getcapacitor.BridgeActivity.load() (BridgeActivity.java:42)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void com.getcapacitor.BridgeActivity.onCreate(android.os.Bundle) (BridgeActivity.java:36)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void android.app.Activity.performCreate(android.os.Bundle, android.os.PersistableBundle) (Activity.java:7327)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:7318)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1271)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:3094)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at android.app.Activity android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions, android.content.Intent) (ActivityThread.java:3257)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void android.app.servertransaction.LaunchActivityItem.execute(android.app.ClientTransactionHandler, android.os.IBinder, android.app.servertransaction.PendingTransactionActions) (LaunchActivityItem.java:78)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void android.app.servertransaction.TransactionExecutor.executeCallbacks(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:108)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:68)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1948)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void android.os.Looper.loop() (Looper.java:214)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:7050)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:494)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:965)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni: Caused by: java.lang.ClassNotFoundException: Didn't find class "android.webkit.WebViewRenderProcessClient" on path: DexPathList[[zip file "/data/app/com.switchdin.mobile.ionic-SDxddRSJNxmpp9hBo9ltnA==/base.apk"],nativeLibraryDirectories=[/data/app/com.switchdin.mobile.ionic-SDxddRSJNxmpp9hBo9ltnA==/lib/arm64, /data/app/com.switchdin.mobile.ionic-SDxddRSJNxmpp9hBo9ltnA==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:134)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void androidx.webkit.WebViewCompat.addWebMessageListener(android.webkit.WebView, java.lang.String, java.util.Set, androidx.webkit.WebViewCompat$WebMessageListener) (WebViewCompat.java:671)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void com.getcapacitor.MessageHandler.<init>(com.getcapacitor.Bridge, android.webkit.WebView, org.apache.cordova.PluginManager) (MessageHandler.java:36)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void com.getcapacitor.Bridge.<init>(androidx.appcompat.app.AppCompatActivity, com.getcapacitor.ServerPath, androidx.fragment.app.Fragment, android.webkit.WebView, java.util.List, java.util.List, com.getcapacitor.cordova.MockCordovaInterfaceImpl, org.apache.cordova.PluginManager, org.apache.cordova.CordovaPreferences, com.getcapacitor.CapConfig) (Bridge.java:209)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void com.getcapacitor.Bridge.<init>(androidx.appcompat.app.AppCompatActivity, com.getcapacitor.ServerPath, androidx.fragment.app.Fragment, android.webkit.WebView, java.util.List, java.util.List, com.getcapacitor.cordova.MockCordovaInterfaceImpl, org.apache.cordova.PluginManager, org.apache.cordova.CordovaPreferences, com.getcapacitor.CapConfig, com.getcapacitor.Bridge-IA) (Bridge.java:-1)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at com.getcapacitor.Bridge com.getcapacitor.Bridge$Builder.create() (Bridge.java:1519)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void com.getcapacitor.BridgeActivity.load() (BridgeActivity.java:42)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void com.getcapacitor.BridgeActivity.onCreate(android.os.Bundle) (BridgeActivity.java:36)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void android.app.Activity.performCreate(android.os.Bundle, android.os.PersistableBundle) (Activity.java:7327)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:7318)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1271)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:3094)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at android.app.Activity android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions, android.content.Intent) (ActivityThread.java:3257)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void android.app.servertransaction.LaunchActivityItem.execute(android.app.ClientTransactionHandler, android.os.IBinder, android.app.servertransaction.PendingTransactionActions) (LaunchActivityItem.java:78)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void android.app.servertransaction.TransactionExecutor.executeCallbacks(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:108)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:68)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1948)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void android.os.Looper.loop() (Looper.java:214)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:7050)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:494)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:965)
12-07 09:12:31.794 16984 16984 I in.mobile.ioni:

Here are the dependencies before the upgrade:

{
  "@angular/animations": "^16.1.5",
  "@angular/cdk": "^16.1.5",
  "@angular/common": "^16.1.5",
  "@angular/core": "^16.1.5",
  "@angular/fire": "^7.6.1",
  "@angular/forms": "^16.1.5",
  "@angular/material": "^16.1.5",
  "@angular/material-moment-adapter": "^16.1.5",
  "@angular/platform-browser": "^16.1.5",
  "@angular/platform-browser-dynamic": "^16.1.5",
  "@angular/pwa": "^16.1.4",
  "@angular/router": "^16.1.5",
  "@angular/service-worker": "^16.1.5",
  "@ionic-native/android-permissions": "5.36.0",
  "@ionic-native/barcode-scanner": "5.36.0",
  "@ionic-native/core": "5.36.0",
  "@ionic-native/date-picker": "5.36.0",
  "@ionic-native/device": "5.36.0",
  "@ionic-native/http": "5.36.0",
  "@ionic-native/location-accuracy": "5.36.0",
  "@ionic-native/screen-orientation": "5.36.0",
  "@ionic-native/splash-screen": "5.36.0",
  "@ionic/angular": "^7.1.3",
  "@ionic/cli": "^7.1.1",
  "@ionic/core": "^7.1.3",
  "@ionic/storage": "^4.0.0",
  "@ionic/storage-angular": "^4.0.0",
  "@ngrx/component": "^16.1.0",
  "@ngrx/component-store": "^16.1.0",
  "@ngrx/data": "^16.1.0",
  "@ngrx/effects": "^16.1.0",
  "@ngrx/entity": "^16.1.0",
  "@ngrx/router-store": "^16.1.0",
  "@ngrx/store": "^16.1.0",
  "@ngx-translate/core": "^15.0.0",
  "@ngx-translate/http-loader": "^8.0.0",
  "@types/plotly.js": "^2.12.24",
  "cordova-browser": "^7.0.0",
  "cordova-plugin-add-swift-support": "^2.0.2",
  "cordova-plugin-advanced-http": "^3.3.1",
  "cordova-plugin-android-permissions": "^1.1.5",
  "cordova-plugin-datepicker": "^0.9.3",
  "cordova-plugin-device": "^2.1.0",
  "cordova-plugin-file": "^8.0.0",
  "cordova-plugin-ionic-keyboard": "^2.2.0",
  "cordova-plugin-ionic-webview": "^5.0.0",
  "cordova-plugin-request-location-accuracy": "^2.3.0",
  "cordova-plugin-screen-orientation": "^3.0.3",
  "cordova-plugin-splashscreen": "^6.0.2",
  "cordova-plugin-wifiwizard2": "^3.1.1",
  "firebase": "^10.2.0",
  "html5-qrcode": "^2.3.8",
  "jasmine-marbles": "^0.9.2",
  "jwt-decode": "^3.1.2",
  "lodash": "^4.17.21",
  "luxon": "^3.3.0",
  "mixpanel-browser": "^2.47.0",
  "moment": "^2.29.4",
  "moment-timezone": "^0.5.43",
  "mqtt": "^4.3.7",
  "ngx-mqtt": "^16.1.0",
  "plotly.js-dist": "^2.24.3",
  "rxjs": "^7.8.1",
  "swiper": "^10.0.4",
  "tslib": "^2.6.0",
  "wifiwizard2": "^3.1.1",
  "zone.js": "^0.13.1"
}

After:

{
  "@analytics/mixpanel": "^0.4.0",
  "@angular/animations": "^16.1.5",
  "@angular/cdk": "^16.1.5",
  "@angular/common": "^16.1.5",
  "@angular/compiler": "^16.1.5",
  "@angular/core": "^16.1.5",
  "@angular/forms": "^16.1.5",
  "@angular/material": "^16.1.5",
  "@angular/material-moment-adapter": "^16.1.5",
  "@angular/platform-browser": "^16.1.5",
  "@angular/platform-browser-dynamic": "^16.1.5",
  "@angular/pwa": "^16.1.4",
  "@angular/router": "^16.1.5",
  "@angular/service-worker": "^16.1.5",
  "@awesome-cordova-plugins/wifi-wizard-2": "^6.4.0",
  "@capacitor-community/sqlite": "5.2.3",
  "@capacitor/android": "^5.0.0",
  "@capacitor/app": "^5.0.0",
  "@capacitor/core": "^5.0.0",
  "@capacitor/device": "^5.0.0",
  "@capacitor/filesystem": "^5.0.0",
  "@capacitor/geolocation": "^5.0.0",
  "@capacitor/haptics": "^5.0.0",
  "@capacitor/ios": "^5.0.0",
  "@capacitor/keyboard": "^5.0.0",
  "@capacitor/splash-screen": "^5.0.0",
  "@capacitor/status-bar": "^5.0.0",
  "@ionic/angular": "^7.1.3",
  "@ionic/storage": "^4.0.0",
  "@ionic/storage-angular": "^4.0.0",
  "@ngrx/component": "^16.1.0",
  "@ngrx/component-store": "^16.1.0",
  "@ngrx/data": "^16.1.0",
  "@ngrx/effects": "^16.1.0",
  "@ngrx/entity": "^16.1.0",
  "@ngrx/router-store": "^16.1.0",
  "@ngrx/store": "^16.1.0",
  "@ngx-translate/core": "^15.0.0",
  "@ngx-translate/http-loader": "^8.0.0",
  "@sentry/angular-ivy": "^7.81.1",
  "@sentry/capacitor": "^0.15.0",
  "@sentry/cli": "^2.22.3",
  "@trapezedev/configure": "^7.0.10",
  "@types/plotly.js": "^2.12.24",
  "analytics": "^0.8.9",
  "cordova-plugin-wifiwizard2": "^3.1.1",
  "firebase": "^10.2.0",
  "html5-qrcode": "^2.3.8",
  "ionicons": "^7.0.0",
  "jasmine-marbles": "^0.9.2",
  "jwt-decode": "^3.1.2",
  "lodash": "^4.17.21",
  "luxon": "^3.3.0",
  "moment": "^2.29.4",
  "moment-timezone": "^0.5.43",
  "mqtt": "^4.3.7",
  "ngx-mqtt": "^16.1.0",
  "plotly.js-dist": "^2.24.3",
  "rxjs": "^7.8.1",
  "swiper": "^10.0.4",
  "ts-deep-pick": "^0.2.2",
  "tslib": "^2.6.0",
  "zone.js": "^0.13.1"
}

Capacitor config:

import { CapacitorConfig } from '@capacitor/cli';

const config: CapacitorConfig = {
  appId: 'com.switchdin.mobile.ionic',
  appName: 'Stormcloud',
  webDir: 'www',
  server: {
    androidScheme: 'https',
    hostname: 'stormcloudapp',
    cleartext: true,
  },
  plugins: {
    SplashScreen: {
      launchShowDuration: 4000,
      launchAutoHide: true,
      launchFadeOutDuration: 300,
    },
  },
};

export default config;
πŸ’Š   Capacitor Doctor  πŸ’Š 

Latest Dependencies:

  @capacitor/cli: 5.5.1
  @capacitor/core: 5.5.1
  @capacitor/android: 5.5.1
  @capacitor/ios: 5.5.1

Installed Dependencies:

  @capacitor/cli: 5.5.1
  @capacitor/core: 5.5.1
  @capacitor/android: 5.5.1
  @capacitor/ios: 5.5.1

[success] iOS looking great! πŸ‘Œ
[success] Android looking great! πŸ‘Œ

Clearing the app cache gets it to work, but we have thousands of users that will be affected by this issue.