Skip to content

Commit

Permalink
chore: disable hermes via gradle project env var
Browse files Browse the repository at this point in the history
fixes #18493

## Summary

We enabled `hermes` for android in the `react-native` upgrade to `0.72.5`
Although things seemed fine but developers were seeing frequent crashes in their local environment.

After some investigation the crashes were traced to max native call stack depth in `hermes` engine.
Disabling `hermes` for local debug builds helps fix that issue.

This commit disables `hermes` by default with the help of a exporting an environment variable in the `make run-android` command.
It is annoying that this also modifies `android/gradle.properties` so we keep `hermesEnabled` as `false` there as well.
We also enable `hermes` when generating release builds so that we can take advantage of `hermes` engine in release builds.
  • Loading branch information
siddarthkay committed Feb 1, 2024
1 parent 38dbd66 commit 06fb04c
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 1 deletion.
3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,9 @@ run-re-frisk: ##@run Start re-frisk server

# TODO: Migrate this to a Nix recipe, much the same way as nix/mobile/android/targets/release-android.nix
run-android: export TARGET := android
# INFO: We disable hermes for local builds by default to prevent crashes with exceeding native callstack errors
# https://github.com/status-im/status-mobile/issues/18493
run-android: export ORG_GRADLE_PROJECT_hermesEnabled := false
# INFO: If it's empty (no devices attached, parsing issues, script error) - for Nix it's the same as not set.
run-android: export ANDROID_ABI_INCLUDE ?= $(shell ./scripts/adb_devices_abis.sh)
run-android: ##@run Build Android APK and start it on the device
Expand Down
2 changes: 1 addition & 1 deletion android/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,4 @@ newArchEnabled=false

# Use this property to enable or disable the Hermes JS engine.
# If set to false, you will be using JSC instead.
hermesEnabled=true
hermesEnabled=false
2 changes: 2 additions & 0 deletions nix/mobile/android/release.nix
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ in stdenv.mkDerivation rec {
STATUS_GO_SRC_OVERRIDE = statusGoSrcOverride;
ANDROID_ABI_SPLIT = androidAbiSplit;
ANDROID_ABI_INCLUDE = androidAbiInclude;
# hermes is Disabled by default, we enable it for release https://github.com/status-im/status-mobile/issues/18493
ORG_GRADLE_PROJECT_hermesEnabled = true;

# Fix for ERR_OSSL_EVP_UNSUPPORTED error.
NODE_OPTIONS = "--openssl-legacy-provider";
Expand Down
6 changes: 6 additions & 0 deletions src/status_im/core.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,13 @@

(def adjust-resize 16)

(defn is-hermes
[]
(boolean (.-HermesInternal js/global)))

(defn init
[]

(native-module/init #(re-frame/dispatch [:signals/signal-received %]))
(when platform/android?
(native-module/set-soft-input-mode adjust-resize))
Expand All @@ -54,5 +59,6 @@
(async-storage/get-item :screen-height #(reset! shell.state/screen-height %))

(dev/setup)
(prn "is-hermes ->" (is-hermes))

(re-frame/dispatch-sync [:app-started]))

0 comments on commit 06fb04c

Please sign in to comment.