firebasereact-nativegradlevisual-studio-app-centercrashlytics-android

React Native Crash - Grey Screen - App Center build only - com.facebook.react.bridge.CatalystInstanceImpl.jniLoadScriptFromAssets(Native Method)


Getting a grey screen of death index.android.bundle in a release build with little to no config changes. I'm including a block from the logs on Android in the thread with two crashes (Crashlytics + Native) discovered after I downloaded a build from App Center.

Note: App Center complained that Gradle 4.1.0+ wasn't supported and to use an earlier version

Unable to load script. Make sure you're either running a Metro server (run 'react-native start') or that your bundle 'index.android.bundle' is packaged correctly for release.

Active Crash

java.lang.RuntimeException: Unable to load script. Make sure you're either running a Metro server (run 'react-native start') or that your bundle 'index.android.bundle' is packaged correctly for release.
01-13 17:57:52.146 26389 26472 E AndroidRuntime:    at com.facebook.react.bridge.CatalystInstanceImpl.jniLoadScriptFromAssets(Native Method)

Right now, the only change I can think of was an update to Crashlytics for React Native, or @react-native-firebase/crashlytics. But then again it built fine in the initial builds after changes, then after a few minor fixes in JS, the builds stopped working in App Center for Android. This configuration has been around for a bit. I'm at a loss why this keeps cropping up.

Image:

enter image description here

Logs:

 HostConnection: HostConnection::get() New Host Connection established 0xf412d5e0, tid 26466
