Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CRASH] Android 6.0.1 crashes with java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so #25923

Closed
taschik opened this issue Aug 2, 2019 · 87 comments
Labels
Bug Platform: Android Android applications. Tech: Hermes Hermes Engine: https://hermesengine.dev/

Comments

@taschik
Copy link

taschik commented Aug 2, 2019

I uploaded a RN0.60.4 release build to Google Play and they ran automated tests leading to a lot of crashes coming in with the following stack trace:

Fatal Exception: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so
       at com.facebook.soloader.SoLoader.doLoadLibraryBySoName + 738(SoLoader.java:738)
       at com.facebook.soloader.SoLoader.loadLibraryBySoName + 591(SoLoader.java:591)
       at com.facebook.soloader.SoLoader.loadLibrary + 529(SoLoader.java:529)
       at com.facebook.soloader.SoLoader.loadLibrary + 484(SoLoader.java:484)
       at com.facebook.hermes.reactexecutor.HermesExecutor.<clinit> + 20(HermesExecutor.java:20)
       at com.facebook.hermes.reactexecutor.HermesExecutorFactory.create + 27(HermesExecutorFactory.java:27)
       at com.facebook.react.ReactInstanceManager$5.run + 949(ReactInstanceManager.java:949)
       at java.lang.Thread.run + 818(Thread.java:818)

Affected OS is always 6.0.1. Interestingly Hermes is not even enabled in my build.gradle:

project.ext.react = [
  entryFile: "index.android.js",
  enableHermes: false,  // clean and rebuild if changing
  bundleInDebug: false,
  bundleInRelease: true,
  root: "../../",
 ]
...
def enableHermes = project.ext.react.get("enableHermes", false);
...
// Hermes config
    if (enableHermes) {
      def hermesPath = "../../node_modules/hermesvm/android/";
      debugImplementation files(hermesPath + "hermes-debug.aar")
      releaseImplementation files(hermesPath + "hermes-release.aar")
    } else {
      implementation jscFlavor
    }

I looked into the app bundle and extracted the apk for the device type that is crashing. It contains the libjsc.so file but not the libhermes.so. Imho this is correct because my gradle is configured to not include it. The big question is why does it want to load it if it not enabled? What also surprised me is that I found libhermes-executor-release.so and libhermes-executor-debug.so in it too. I guess, they should be excluded?

I filed a report with the Hermes project here but they referred me to here.

React Native version:

System:
    OS: macOS 10.14.6
    CPU: (12) x64 Intel(R) Core(TM) i9-8950HK CPU @ 2.90GHz
    Memory: 88.63 MB / 32.00 GB
    Shell: 5.3 - /bin/zsh
  Binaries:
    Node: 10.16.0 - /usr/local/bin/node
    Yarn: 1.17.3 - /usr/local/bin/yarn
    npm: 6.9.0 - /usr/local/bin/npm
    Watchman: 4.9.0 - /usr/local/bin/watchman
  SDKs:
    iOS SDK:
      Platforms: iOS 12.4, macOS 10.14, tvOS 12.4, watchOS 5.3
    Android SDK:
      API Levels: 23, 26, 27, 28
      Build Tools: 23.0.1, 25.0.0, 26.0.3, 27.0.3, 28.0.1, 28.0.2, 28.0.3
      System Images: android-24 | Google APIs Intel x86 Atom, android-24 | Google Play Intel x86 Atom, android-27 | Google APIs Intel x86 Atom, android-28 | Google APIs Intel x86 Atom, android-29 | Google APIs Intel x86 Atom
  IDEs:
    Android Studio: 3.4 AI-183.6156.11.34.5692245
    Xcode: 10.3/10G8 - /usr/bin/xcodebuild
  npmPackages:
    react: ^16.8.6 => 16.8.6
    react-native: ^0.60.4 => 0.60.4
  npmGlobalPackages:
    eslint-plugin-react-native: 3.5.0
    react-native-cli: 2.0.1
    react-native-git-upgrade: 0.2.7

Steps To Reproduce

  1. Upload an RN0.60.4 app bundle with crash reporting to Playstore
  2. check the crash reports

Describe what you expected to happen:

  • The Google Play devices should not crash.
  • Hermes library should not be loaded if disabled.
  • libhermes-executor-release.so and libhermes-executor-debug.so should not get bundled
@taschik taschik added the Bug label Aug 2, 2019
@react-native-bot react-native-bot added the Platform: Android Android applications. label Aug 2, 2019
@owinter86
Copy link

I think this is related to my issue I posted on the Hermes repo.

https://github.com/facebook/hermes/issues/80

@taschik
Copy link
Author

taschik commented Aug 2, 2019

I am not so sure, because I did not even have Hermes activated because I was experiences issues even building it. However, the devices that run the app crash because they try to load it but it is not bundled (as configured).

@lachtos
Copy link

lachtos commented Aug 3, 2019

I'm having occasional crashes like this in production with hermes disabled also on 0.60.4

@dulmandakh dulmandakh added the Tech: Hermes Hermes Engine: https://hermesengine.dev/ label Aug 4, 2019
@MayrPatrick
Copy link

I am also having similar crashes as described here but WITH having hermes enabled as described wtihin facebook/hermes#76 .
Any idea why that might be happening?

@wsdt
Copy link

wsdt commented Aug 6, 2019

Having this issue too, when hermes disabled.

RN: 0.60.4

Device
Brand: LGE
Model: Nexus 5X
Orientation: Portrait
RAM free: 3.3 GB
Disk free: 2.06 GB

Operating System
Version: 6.0.1
Orientation: Portrait
Rooted: Yes

