App crash on production but works fine locally

I have been struggling for a week with my app who is crashing on the play store but works well with Expo GO. I took over a legacy app that I upgraded from SDK 41 to 48.

My eas.json

{
  "cli": {
    "version": ">= 3.6.1"
  },
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal",
      "ios": {
        "resourceClass": "m1-medium"
      },
      "channel": "development"
    },
    "preview": {
      "distribution": "internal",
      "ios": {
        "resourceClass": "m1-medium"
      },
      "channel": "preview"
    },
    "production": {
      "ios": {
        "resourceClass": "m1-medium"
      },
      "channel": "production"
    }
  },
  "submit": {
    "production": {}
  }
}

ADB Logcat highlights

02-28 06:32:56.106  1255  1388 I MiuiNetworkPolicy: updateUidState uid = 10088, uidState = 20
02-28 06:32:56.128 11932 11932 E LoaderTask: Failed to launch embedded or launchable update
02-28 06:32:56.128 11932 11932 E LoaderTask: java.lang.Exception: No launchable update was found. If this is a bare workflow app, make sure you have configured expo-updates correctly in android/app/build.gradle.
02-28 06:32:56.128 11932 11932 E LoaderTask: 	at expo.modules.updates.launcher.DatabaseLauncher.launch(DatabaseLauncher.kt:71)
02-28 06:32:56.128 11932 11932 E LoaderTask: 	at expo.modules.updates.loader.LoaderTask$launchFallbackUpdateFromDisk$1.onSuccess(LoaderTask.kt:269)
02-28 06:32:56.128 11932 11932 E LoaderTask: 	at expo.modules.updates.loader.Loader.finishWithSuccess(Loader.kt:137)
02-28 06:32:56.128 11932 11932 E LoaderTask: 	at expo.modules.updates.loader.Loader.handleAssetDownloadCompleted(Loader.kt:305)
02-28 06:32:56.128 11932 11932 E LoaderTask: 	at expo.modules.updates.loader.Loader.downloadAllAssets(Loader.kt:229)
02-28 06:32:56.128 11932 11932 E LoaderTask: 	at expo.modules.updates.loader.Loader.processUpdateManifest(Loader.kt:196)

....