01-13 17:57:52.026 26389 26472 E unknown:ReactNative: ReactInstanceManager.createReactContext: mJSIModulePackage null
01-13 17:57:52.026 26389 26478 E ReactNativeJNI: logMarker CREATE_REACT_CONTEXT_END
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics: Settings request failed.
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics: java.net.ConnectException: Failed to connect to firebase-settings.crashlytics.com/0.0.0.0:443
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.java:265)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:183)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.java:224)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.java:108)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.java:88)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.internal.connection.Transmitter.newExchange(Transmitter.java:169)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:41)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:94)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:88)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:221)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.RealCall.execute(RealCall.java:81)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at com.google.firebase.crashlytics.internal.network.HttpRequest.execute(HttpRequest.java:129)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at com.google.firebase.crashlytics.internal.settings.network.DefaultSettingsSpiCall.invoke(DefaultSettingsSpiCall.java:86)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at com.google.firebase.crashlytics.internal.settings.SettingsController$1.then(SettingsController.java:200)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at com.google.firebase.crashlytics.internal.settings.SettingsController$1.then(SettingsController.java:193)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at com.google.android.gms.tasks.zzp.run(Unknown Source:2)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at com.google.firebase.crashlytics.internal.common.ExecutorUtils$1$1.onRun(ExecutorUtils.java:64)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at com.google.firebase.crashlytics.internal.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:27)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at java.lang.Thread.run(Thread.java:923)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics: Caused by: java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 443) from /127.0.0.1 (port 39744) after 10000ms: isConnected failed: ECONNREFUSED (Connection refused)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at libcore.io.IoBridge.isConnected(IoBridge.java:287)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at libcore.io.IoBridge.connectErrno(IoBridge.java:192)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at libcore.io.IoBridge.connect(IoBridge.java:134)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:228)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at java.net.Socket.connect(Socket.java:621)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.internal.platform.AndroidPlatform.connectSocket(AndroidPlatform.java:71)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.java:263)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   ... 28 more
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics: Caused by: android.system.ErrnoException: isConnected failed: ECONNREFUSED (Connection refused)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   at libcore.io.IoBridge.isConnected(IoBridge.java:274)
01-13 17:57:52.063 26389 26424 E FirebaseCrashlytics:   ... 38 more
01-13 17:57:52.086 26389 26466 D HostConnection: HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_native_sync_v2 ANDROID_EMU_native_sync_v3 ANDROID_EMU_native_sync_v4 ANDROID_EMU_dma_v1 ANDROID_EMU_direct_mem ANDROID_EMU_host_composition_v1 ANDROID_EMU_host_composition_v2 ANDROID_EMU_YUV_Cache ANDROID_EMU_async_unmap_buffer GL_OES_EGL_image_external_essl3 GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_host_side_tracing ANDROID_EMU_gles_max_version_3_0 
01-13 17:57:52.090   178   178 I hwservicemanager: getTransport: Cannot find entry android.hardware.configstore@1.0::ISurfaceFlingerConfigs/default in either framework or device manifest.
01-13 17:57:52.091 26389 26466 W OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
01-13 17:57:52.093 26389 26466 D EGL_emulation: eglCreateContext: 0xf412d650: maj 3 min 0 rcv 3
01-13 17:57:52.107 26389 26466 D EGL_emulation: eglMakeCurrent: 0xf412d650: ver 3 0 (tinfo 0xf447b3d0) (first time)
01-13 17:57:52.142 26389 26472 E unknown:DisabledDevSupportManager: Caught exception
01-13 17:57:52.142 26389 26472 E unknown:DisabledDevSupportManager: java.lang.RuntimeException: Unable to load script. Make sure you're either running a Metro server (run 'react-native start') or that your bundle 'index.android.bundle' is packaged correctly for release.
01-13 17:57:52.142 26389 26472 E unknown:DisabledDevSupportManager:     at com.facebook.react.bridge.CatalystInstanceImpl.jniLoadScriptFromAssets(Native Method)
01-13 17:57:52.142 26389 26472 E unknown:DisabledDevSupportManager:     at com.facebook.react.bridge.CatalystInstanceImpl.loadScriptFromAssets(CatalystInstanceImpl.java:234)
01-13 17:57:52.142 26389 26472 E unknown:DisabledDevSupportManager:     at com.facebook.react.bridge.JSBundleLoader$1.loadScript(JSBundleLoader.java:29)
01-13 17:57:52.142 26389 26472 E unknown:DisabledDevSupportManager:     at com.facebook.react.bridge.CatalystInstanceImpl.runJSBundle(CatalystInstanceImpl.java:258)
01-13 17:57:52.142 26389 26472 E unknown:DisabledDevSupportManager:     at com.facebook.react.ReactInstanceManager.createReactContext(ReactInstanceManager.java:1293)
01-13 17:57:52.142 26389 26472 E unknown:DisabledDevSupportManager:     at com.facebook.react.ReactInstanceManager.access$1100(ReactInstanceManager.java:131)
01-13 17:57:52.142 26389 26472 E unknown:DisabledDevSupportManager:     at com.facebook.react.ReactInstanceManager$5.run(ReactInstanceManager.java:1016)
01-13 17:57:52.142 26389 26472 E unknown:DisabledDevSupportManager:     at java.lang.Thread.run(Thread.java:923)
--------- beginning of crash
01-13 17:57:52.146 26389 26472 E AndroidRuntime: FATAL EXCEPTION: create_react_context
01-13 17:57:52.146 26389 26472 E AndroidRuntime: Process: com.eightsleep.eight, PID: 26389
01-13 17:57:52.146 26389 26472 E AndroidRuntime: java.lang.RuntimeException: Unable to load script. Make sure you're either running a Metro server (run 'react-native start') or that your bundle 'index.android.bundle' is packaged correctly for release.
01-13 17:57:52.146 26389 26472 E AndroidRuntime:    at com.facebook.react.bridge.CatalystInstanceImpl.jniLoadScriptFromAssets(Native Method)
01-13 17:57:52.146 26389 26472 E AndroidRuntime:    at com.facebook.react.bridge.CatalystInstanceImpl.loadScriptFromAssets(CatalystInstanceImpl.java:234)
01-13 17:57:52.146 26389 26472 E AndroidRuntime:    at com.facebook.react.bridge.JSBundleLoader$1.loadScript(JSBundleLoader.java:29)
01-13 17:57:52.146 26389 26472 E AndroidRuntime:    at com.facebook.react.bridge.CatalystInstanceImpl.runJSBundle(CatalystInstanceImpl.java:258)
01-13 17:57:52.146 26389 26472 E AndroidRuntime:    at com.facebook.react.ReactInstanceManager.createReactContext(ReactInstanceManager.java:1293)
01-13 17:57:52.146 26389 26472 E AndroidRuntime:    at com.facebook.react.ReactInstanceManager.access$1100(ReactInstanceManager.java:131)
01-13 17:57:52.146 26389 26472 E AndroidRuntime:    at com.facebook.react.ReactInstanceManager$5.run(ReactInstanceManager.java:1016)
01-13 17:57:52.146 26389 26472 E AndroidRuntime:    at java.lang.Thread.run(Thread.java:923)

app/build.gradle

project.ext.react = [
    entryFile: "index.js",
    bundleInRelease: true,
    enableHermes: false,
    resourcesDirRelease: "src/release/res"
]

apply from: "../../node_modules/react-native/react.gradle"
implementation 'com.google.firebase:firebase-analytics:18.0.0'
implementation 'com.google.firebase:firebase-crashlytics:17.3.0'

build.gradle

dependencies {
   classpath 'com.google.gms:google-services:4.3.4'
   classpath('com.android.tools.build:gradle:4.1.0')
   classpath 'com.google.firebase:firebase-crashlytics-gradle:2.3.0'
}

Solution

  • I ended up resolving this issue by getting a local release build with adb logcat running discovering exceptions being thrown from Crashlytics due to missing imports.

    Suffice to say, after some digging into documentation and piecing together what I needed.

    I was missing this inclusion in the settings.gradle:

    include ':@react-native-firebase_app'
    project(':@react-native-firebase_app').projectDir = new File(rootProject.projectDir, './../node_modules/@react-native-firebase/app/android')
    

    The documentation on this tool is so poorly kept that I'd hardly recommend using it.