Fatal Exception: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so at com.facebook.soloader.SoLoader.doLoadLibraryBySoName + 738(SoLoader.java:738) at com.facebook.soloader.SoLoader.loadLibraryBySoName + 591(SoLoader.java:591) at com.facebook.soloader.SoLoader.loadLibrary + 529(SoLoader.java:529) at com.facebook.soloader.SoLoader.loadLibrary + 484(SoLoader.java:484) at com.facebook.hermes.reactexecutor.HermesExecutor.<clinit> + 20(HermesExecutor.java:20) at com.facebook.hermes.reactexecutor.HermesExecutorFactory.create + 27(HermesExecutorFactory.java:27) at com.facebook.react.ReactInstanceManager$5.run + 949(ReactInstanceManager.java:949) at java.lang.Thread.run + 818(Thread.java:818)

@Ekhui
Copy link

Ekhui commented Aug 7, 2019

same problem in 5.1.1

@Ekhui
Copy link

Ekhui commented Aug 7, 2019

anyone fixed it?

@fengyutongxing
Copy link

issue
java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so

use version 0.60.0

@karvulf
Copy link

karvulf commented Aug 9, 2019

I got the same problem if I integrate my react-native-app to an existing android-app. I use react-native-version 0.60.4.
I documentated my code there: #25985

Edit: I could fix my problem. Maybe it helps you. ->#25985

@emrebicer
Copy link

Having the same issue, the project works fine on my local emulator but it gives the exact same error
with @wsdt , any solutions yet?

@arjun-mavonic
Copy link

How is react 60 stable I don't understand.

I have had crashes for
Device
Brand: LGE
Model: Nexus 5X
React Native Version: 0.60.3
Android Version: 6.0.1

I had created android app bundle( .aab file ) with hermes enabled. I have only debug and release variant. release variant has this problem.
Issue is opened on Aug 3 and it's been so many days, not a single working fix is available. Really frustrating.

@owinter86
Copy link

owinter86 commented Sep 25, 2019

Hey @arjun-livquik you will need to build apk if you plan to have hermes enabled as its not currently compatible with app bundles.

#25927

@arjun-mavonic
Copy link

Thanks @owinter86
Could be that app might work just fine with APKs, because I have submitted APKs for staging build and had never seen this crash.
Sure will use APKs instead.

@jsaraiva
Copy link

Hello.

Have you tried with the latest release of Hermes?
#25646 (comment)

Of course, the "sdk<=19" problem does not apply to you, but there were lots of other fixes to Hermes too.
BTW, I built and submitted .aab release builds with hermes to the Play Store, and they haven't had any problems.

Also, be sure to clean the android build folders (I usually build with "./gradlew clean assembleRelease bundleRelease", just in case) if you change the "hermes enabled/disabled" setting.

Cheers!

@arjun-mavonic
Copy link

@jsaraiva Ofcourse I run ./gradlew clean bundleRelease everytime for creating .aab file. I have now rolled out to Alpha with all the APKs along with universal apk for now.

@IamMasterWayne
Copy link

"couldn't find DSO to load: libhermes.so "
React Native Version: 0.61.2
enableHermes: false
Still facing this issue

@fonov
Copy link

fonov commented Oct 7, 2019

received from crashlytics

Fatal Exception: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so
       at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java)
       at com.facebook.soloader.SoLoader.assertInitialized(SoLoader.java)
       at com.facebook.soloader.SoLoader.assertInitialized(SoLoader.java)
       at com.facebook.soloader.SoLoader.assertInitialized(SoLoader.java)
       at com.facebook.hermes.reactexecutor.HermesExecutor.<clinit>(HermesExecutor.java)
       at com.facebook.hermes.reactexecutor.HermesExecutorFactory.create(HermesExecutorFactory.java)
       at com.facebook.react.ReactInstanceManager$5.run(ReactInstanceManager.java)
       at java.lang.Thread.run(Thread.java:760)
Brand: Xiaomi
Model: Redmi 4X
Orientation: Portrait
RAM free: 1.49 GB
Disk free: 18.04 GB
Version: 7.1.2
Orientation: Portrait
Rooted: No

@Tim-Snow
Copy link

I'm seeing this crash in production with RN 0.61.2, using android bundles with hermes disabled, only on android 6 LGE devices.

@waqas19921
Copy link

I am also seeing this crash in production with RN 0.61.2, using android bundles with hermes disabled, on google nexus 5x

Fatal Exception: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so
       at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:738)
       at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:591)
       at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:529)
       at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:484)
       at com.facebook.hermes.reactexecutor.HermesExecutor.<clinit>(HermesExecutor.java:20)
       at com.facebook.hermes.reactexecutor.HermesExecutorFactory.create(HermesExecutorFactory.java:27)
       at com.facebook.react.ReactInstanceManager$5.run(ReactInstanceManager.java:952)
       at java.lang.Thread.run(Thread.java:818)
Brand: LGE
Model: Nexus 5X
Orientation: Portrait
RAM free: 3.12 GB
Disk free: 218.66 MB
Operating System
Version: 6.0.1
Orientation: Portrait
Rooted: Yes

@acoutts
Copy link

acoutts commented Nov 5, 2019

I was able to resolve it with a ./gradlew clean in the /android folder.

@joseguya
Copy link

joseguya commented Nov 7, 2019

I am also seeing this crash in production with RN 0.61.2, using android bundles with hermes disabled, on google nexus 5x

Fatal Exception: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so
       at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:738)
       at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:591)
       at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:529)
       at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:484)
       at com.facebook.hermes.reactexecutor.HermesExecutor.<clinit>(HermesExecutor.java:20)
       at com.facebook.hermes.reactexecutor.HermesExecutorFactory.create(HermesExecutorFactory.java:27)
       at com.facebook.react.ReactInstanceManager$5.run(ReactInstanceManager.java:952)
       at java.lang.Thread.run(Thread.java:818)
Brand: LGE
Model: Nexus 5X
Orientation: Portrait
RAM free: 3.12 GB
Disk free: 218.66 MB
Operating System
Version: 6.0.1
Orientation: Portrait
Rooted: Yes

I have the same issue with the same version of android.

My Crashlytics report:

Fatal Exception: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so
at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:738)
at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:591)
at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:529)
at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:484)
at com.facebook.hermes.reactexecutor.HermesExecutor.(HermesExecutor.java:20)
at com.facebook.hermes.reactexecutor.HermesExecutorFactory.create(HermesExecutorFactory.java:27)
at com.facebook.react.ReactInstanceManager$5.run(ReactInstanceManager.java:952)
at java.lang.Thread.run(Thread.java:818)

Device
Brand: LGE
Model: Nexus 5X
Orientation: Portrait
RAM free: 3.18 GB
Disk free: 495.84 MB
Operating System
Version: 6.0.1
Orientation: Portrait
Rooted: Yes
Crash
Date: Nov 5, 2019, 5:05:00 PM
App version: 2.3.2 (2320)

@olegdev
Copy link

olegdev commented Nov 7, 2019

Same issues on Android 6.0.1
Any solution?

@ammarRajabA
Copy link

Any workaround for this issue, I'm trying to run a beta release on Google play and this crash shows in Crashlytics

@Symous
Copy link

Symous commented Nov 13, 2019

I met the same issue and solved by this .

@MarinaAmy
Copy link

Hello,
I have the same worries, I've been going around in circles for several weeks because of hermes, I'm depressed: /

SoLoader: couldn't find DSO to load: libhermes-inspector.so caused by: dlopen failed: cannot locate symbol "_ZTIN8facebook6hermes8debugger13EventObserverE" referenced by "/data/data/com.test/lib-main/libhermes-inspector.so". .. result: 0
2020-11-03 11: 09: 53.512 16167-16270 / com.test E / SoLoader: couldn't find DSO to load: libhermes-executor-debug.so caused by: couldn't find DSO to load: libhermes-inspector .so caused by: dlopen failed: cannot locate symbol "_ZTIN8facebook6hermes8debugger13EventObserverE" referenced by "/data/data/com.test/lib-main/libhermes-inspector.so" ... result: 0 result: 0
2020-11-03 11: 09: 53.558 16167-16272 / com.test A / libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xffffffff in tid 16272 (mqt_js), pid 16167 (com.test )

Can somebody help me please ?

@namxg6626
Copy link

this problem occurred while I upgrading from 0.59.4 to 0.61.0

in android/app/build.gradle
I've added

project.ext.react = [
    //...
    enableHermes: true
]

def jscFlavor = 'org.webkit:android-jsc:+'
def enableHermes = project.ext.react.get("enableHermes", false);

and

dependencies {
    //...
    if (enableHermes) {
        def hermesPath = "../../node_modules/hermes-engine/android/";
        debugImplementation files(hermesPath + "hermes-debug.aar")
        releaseImplementation files(hermesPath + "hermes-release.aar")
    } else {
        implementation jscFlavor
    }
    //...
}

and it works :)
hope this solution is useful for someone
image

@Michaelvons
Copy link

This is because SOLoader is absent.

Ensure

implementation'com.facebook.soloader:soloader:0.9.0+'

is added under dependencies in android/app/build.gradlle

clean your build
cd android
./gradlew clean

Try bundling
./gradlew bundleRelease

Exit android folder
cd ../

Try running
npx react-native run-android --variant=release

@badredaha
Copy link

@Michaelvons nice one 👍 ... but did you know why ? i have this probleme just with the last Android sdk 11 (Level 30)

@MarinaAmy
Copy link

MarinaAmy commented Dec 3, 2020

Hello, could someone explain this error to me and tell me how to resolve it please?

DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0

I use the react-native-jitsi-meet library

Thank you

@tiggem1993
Copy link

Hello, could someone explain this error to me and tell me how to resolve it please?

DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0

I use the react-native-jitsi-meet library

Thank you

  1. Update packagingOptions as per mention in url:
    Android build starts failing after updating to RN 0.58  react-native-community/jsc-android-buildscripts#80

  2. Four types of JS Engine, choose as mention in this article:

  • JSC (v241213.1.0),
  • new JSC(v245459.0.0),
  • Hermes and
  • react-native-v8 (BEST ONE)

Article Link https://medium.com/walmartglobaltech/react-native-memory-profiling-jsc-vs-v8-vs-hermes-1626949a653b

@tvpranav
Copy link

@Michaelvons nice one 👍 ... but did you know why ? i have this probleme just with the last Android sdk 11 (Level 30)

Same issue for me with Level 30. Please let me know the solution.

@Desintegrator
Copy link

has same issue on android 4 when hermes is disabled

@napsta32
Copy link

I hope this get fixed soon. Android 6.0.1 is not working in the Play Store and I am unable to reproduce this error. Is there any emulator where I can check this is failing?

@Desintegrator
Copy link

@napsta32 at least you should be able to reproduce error at android 4.4 emulator. Not sure about android 6

@esutton
Copy link

esutton commented Feb 4, 2021

Any suggestion on how to reproduce for verification a given solution fixes this problem?

  • Google Play testing always reports fatal exception on Android 6.0.1, Nexus 5X devices
  • I cannot reproduce by copying APK to locally installed AVD:
    • Nexus 5X, Android 6.0 (Google APIs), API 23 )
    • Nexus 5X, Android 4.4 (Google APIs), API 19 )

Current Verification Procedure:

  1. Search StackOverflow, GitHub, etc. and make a suggested change to a build.gradle
  2. Upload AAB to Google Play
  3. Wait many hours until Google Play testing triggers a string of fatal exceptions and Firebase Crashlytics report emails notification to developer.
    Fatal Exception: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so
  4. Repeat at Step nil #1

I have tried enableHermes: false and various versions of resolution strategies for "com.facebook.soloader:soloader:0.9.0+ without success.

Why is it trying to load Hermes when enableHermes is set to false?

		"react-native": "0.60.6",
		"react-native-maps": "0.26.1",

@Prernabudh
Copy link

RN 0.62.2 here with hermes enabled. For me adding

configurations.all { resolutionStrategy { force "com.facebook.soloader:soloader:0.8.2" } }

to my top-level build.gradle and

implementation "com.facebook.soloader:soloader:0.8.2"

as well as

