expo: OTA updates cause Android (only) to crash on startup; requires new published release to resolve
Summary
I’ve set up and have had OTA updates running perfectly fine on previous SDK versions, but it seems to be around SDK 40 that OTA updates on Android just crash on every startup. In order to resolve this I have to publish a full new version on the Android store, which somewhat defeats the purpose of OTA updates.
Managed or bare workflow? If you have ios/ or android/ directories in your project, the answer is bare!
managed
What platform(s) does this occur on?
Android
SDK Version (managed workflow only)
40.0.1
Environment
Expo CLI 4.1.6 environment info:
System:
OS: macOS 11.1
Shell: 5.8 - /bin/zsh
Binaries:
Node: 12.20.1 - ~/.nvm/versions/node/v12.20.1/bin/node
Yarn: 1.22.10 - /usr/local/bin/yarn
npm: 6.14.10 - ~/.nvm/versions/node/v12.20.1/bin/npm
Watchman: 4.9.0 - /usr/local/bin/watchman
SDKs:
iOS SDK:
Platforms: iOS 14.3, DriverKit 20.2, macOS 11.1, tvOS 14.3, watchOS 7.2
IDEs:
Xcode: 12.3/12C33 - /usr/bin/xcodebuild
npmPackages:
expo: ^40.0.0 => 40.0.1
react: 16.13.1 => 16.13.1
react-dom: 16.13.1 => 16.13.1
react-native: https://github.com/expo/react-native/archive/sdk-40.0.1.tar.gz => 0.63.2
react-native-web: ~0.13.12 => 0.13.18
npmGlobalPackages:
expo-cli: 4.1.6
Expo Workflow: managed
> yarn list expo-updates
yarn list v1.22.10
warning Filtering by arguments is deprecated. Please use the pattern option instead.
├─ expo-updates@0.4.1
Reproducible demo or steps to reproduce from a blank project
Actual error provided via adb logcat on a device with the published app installed following an update & restart:
Immediately following update:
02-02 11:27:20.522 9588 12805 E ReactNativeJS: Error: Expo native runtime is not available: something went wrong and we aren't sure what it was. Please post more information and get support at https://forums.expo.io.
02-02 11:27:20.529 9588 12805 E ReactNativeJS: Invariant Violation: Module AppRegistry is not a registered callable module (calling runApplication)
--------- switch to system
02-02 11:27:20.540 1545 3275 W NetworkPolicy: shared quota unsupported; generating rule for each iface
--------- switch to main
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: CatalystInstanceImpl caught native exception
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: com.facebook.react.common.JavascriptException: Error: Expo native runtime is not available: something went wrong and we aren't sure what it was. Please post more information and get support at https://forums.expo.io., stack:
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: <unknown>@13:184
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: v@2:1473
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: <unknown>@9:66
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: v@2:1473
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: <unknown>@8:7183
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: v@2:1473
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: <unknown>@6:45
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: v@2:1473
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: d@2:875
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: global code@3742:3
02-02 11:27:20.551 9588 12806 E unknown:ReactNative:
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: at com.facebook.react.modules.core.ExceptionsManagerModule.reportException(ExceptionsManagerModule.java:83)
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: at java.lang.reflect.Method.invoke(Native Method)
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:151)
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: at android.os.Handler.handleCallback(Handler.java:938)
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: at android.os.Handler.dispatchMessage(Handler.java:99)
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: at android.os.Looper.loop(Looper.java:223)
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:226)
02-02 11:27:20.551 9588 12806 E unknown:ReactNative: at java.lang.Thread.run(Thread.java:923)
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: Caught exception
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: com.facebook.react.common.JavascriptException: Error: Expo native runtime is not available: something went wrong and we aren't sure what it was. Please post more information and get support at https://forums.expo.io., stack:
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: <unknown>@13:184
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: v@2:1473
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: <unknown>@9:66
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: v@2:1473
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: <unknown>@8:7183
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: v@2:1473
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: <unknown>@6:45
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: v@2:1473
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: d@2:875
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: global code@3742:3
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager:
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: at com.facebook.react.modules.core.ExceptionsManagerModule.reportException(ExceptionsManagerModule.java:83)
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: at java.lang.reflect.Method.invoke(Native Method)
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:151)
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: at android.os.Handler.handleCallback(Handler.java:938)
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: at android.os.Handler.dispatchMessage(Handler.java:99)
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: at android.os.Looper.loop(Looper.java:223)
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:226)
02-02 11:27:20.551 9588 12806 E unknown:DisabledDevSupportManager: at java.lang.Thread.run(Thread.java:923)
--------- switch to crash
02-02 11:27:20.551 9588 12806 E AndroidRuntime: FATAL EXCEPTION: mqt_native_modules
02-02 11:27:20.551 9588 12806 E AndroidRuntime: Process: {app_id}, PID: 9588
02-02 11:27:20.551 9588 12806 E AndroidRuntime: com.facebook.react.common.JavascriptException: Error: Expo native runtime is not available: something went wrong and we aren't sure what it was. Please post more information and get support at https://forums.expo.io., stack:
02-02 11:27:20.551 9588 12806 E AndroidRuntime: <unknown>@13:184
02-02 11:27:20.551 9588 12806 E AndroidRuntime: v@2:1473
02-02 11:27:20.551 9588 12806 E AndroidRuntime: <unknown>@9:66
02-02 11:27:20.551 9588 12806 E AndroidRuntime: v@2:1473
02-02 11:27:20.551 9588 12806 E AndroidRuntime: <unknown>@8:7183
02-02 11:27:20.551 9588 12806 E AndroidRuntime: v@2:1473
02-02 11:27:20.551 9588 12806 E AndroidRuntime: <unknown>@6:45
02-02 11:27:20.551 9588 12806 E AndroidRuntime: v@2:1473
02-02 11:27:20.551 9588 12806 E AndroidRuntime: d@2:875
02-02 11:27:20.551 9588 12806 E AndroidRuntime: global code@3742:3
02-02 11:27:20.551 9588 12806 E AndroidRuntime:
02-02 11:27:20.551 9588 12806 E AndroidRuntime: at com.facebook.react.modules.core.ExceptionsManagerModule.reportException(ExceptionsManagerModule.java:83)
02-02 11:27:20.551 9588 12806 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
02-02 11:27:20.551 9588 12806 E AndroidRuntime: at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
02-02 11:27:20.551 9588 12806 E AndroidRuntime: at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:151)
02-02 11:27:20.551 9588 12806 E AndroidRuntime: at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
02-02 11:27:20.551 9588 12806 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:938)
02-02 11:27:20.551 9588 12806 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
02-02 11:27:20.551 9588 12806 E AndroidRuntime: at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
02-02 11:27:20.551 9588 12806 E AndroidRuntime: at android.os.Looper.loop(Looper.java:223)
02-02 11:27:20.551 9588 12806 E AndroidRuntime: at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:226)
02-02 11:27:20.551 9588 12806 E AndroidRuntime: at java.lang.Thread.run(Thread.java:923)
iOS appears unaffected - published updates download & restart with no problem.
Update triggered in code by a button press:
await Updates.fetchUpdateAsync();
await Updates.reloadAsync();
Last Android build using EAS Jan 31, 2021 7:57 PM
About this issue
- Original URL
- State: closed
- Created 3 years ago
- Reactions: 3
- Comments: 19 (7 by maintainers)
I can confirm, that running
expo publishwith--target baresolved the issue. Thanks 👍So I have great news! I installed these 2 packages in my project:
yarn add babel-plugin-transform-inline-environment-variables react-native-dotenv
I was then able to set NODE_ENV=production in my .env file and do an ‘expo publish’
OTA Updates are working perfectly now!
Yea, I’m looking into this response here. I’ll give it a shot and let you know the result.
https://github.com/apollographql/apollo-client/issues/7446#issuecomment-767660631
expo publishproduces a “production” bundle, but i don’t know if you have your own way of specifying what that means and maybe that’s different? either way this looks like something that has been answered on amplify-js related threads, and it is unrelated to expoit looks like it’s caused by graphql-js expecting to be run on a server environment where
NODE_ENVis always set, you can workaround (i think) by runningNODE_ENV=production expo publish