02-28 06:32:56.403  1255  1264 I system_server: Background concurrent copying GC freed 195079(6508KB) AllocSpace objects, 2(104KB) LOS objects, 13% free, 38MB/44MB, paused 308us total 461.449ms
02-28 06:32:56.449 11932 11975 E dev.expo.updates: {"timestamp":1677583976446,"message":"Failed to download manifest from URL: https:\/\/u.expo.dev\/0db3f5b0-a7ce-11e9-b565-4586c71668b9","code":"UpdateFailedToLoad","level":"error","stacktrace":["expo.modules.updates.logging.UpdatesLogger.logEntryString(UpdatesLogger.kt:135)","expo.modules.updates.logging.UpdatesLogger.error(UpdatesLogger.kt:96)","expo.modules.updates.logging.UpdatesLogger.error(UpdatesLogger.kt:86)","expo.modules.updates.logging.UpdatesLogger.error$default(UpdatesLogger.kt:81)","expo.modules.updates.loader.FileDownloader$downloadManifest$1.onResponse(FileDownloader.kt:309)","expo.modules.updates.loader.FileDownloader$downloadData$1.onResponse(FileDownloader.kt:393)","okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)","java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)","java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)","java.lang.Thread.run(Thread.java:919)"]}
02-28 06:32:56.453 11932 11975 E Loader  : Failed to download manifest from URL: https://u.expo.dev/0db3f5b0-a7ce-11e9-b565-4586c71668b9
02-28 06:32:56.453 11932 11975 E Loader  : java.lang.Exception: "channel-name" is not allowed to be empty. The headers "expo-runtime-version", "expo-channel-name", and "expo-platform" are required. They can also be set with the query parameters "runtime-version", "channel-name", and "platform".
02-28 06:32:56.453 11932 11975 E Loader  : 	at expo.modules.updates.loader.FileDownloader$downloadManifest$1.onResponse(FileDownloader.kt:312)
02-28 06:32:56.453 11932 11975 E Loader  : 	at expo.modules.updates.loader.FileDownloader$downloadData$1.onResponse(FileDownloader.kt:393)
02-28 06:32:56.453 11932 11975 E Loader  : 	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
02-28 06:32:56.453 11932 11975 E Loader  : 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
02-28 06:32:56.453 11932 11975 E Loader  : 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
02-28 06:32:56.453 11932 11975 E Loader  : 	at java.lang.Thread.run(Thread.java:919)
02-28 06:32:56.454 11932 11975 E dev.expo.updates: {"timestamp":1677583976453,"message":"UpdatesController loaderTask onFailure: \"channel-name\" is not allowed to be empty. The headers \"expo-runtime-version\", \"expo-channel-name\", and \"expo-platform\" are required. They can also be set with the query parameters \"runtime-version\", \"channel-name\", and \"platform\".","code":"None","level":"error","stacktrace":["expo.modules.updates.logging.UpdatesLogger.logEntryString(UpdatesLogger.kt:135)","expo.modules.updates.logging.UpdatesLogger.error(UpdatesLogger.kt:96)","expo.modules.updates.logging.UpdatesLogger.error(UpdatesLogger.kt:86)","expo.modules.updates.logging.UpdatesLogger.error$default(UpdatesLogger.kt:81)","expo.modules.updates.UpdatesController$start$1.onFailure(UpdatesController.kt:269)","expo.modules.updates.loader.LoaderTask.finish(LoaderTask.kt:194)","expo.modules.updates.loader.LoaderTask.access$finish(LoaderTask.kt:43)","expo.modules.updates.loader.LoaderTask$start$2$launchRemoteUpdate$1.onFailure(LoaderTask.kt:126)","expo.modules.updates.loader.LoaderTask$launchRemoteUpdateInBackground$1$1.onFailure(LoaderTask.kt:300)","expo.modules.updates.loader.Loader.finishWithError(Loader.kt:150)","expo.modules.updates.loader.Loader.access$finishWithError(Loader.kt:25)","expo.modules.updates.loader.Loader$start$1.onFailure(Loader.kt:102)","expo.modules.updates.loader.FileDownloader$downloadManifest$1.onResponse(FileDownloader.kt:310)","expo.modules.updates.loader.FileDownloader$downloadData$1.onResponse(FileDownloader.kt:393)","okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)","java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)","java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)","java.lang.Thread.run(Thread.java:919)"]}
02-28 06:32:56.455 11932 11975 E LoaderTask: Unexpected error encountered while loading this app
02-28 06:32:56.455 11932 11975 E LoaderTask: java.lang.Exception: "channel-name" is not allowed to be empty. The headers "expo-runtime-version", "expo-channel-name", and "expo-platform" are required. They can also be set with the query parameters "runtime-version", "channel-name", and "platform".
02-28 06:32:56.455 11932 11975 E LoaderTask: 	at expo.modules.updates.loader.FileDownloader$downloadManifest$1.onResponse(FileDownloader.kt:312)
02-28 06:32:56.455 11932 11975 E LoaderTask: 	at expo.modules.updates.loader.FileDownloader$downloadData$1.onResponse(FileDownloader.kt:393)
02-28 06:32:56.455 11932 11975 E LoaderTask: 	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
02-28 06:32:56.455 11932 11975 E LoaderTask: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
02-28 06:32:56.455 11932 11975 E LoaderTask: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
02-28 06:32:56.455 11932 11975 E LoaderTask: 	at java.lang.Thread.run(Thread.java:919)
02-28 06:32:56.456 11932 11975 E dev.expo.updates: {"timestamp":1677583976456,"message":"UpdatesController onBackgroundUpdateFinished: Error: \"channel-name\" is not allowed to be empty. The headers \"expo-runtime-version\", \"expo-channel-name\", and \"expo-platform\" are required. They can also be set with the query parameters \"runtime-version\", \"channel-name\", and \"platform\".","code":"Unknown","level":"error","stacktrace":["expo.modules.updates.loader.FileDownloader$downloadManifest$1.onResponse(FileDownloader.kt:312)","expo.modules.updates.loader.FileDownloader$downloadData$1.onResponse(FileDownloader.kt:393)","okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)","java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)","java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)","java.lang.Thread.run(Thread.java:919)"]}
02-28 06:32:56.457 11932 11932 W unknown:ReactInstanceManagerBuilder: You're not setting the JS Engine Resolution Algorithm. We'll try to load JSC first, and if it fails we'll fallback to Hermes
02-28 06:32:56.458 11932 11932 V SoLoader: libjscexecutor.so not found on /data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/lib/arm
02-28 06:32:56.458 11932 11932 V SoLoader: libjscexecutor.so not found on /data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/base.apk!/lib/armeabi-v7a
02-28 06:32:56.458 11932 11932 V SoLoader: libjscexecutor.so not found on /data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/split_config.armeabi_v7a.apk!/lib/armeabi-v7a
02-28 06:32:56.458 11932 11932 V SoLoader: libjscexecutor.so not found on /data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/split_config.fr.apk!/lib/armeabi-v7a
02-28 06:32:56.458 11932 11932 V SoLoader: libjscexecutor.so not found on /data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/split_config.xhdpi.apk!/lib/armeabi-v7a
02-28 06:32:56.458 11932 11932 V SoLoader: libjscexecutor.so not found on /data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/split_config.xhdpi.apk!/lib/armeabi-v7a
02-28 06:32:56.458 11932 11932 V SoLoader: libjscexecutor.so not found on /data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/split_config.fr.apk!/lib/armeabi-v7a
02-28 06:32:56.458 11932 11932 V SoLoader: libjscexecutor.so not found on /data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/split_config.armeabi_v7a.apk!/lib/armeabi-v7a
02-28 06:32:56.458 11932 11932 V SoLoader: libjscexecutor.so not found on /vendor/lib
02-28 06:32:56.458 11932 11975 V SoLoader: libreactnativejni.so not found on /data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/lib/arm
02-28 06:32:56.458 11932 11975 V SoLoader: libreactnativejni.so not found on /data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/base.apk!/lib/armeabi-v7a
02-28 06:32:56.458 11932 11975 V SoLoader: libreactnativejni.so not found on /data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/split_config.armeabi_v7a.apk!/lib/armeabi-v7a
02-28 06:32:56.458 11932 11975 V SoLoader: libreactnativejni.so not found on /data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/split_config.fr.apk!/lib/armeabi-v7a
02-28 06:32:56.459 11932 11975 V SoLoader: libreactnativejni.so not found on /data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/split_config.xhdpi.apk!/lib/armeabi-v7a
02-28 06:32:56.459 11932 11975 V SoLoader: libreactnativejni.so not found on /data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/split_config.xhdpi.apk!/lib/armeabi-v7a
02-28 06:32:56.459 11932 11932 V SoLoader: libjscexecutor.so not found on /system/lib
02-28 06:32:56.459 11932 11975 V SoLoader: libreactnativejni.so not found on /data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/split_config.fr.apk!/lib/armeabi-v7a
02-28 06:32:56.460   692   786 D AAL     : 02-28 06:32:56.378 BL= 840,ESS= 256, 02-28 06:32:56.394 BL= 839,ESS= 256, 02-28 06:32:56.427 BL= 838,ESS= 256, 02-28 06:32:56.444 BL= 837,ESS= 256, 02-28 06:32:56.460 BL= 836,ESS= 256,
02-28 06:32:56.461 11932 11932 E SoLoader: couldn't find DSO to load: libjscexecutor.so
02-28 06:32:56.461 11932 11932 E SoLoader: 	SoSource 0: com.facebook.soloader.DirectorySoSource[root = /data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/lib/arm flags = 0]
02-28 06:32:56.461 11932 11932 E SoLoader: 	SoSource 1: com.facebook.soloader.DirectApkSoSource[root = (/data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/base.apk!/lib/armeabi-v7a, /data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/split_config.armeabi_v7a.apk!/lib/armeabi-v7a, /data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/split_config.fr.apk!/lib/armeabi-v7a, /data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/split_config.xhdpi.apk!/lib/armeabi-v7a, )]
02-28 06:32:56.461 11932 11932 E SoLoader: 	SoSource 2: com.facebook.soloader.DirectApkSoSource[root = (/data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/split_config.xhdpi.apk!/lib/armeabi-v7a, )]
02-28 06:32:56.461 11932 11932 E SoLoader: 	SoSource 3: com.facebook.soloader.DirectApkSoSource[root = (/data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/split_config.fr.apk!/lib/armeabi-v7a, )]
02-28 06:32:56.461 11932 11932 E SoLoader: 	SoSource 4: com.facebook.soloader.DirectApkSoSource[root = (/data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/split_config.armeabi_v7a.apk!/lib/armeabi-v7a, )]
02-28 06:32:56.461 11932 11932 E SoLoader: 	SoSource 5: com.facebook.soloader.DirectorySoSource[root = /vendor/lib flags = 2]
02-28 06:32:56.461 11932 11932 E SoLoader: 	SoSource 6: com.facebook.soloader.DirectorySoSource[root = /system/lib flags = 2]
02-28 06:32:56.461 11932 11932 E SoLoader: 	Native lib dir: /data/app/com.blessme.blessme-bhwoRSyMPUbNHmHEQ8Qgcw==/lib/arm
02-28 06:32:56.461 11932 11932 E SoLoader:  result: 0

I tried many stuff without success…any clues?.
Thanks! :slightly_smiling_face:

Hi @morissetcl

First, do you have an android directory in your app? Since you say it works fine in Expo Go you do not need an android directory and there’s a possibility that, if you have one, it could be causing you some trouble. So if you have an android directory I suggest you remove (or rename) it as a first step.

If you don’t have an android directory in your app, try following the Debugging guide. In particular the “Production errors” section.

This might also help: Troubleshooting build errors and crashes

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.