ndk { abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64" }

to my app-level build.gradle did the trick. I think that especially the latter made the difference as before both apk's and aab's showed an additional (fifth) lib folder armeabi which did not contain all lib files, in particular not libhermes.so.

Did this fix issue for you? I've been trying to find a solution for this problem. I too have RN version 62.2

@fatihyildizhan
Copy link

fatihyildizhan commented Mar 20, 2021

Is there any difference for hermes on/off, app-bundle or APK?

package.json

"react": "16.13.1",
"react-native": "^0.63.4",
"@react-native-firebase/app": "^11.1.2",
"@react-native-firebase/crashlytics": "^11.1.2",

Most crashes device

Nexus 5X
Android 6.0.1
Fatal Exception: java.lang.UnsatisfiedLinkError
couldn't find DSO to load: libhermes.so SoSource 0: com.facebook.soloader.ApkSoSource[root = /data/data/com
ext {
        buildToolsVersion = "29.0.2"
        minSdkVersion = 17
        compileSdkVersion = 29
        targetSdkVersion = 29
    }

@JmStefanAndroid
Copy link

any solutions?

@fatihyildizhan
Copy link

@JmStefanAndroid Add configurations.all section to android > build.gradle > allprojects . This solved the issue for me. Plus, I run cd android ./gradlew clean before each release.

allprojects {
    repositories {
        mavenLocal()
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url("$rootDir/../node_modules/react-native/android")
        }
        maven {
            // Android JSC is installed from npm
            url("$rootDir/../node_modules/jsc-android/dist")
        }

        configurations.all {
            resolutionStrategy {
                // use 0.9.0 to fix crash on Android 11
                force "com.facebook.soloader:soloader:0.9.0+"
			}
		}

        google()
        jcenter()
        maven { url 'https://www.jitpack.io' }
    }
}

@troZee
Copy link
Contributor

troZee commented Apr 13, 2021

In my case I needed to add hermes path for each android build type

    if (enableHermes) {
        def hermesPath = "../../node_modules/hermes-engine/android/";
        debugImplementation files(hermesPath + "hermes-debug.aar")
        releaseImplementation files(hermesPath + "hermes-release.aar")
        qaImplementation files(hermesPath + "hermes-release.aar")
        stageImplementation files(hermesPath + "hermes-release.aar")
        prodImplementation files(hermesPath + "hermes-release.aar")
    } else {
        implementation jscFlavor
    }

Probably it should be mentioned in the doc, that it needs to be added for each build type.

@juanamd
Copy link

juanamd commented May 30, 2021

I'm having this same issue with the following conditions:
-RN v0.63.4
-Hermes NOT enabled -> Using JSC
-Latest SoLoader (0.10.1)
-Using app bundle
-Run gradle clean before bundleRelease
-Issue only happens to certain devices on production (multiple Android versions and manufacturers)

After digging for a while I found this PR which mentions the "cause" of this issue when considering the previously mentioned conditions.
The PR author does a really good job explaining how this problem occurs.
In short, it's not related to Hermes at all, but the real error is being discarded and Hermes is being loaded instead as a fallback, which in turn fails since it's not enabled.
That PR solves the "error swallowing" problem so the real error can be propagated when the app crashes.
Please do merge that PR so we can figure out the real cause of this problem.

@rafalzawadzki
Copy link

In my case I needed to add hermes path for each android flavour

    if (enableHermes) {
        def hermesPath = "../../node_modules/hermes-engine/android/";
        debugImplementation files(hermesPath + "hermes-debug.aar")
        releaseImplementation files(hermesPath + "hermes-release.aar")
        qaImplementation files(hermesPath + "hermes-release.aar")
        stageImplementation files(hermesPath + "hermes-release.aar")
        prodImplementation files(hermesPath + "hermes-release.aar")
    } else {
        implementation jscFlavor
    }

Probably it should be mentioned in the doc, that it needs to be added for each flavour.

Thanks! This worked for us, had to add the staging flavor.

@Grewer
Copy link

Grewer commented Jul 3, 2021

I've tried all of the above, and the result is still a failure

@janet-rivas
Copy link

janet-rivas commented Aug 10, 2021

I'm using hermes and RN 0.64.2 and android flavors

this combination works for me

android > build.gradle > allprojects

allprojects {
    repositories {
        mavenLocal()
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url("$rootDir/../node_modules/react-native/android")
        }
        maven {
            // Android JSC is installed from npm
            url("$rootDir/../node_modules/jsc-android/dist")
        }

        configurations.all {
            resolutionStrategy {
                // use 0.9.0 to fix crash on Android 11
                force "com.facebook.soloader:soloader:0.9.0+"
			}
		}

        google()
        jcenter()
        maven { url 'https://www.jitpack.io' }
    }
}

  if (enableHermes) {
        def hermesPath = "../../node_modules/hermes-engine/android/";
        debugImplementation files(hermesPath + "hermes-debug.aar")
        releaseImplementation files(hermesPath + "hermes-release.aar")
        devImplementation files(hermesPath + "hermes-release.aar")
        prodImplementation files(hermesPath + "hermes-release.aar")
    } else {
        implementation jscFlavor
    }

then

cd android
./gradlew clean

and build again

facebook-github-bot pushed a commit that referenced this issue Oct 21, 2021
Summary:
Many have reported about the misguiding error `Fatal Exception: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so` even though they don't use Hermes (for example issues #26075 #25923).

**The current code does not handle errors correctly when loading JSC or Hermes in `ReactInstanceManagerBuilder`**.

**ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java:**
```java
try {
  return new HermesExecutorFactory();
} catch (UnsatisfiedLinkError hermesE) {
  // We never get here because "new HermesExecutorFactory()" does not throw an exception!
  hermesE.printStackTrace();
  throw jscE;
}
```

In Java, when an exception is thrown in static block, it will be RuntimeException and it can't be caught. For example the exception from `SoLoader.loadLibrary` can't be caught and it will crash the app.

**ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/HermesExecutor.java:**
```java
static {
  // Exception from this code block will be RuntimeException and it can't be caught!
  SoLoader.loadLibrary("hermes");
  try {
    SoLoader.loadLibrary("hermes-executor-debug");
    mode_ = "Debug";
  } catch (UnsatisfiedLinkError e) {
    SoLoader.loadLibrary("hermes-executor-release");
    mode_ = "Release";
  }
}
```

This PR fixes the code so that the original exception from failed JSC loading is not swallowed. It does not fix the original issue why JSC loading is failing with some devices, but it can be really helpful to know what the real error is. For example Firebase Crashlytics shows wrong stack trace with current code.

I'm sure that this fix could have been written better. It feels wrong to import `JSCExecutor` and `HermesExecutor` in `ReactInstanceManagerBuilder.java`. However, the main point of this PR is to give the idea what is wrong with the current code.

## Changelog

<!-- Help reviewers and the release process by writing your own changelog entry. For an example, see:
https://github.com/facebook/react-native/wiki/Changelog
-->

[Android] [Fixed] - Fix error handling when loading JSC or Hermes

Pull Request resolved: #30749

Test Plan:
* from this PR, modify  `ReactAndroid/src/main/java/com/facebook/react/jscexecutor/JSCExecutor.java` so that JSC loading will fail:
```java
// original
SoLoader.loadLibrary("jscexecutor");
// changed
SoLoader.loadLibrary("jscexecutor-does-not-exist");
```
* Run `rn-tester` app
* Check from Logcat that the app crashed with correct exception and stacktrace. It should **not** be `java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so`

Tested with Hermes

```
    SoLoader.loadLibrary("hermes-executor-test");
```
Got this one in logcat
```
09-24 20:12:39.552  6412  6455 E AndroidRuntime: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes-executor-test.so
```

Reviewed By: cortinico

Differential Revision: D30346032

Pulled By: sota000

fbshipit-source-id: 09b032a9e471af233b7ac90b571c311952ab6342
lunaleaps pushed a commit that referenced this issue Oct 25, 2021
Summary:
Many have reported about the misguiding error `Fatal Exception: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so` even though they don't use Hermes (for example issues #26075 #25923).

**The current code does not handle errors correctly when loading JSC or Hermes in `ReactInstanceManagerBuilder`**.

**ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java:**
```java
try {
  return new HermesExecutorFactory();
} catch (UnsatisfiedLinkError hermesE) {
  // We never get here because "new HermesExecutorFactory()" does not throw an exception!
  hermesE.printStackTrace();
  throw jscE;
}
```

In Java, when an exception is thrown in static block, it will be RuntimeException and it can't be caught. For example the exception from `SoLoader.loadLibrary` can't be caught and it will crash the app.

**ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/HermesExecutor.java:**
```java
static {
  // Exception from this code block will be RuntimeException and it can't be caught!
  SoLoader.loadLibrary("hermes");
  try {
    SoLoader.loadLibrary("hermes-executor-debug");
    mode_ = "Debug";
  } catch (UnsatisfiedLinkError e) {
    SoLoader.loadLibrary("hermes-executor-release");
    mode_ = "Release";
  }
}
```

This PR fixes the code so that the original exception from failed JSC loading is not swallowed. It does not fix the original issue why JSC loading is failing with some devices, but it can be really helpful to know what the real error is. For example Firebase Crashlytics shows wrong stack trace with current code.

I'm sure that this fix could have been written better. It feels wrong to import `JSCExecutor` and `HermesExecutor` in `ReactInstanceManagerBuilder.java`. However, the main point of this PR is to give the idea what is wrong with the current code.

## Changelog

<!-- Help reviewers and the release process by writing your own changelog entry. For an example, see:
https://github.com/facebook/react-native/wiki/Changelog
-->

[Android] [Fixed] - Fix error handling when loading JSC or Hermes

Pull Request resolved: #30749

Test Plan:
* from this PR, modify  `ReactAndroid/src/main/java/com/facebook/react/jscexecutor/JSCExecutor.java` so that JSC loading will fail:
```java
// original
SoLoader.loadLibrary("jscexecutor");
// changed
SoLoader.loadLibrary("jscexecutor-does-not-exist");
```
* Run `rn-tester` app
* Check from Logcat that the app crashed with correct exception and stacktrace. It should **not** be `java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so`

Tested with Hermes

```
    SoLoader.loadLibrary("hermes-executor-test");
```
Got this one in logcat
```
09-24 20:12:39.552  6412  6455 E AndroidRuntime: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes-executor-test.so
```

Reviewed By: cortinico

Differential Revision: D30346032

Pulled By: sota000

fbshipit-source-id: 09b032a9e471af233b7ac90b571c311952ab6342
@kubanac95
Copy link

In my case I needed to add hermes path for each android build type

    if (enableHermes) {
        def hermesPath = "../../node_modules/hermes-engine/android/";
        debugImplementation files(hermesPath + "hermes-debug.aar")
        releaseImplementation files(hermesPath + "hermes-release.aar")
        qaImplementation files(hermesPath + "hermes-release.aar")
        stageImplementation files(hermesPath + "hermes-release.aar")
        prodImplementation files(hermesPath + "hermes-release.aar")
    } else {
        implementation jscFlavor
    }

Probably it should be mentioned in the doc, that it needs to be added for each build type.

Thanks!

@gz1992
Copy link

gz1992 commented Aug 17, 2022

configurations.all {
resolutionStrategy {
force "com.facebook.soloader:soloader:0.8.2"
}
}

hey, for me worked when i commented also everything related to flipper :)

@cortinico
Copy link
Contributor

This and all the "couldn't find DSO to load" bugs have been fixed in React Native 0.71.

The issue on previous versions was a "too aggressive" clean-up logic in the react.gradle file. In 0.71 the clean-up logic has been rewritten to be more Android friendly and is now living inside the React Native Gradle Plugin.

I'm closing this, please update to 0.71 and open a new issue if the "couldn't find DSO to load" crash is still happening on 0.71+.

facebook-github-bot pushed a commit that referenced this issue Jan 31, 2023
Summary:
This sync includes the following changes:
- **[48b687fc9](facebook/react@48b687fc9 )**: [trusted types][www] Add enableTrustedTypesIntegration flag back in ([#26016](facebook/react#26016)) //<an onion>//
- **[9b1423cc0](facebook/react@9b1423cc0 )**: Revert "Hold host functions in var" ([#26079](facebook/react#26079)) //<Samuel Susla>//
- **[ce09ace9a](facebook/react@ce09ace9a )**: Improve Error Messages when Access Client References ([#26059](facebook/react#26059)) //<Sebastian Markbåge>//
- **[0652bdbd1](facebook/react@0652bdbd1 )**: Add flow types to Maps in ReactNativeViewConfigRegistry.js ([#26064](facebook/react#26064)) //<Samuel Susla>//
- **[ee8509801](facebook/react@ee8509801 )**: [cleanup] remove deletedTreeCleanUpLevel feature flag ([#25529](facebook/react#25529)) //<Jan Kassens>//
- **[0e31dd028](facebook/react@0e31dd028 )**: Remove findDOMNode www shim ([#25998](facebook/react#25998)) //<Jan Kassens>//
- **[379dd741e](facebook/react@379dd741e )**: [www] set enableTrustedTypesIntegration to false ([#25997](facebook/react#25997)) //<Jan Kassens>//
- **[555ece0cd](facebook/react@555ece0cd )**: Don't warn about concurrently rendering contexts if we finished rendering ([#22797](facebook/react#22797)) //<Sebastian Silbermann>//
- **[0fce6bb49](facebook/react@0fce6bb49 )**: [cleanup] remove feature flags warnAboutDefaultPropsOnFunctionComponents and warnAboutStringRefs ([#25980](facebook/react#25980)) //<Jan Kassens>//
- **[7002a6743](facebook/react@7002a6743 )**: [cleanup] remove unused values from ReactFeatureFlags.www-dynamic ([#25575](facebook/react#25575)) //<Jan Kassens>//
- **[a48e54f2b](facebook/react@a48e54f2b )**: [cleanup] remove old feature flag warnAboutDeprecatedLifecycles ([#25978](facebook/react#25978)) //<Jan Kassens>//
- **[0f4a83596](facebook/react@0f4a83596 )**: Remove duplicate JSResourceReferenceImpl mock ([#25976](facebook/react#25976)) //<Jan Kassens>//
- **[c49131669](facebook/react@c49131669 )**: Remove unused Flow suppressions ([#25977](facebook/react#25977)) //<Jan Kassens>//
- **[afe6521](facebook/react@afe6521e1 )**: Refactor: remove useless parameter ([#25923](facebook/react#25923)) //<Chris>//
- **[34464fb16](facebook/react@34464fb16 )**: Upgrade to Flow 0.196.3 ([#25974](facebook/react#25974)) //<Jan Kassens>//
- **[e2424f33b](facebook/react@e2424f33b )**: [flow] enable exact_empty_objects ([#25973](facebook/react#25973)) //<Jan Kassens>//
- **[0b4f44302](facebook/react@0b4f44302 )**: [flow] enable enforce_local_inference_annotations ([#25921](facebook/react#25921)) //<Jan Kassens>//
- **[0b974418c](facebook/react@0b974418c )**: [Fizz] Fork Fizz instruction set for inline script and external runtime ([#25862](facebook/react#25862)) //<mofeiZ>//
- **[5379b6123](facebook/react@5379b6123 )**: Batch sync, default and continuous lanes ([#25700](facebook/react#25700)) //<Tianyu Yao>//
- **[bbf4d2211](facebook/react@bbf4d2211 )**: Update import for babel-code-frame in build script ([#25963](facebook/react#25963)) //<Ming Ye>//
- **[b83baf63f](facebook/react@b83baf63f )**: Transform updates to support Flow this annotation syntax ([#25918](facebook/react#25918)) //<Jan Kassens>//
- **[c2d655207](facebook/react@c2d655207 )**: Unify `use` and `renderDidSuspendDelayIfPossible` implementations ([#25922](facebook/react#25922)) //<Andrew Clark>//
- **[48274a43a](facebook/react@48274a43a )**: Remove vestigial Suspense batching logic ([#25861](facebook/react#25861)) //<Andrew Clark>//
- **[de7d1c907](facebook/react@de7d1c907 )**: Add `fetchPriority` to `<img>` and `<link>` ([#25927](facebook/react#25927)) //<Steven>//
- **[81d4ee9ca](facebook/react@81d4ee9ca )**: reconciler docs: fix small typo - "mode" (instead of "node") ([#25863](facebook/react#25863)) //<satelllte>//
- **[5fcf1a4b4](facebook/react@5fcf1a4b4 )**: Bugfix: Synchronous ping during render phase sometimes unwinds the stack, leading to crash ([#25851](facebook/react#25851)) //<Andrew Clark>//
- **[2b1fb91a5](facebook/react@2b1fb91a5 )**: ESLint upgrade to use hermes-eslint ([#25915](facebook/react#25915)) //<Jan Kassens>//
- **[fabef7a6b](facebook/react@fabef7a6b )**: Resubmit Add HydrationSyncLane ([#25878](facebook/react#25878)) //<Tianyu Yao>//
- **[7efa9e597](facebook/react@7efa9e597 )**: Fix unwinding context during selective hydration ([#25876](facebook/react#25876)) //<Tianyu Yao>//
- **[84a0a171e](facebook/react@84a0a171e )**: Rename experimental useEvent to useEffectEvent ([#25881](facebook/react#25881)) //<Sebastian Markbåge>//
- **[4dda96a40](facebook/react@4dda96a40 )**: [react-www] remove forked bundle ([#25866](facebook/react#25866)) //<Jan Kassens>//
- **[9c09c1cd6](facebook/react@9c09c1cd6 )**: Revert "Fork ReactDOMSharedInternals for www ([#25791](facebook/react#25791))" ([#25864](facebook/react#25864)) //<lauren>//
- **[996e4c0d5](facebook/react@996e4c0d5 )**: Offscreen add attach ([#25603](facebook/react#25603)) //<Samuel Susla>//
- **[b14d7fa4b](facebook/react@b14d7fa4b )**: Add support for setNativeProps to Fabric ([#25737](facebook/react#25737)) //<Samuel Susla>//
- **[819687279](facebook/react@819687279 )**: [Float] Fix typo in ReactDOMResourceValidation.js ([#25798](facebook/react#25798)) //<Ikko Ashimine>//
- **[5dfc485f6](facebook/react@5dfc485f6 )**: fix tests for when float is off ([#25839](facebook/react#25839)) //<Josh Story>//
- **[bfcbf3306](facebook/react@bfcbf3306 )**: toString children of title ([#25838](facebook/react#25838)) //<Sebastian Markbåge>//
- **[d4bc16a7d](facebook/react@d4bc16a7d )**: Revert "[react-www] remove forked bundle" ([#25837](facebook/react#25837)) //<Ricky>//
- **[d69b2cf82](facebook/react@d69b2cf82 )**: [bug fix] revert values in ReactFiberFlags to keep consistency for devtools ([#25832](facebook/react#25832)) //<Mengdi Chen>//
- **[645ae2686](facebook/react@645ae2686 )**: [react-www] remove forked bundle ([#25831](facebook/react#25831)) //<Jan Kassens>//
- **[d807eb52c](facebook/react@d807eb52c )**: Revert recent hydration changes ([#25812](facebook/react#25812)) //<Andrew Clark>//
- **[2ccfa657d](facebook/react@2ccfa657d )**: Fork ReactDOMSharedInternals for www ([#25791](facebook/react#25791)) //<lauren>//
- **[f0534ae94](facebook/react@f0534ae94 )**: Avoid replaying SelectiveHydrationException in dev ([#25754](facebook/react#25754)) //<Tianyu Yao>//
- **[7fab379d8](facebook/react@7fab379d8 )**: fix link to ReactDOMHostconfig in reconciler docs ([#25788](facebook/react#25788)) //<Dmitry>//
- **[500c8aa08](facebook/react@500c8aa08 )**: Add component name to StrictMode error message ([#25718](facebook/react#25718)) //<Samuel Susla>//
- **[353c30252](facebook/react@353c30252 )**: Hold host functions in var ([#25741](facebook/react#25741)) //<Samuel Susla>//

Changelog:
[General][Changed] - React Native sync for revisions 17f6912...48b687f

jest_e2e[run_all_tests]

Reviewed By: rubennorte

Differential Revision: D42855483

fbshipit-source-id: c244a595bb2d490a23b333c1b16d04a459ec94fc
OlimpiaZurek pushed a commit to OlimpiaZurek/react-native that referenced this issue May 22, 2023
Summary:
This sync includes the following changes:
- **[48b687fc9](facebook/react@48b687fc9 )**: [trusted types][www] Add enableTrustedTypesIntegration flag back in ([facebook#26016](facebook/react#26016)) //<an onion>//
- **[9b1423cc0](facebook/react@9b1423cc0 )**: Revert "Hold host functions in var" ([facebook#26079](facebook/react#26079)) //<Samuel Susla>//
- **[ce09ace9a](facebook/react@ce09ace9a )**: Improve Error Messages when Access Client References ([facebook#26059](facebook/react#26059)) //<Sebastian Markbåge>//
- **[0652bdbd1](facebook/react@0652bdbd1 )**: Add flow types to Maps in ReactNativeViewConfigRegistry.js ([facebook#26064](facebook/react#26064)) //<Samuel Susla>//
- **[ee8509801](facebook/react@ee8509801 )**: [cleanup] remove deletedTreeCleanUpLevel feature flag ([facebook#25529](facebook/react#25529)) //<Jan Kassens>//
- **[0e31dd028](facebook/react@0e31dd028 )**: Remove findDOMNode www shim ([facebook#25998](facebook/react#25998)) //<Jan Kassens>//
- **[379dd741e](facebook/react@379dd741e )**: [www] set enableTrustedTypesIntegration to false ([facebook#25997](facebook/react#25997)) //<Jan Kassens>//
- **[555ece0cd](facebook/react@555ece0cd )**: Don't warn about concurrently rendering contexts if we finished rendering ([facebook#22797](facebook/react#22797)) //<Sebastian Silbermann>//
- **[0fce6bb49](facebook/react@0fce6bb49 )**: [cleanup] remove feature flags warnAboutDefaultPropsOnFunctionComponents and warnAboutStringRefs ([facebook#25980](facebook/react#25980)) //<Jan Kassens>//
- **[7002a6743](facebook/react@7002a6743 )**: [cleanup] remove unused values from ReactFeatureFlags.www-dynamic ([facebook#25575](facebook/react#25575)) //<Jan Kassens>//
- **[a48e54f2b](facebook/react@a48e54f2b )**: [cleanup] remove old feature flag warnAboutDeprecatedLifecycles ([facebook#25978](facebook/react#25978)) //<Jan Kassens>//
- **[0f4a83596](facebook/react@0f4a83596 )**: Remove duplicate JSResourceReferenceImpl mock ([facebook#25976](facebook/react#25976)) //<Jan Kassens>//
- **[c49131669](facebook/react@c49131669 )**: Remove unused Flow suppressions ([facebook#25977](facebook/react#25977)) //<Jan Kassens>//
- **[afe6521](facebook/react@afe6521e1 )**: Refactor: remove useless parameter ([facebook#25923](facebook/react#25923)) //<Chris>//
- **[34464fb16](facebook/react@34464fb16 )**: Upgrade to Flow 0.196.3 ([facebook#25974](facebook/react#25974)) //<Jan Kassens>//
- **[e2424f33b](facebook/react@e2424f33b )**: [flow] enable exact_empty_objects ([facebook#25973](facebook/react#25973)) //<Jan Kassens>//
- **[0b4f44302](facebook/react@0b4f44302 )**: [flow] enable enforce_local_inference_annotations ([facebook#25921](facebook/react#25921)) //<Jan Kassens>//
- **[0b974418c](facebook/react@0b974418c )**: [Fizz] Fork Fizz instruction set for inline script and external runtime ([facebook#25862](facebook/react#25862)) //<mofeiZ>//
- **[5379b6123](facebook/react@5379b6123 )**: Batch sync, default and continuous lanes ([facebook#25700](facebook/react#25700)) //<Tianyu Yao>//
- **[bbf4d2211](facebook/react@bbf4d2211 )**: Update import for babel-code-frame in build script ([facebook#25963](facebook/react#25963)) //<Ming Ye>//
- **[b83baf63f](facebook/react@b83baf63f )**: Transform updates to support Flow this annotation syntax ([facebook#25918](facebook/react#25918)) //<Jan Kassens>//
- **[c2d655207](facebook/react@c2d655207 )**: Unify `use` and `renderDidSuspendDelayIfPossible` implementations ([facebook#25922](facebook/react#25922)) //<Andrew Clark>//
- **[48274a43a](facebook/react@48274a43a )**: Remove vestigial Suspense batching logic ([facebook#25861](facebook/react#25861)) //<Andrew Clark>//
- **[de7d1c907](facebook/react@de7d1c907 )**: Add `fetchPriority` to `<img>` and `<link>` ([facebook#25927](facebook/react#25927)) //<Steven>//
- **[81d4ee9ca](facebook/react@81d4ee9ca )**: reconciler docs: fix small typo - "mode" (instead of "node") ([facebook#25863](facebook/react#25863)) //<satelllte>//
- **[5fcf1a4b4](facebook/react@5fcf1a4b4 )**: Bugfix: Synchronous ping during render phase sometimes unwinds the stack, leading to crash ([facebook#25851](facebook/react#25851)) //<Andrew Clark>//
- **[2b1fb91a5](facebook/react@2b1fb91a5 )**: ESLint upgrade to use hermes-eslint ([facebook#25915](facebook/react#25915)) //<Jan Kassens>//
- **[fabef7a6b](facebook/react@fabef7a6b )**: Resubmit Add HydrationSyncLane ([facebook#25878](facebook/react#25878)) //<Tianyu Yao>//
- **[7efa9e597](facebook/react@7efa9e597 )**: Fix unwinding context during selective hydration ([facebook#25876](facebook/react#25876)) //<Tianyu Yao>//
- **[84a0a171e](facebook/react@84a0a171e )**: Rename experimental useEvent to useEffectEvent ([facebook#25881](facebook/react#25881)) //<Sebastian Markbåge>//
- **[4dda96a40](facebook/react@4dda96a40 )**: [react-www] remove forked bundle ([facebook#25866](facebook/react#25866)) //<Jan Kassens>//
- **[9c09c1cd6](facebook/react@9c09c1cd6 )**: Revert "Fork ReactDOMSharedInternals for www ([facebook#25791](facebook/react#25791))" ([facebook#25864](facebook/react#25864)) //<lauren>//
- **[996e4c0d5](facebook/react@996e4c0d5 )**: Offscreen add attach ([facebook#25603](facebook/react#25603)) //<Samuel Susla>//
- **[b14d7fa4b](facebook/react@b14d7fa4b )**: Add support for setNativeProps to Fabric ([facebook#25737](facebook/react#25737)) //<Samuel Susla>//
- **[819687279](facebook/react@819687279 )**: [Float] Fix typo in ReactDOMResourceValidation.js ([facebook#25798](facebook/react#25798)) //<Ikko Ashimine>//
- **[5dfc485f6](facebook/react@5dfc485f6 )**: fix tests for when float is off ([facebook#25839](facebook/react#25839)) //<Josh Story>//
- **[bfcbf3306](facebook/react@bfcbf3306 )**: toString children of title ([facebook#25838](facebook/react#25838)) //<Sebastian Markbåge>//
- **[d4bc16a7d](facebook/react@d4bc16a7d )**: Revert "[react-www] remove forked bundle" ([facebook#25837](facebook/react#25837)) //<Ricky>//
- **[d69b2cf82](facebook/react@d69b2cf82 )**: [bug fix] revert values in ReactFiberFlags to keep consistency for devtools ([facebook#25832](facebook/react#25832)) //<Mengdi Chen>//
- **[645ae2686](facebook/react@645ae2686 )**: [react-www] remove forked bundle ([facebook#25831](facebook/react#25831)) //<Jan Kassens>//
- **[d807eb52c](facebook/react@d807eb52c )**: Revert recent hydration changes ([facebook#25812](facebook/react#25812)) //<Andrew Clark>//
- **[2ccfa657d](facebook/react@2ccfa657d )**: Fork ReactDOMSharedInternals for www ([facebook#25791](facebook/react#25791)) //<lauren>//
- **[f0534ae94](facebook/react@f0534ae94 )**: Avoid replaying SelectiveHydrationException in dev ([facebook#25754](facebook/react#25754)) //<Tianyu Yao>//
- **[7fab379d8](facebook/react@7fab379d8 )**: fix link to ReactDOMHostconfig in reconciler docs ([facebook#25788](facebook/react#25788)) //<Dmitry>//
- **[500c8aa08](facebook/react@500c8aa08 )**: Add component name to StrictMode error message ([facebook#25718](facebook/react#25718)) //<Samuel Susla>//
- **[353c30252](facebook/react@353c30252 )**: Hold host functions in var ([facebook#25741](facebook/react#25741)) //<Samuel Susla>//

Changelog:
[General][Changed] - React Native sync for revisions 17f6912...48b687f

jest_e2e[run_all_tests]

Reviewed By: rubennorte

Differential Revision: D42855483

fbshipit-source-id: c244a595bb2d490a23b333c1b16d04a459ec94fc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug Platform: Android Android applications. Tech: Hermes Hermes Engine: https://hermesengine.dev/
Projects
None yet
Development

No branches or pull requests