react-native icon indicating copy to clipboard operation
react-native copied to clipboard

PRODUCTION CRASH: Fatal Exception: java.lang.UnsatisfiedLinkError couldn't find DSO to load: libhermes.so

Open aprilmintacpineda opened this issue 4 years ago • 8 comments

Please provide all the information requested. Issues that do not follow this format are likely to stall.

Description

Please provide a clear and concise description of what the bug is. Include screenshots if needed. Please test using the latest React Native release to make sure your issue has not already been fixed: https://reactnative.dev/docs/upgrading.html

React Native version:

Run react-native info in your terminal and copy the results here.

System:
    OS: macOS 11.2.1
    CPU: (8) x64 Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz
    Memory: 401.39 MB / 16.00 GB
    Shell: 5.8 - /bin/zsh
  Binaries:
    Node: 15.10.0 - /var/folders/zg/f6_98ss10lj5b841clyhsxlh0000gn/T/yarn--1618131301327-0.47985465111075376/node
    Yarn: 1.22.10 - /var/folders/zg/f6_98ss10lj5b841clyhsxlh0000gn/T/yarn--1618131301327-0.47985465111075376/yarn
    npm: 7.5.3 - ~/.nvm/versions/node/v15.10.0/bin/npm
    Watchman: 4.9.0 - /usr/local/bin/watchman
  Managers:
    CocoaPods: 1.10.1 - /usr/local/bin/pod
  SDKs:
    iOS SDK:
      Platforms: iOS 14.4, DriverKit 20.2, macOS 11.1, tvOS 14.3, watchOS 7.2
    Android SDK:
      API Levels: 24, 26, 28, 29, 30
      Build Tools: 28.0.3, 29.0.2, 29.0.3, 30.0.2
      System Images: android-24 | Google Play Intel x86 Atom, android-26 | Google APIs Intel x86 Atom, android-28 | Google Play Intel x86 Atom, android-29 | Google Play Intel x86 Atom, android-30 | Google APIs Intel x86 Atom, android-30 | Google Play Intel x86 Atom
      Android NDK: Not Found
  IDEs:
    Android Studio: 4.1 AI-201.8743.12.41.6953283
    Xcode: 12.4/12D4e - /usr/bin/xcodebuild
  Languages:
    Java: 1.8.0_282 - /usr/bin/javac
    Python: 2.7.16 - /usr/bin/python
  npmPackages:
    @react-native-community/cli: Not Found
    react: 17.0.1 => 17.0.1
    react-native: 0.63.4 => 0.63.4
    react-native-macos: Not Found
  npmGlobalPackages:
    *react-native*: Not Found

Steps To Reproduce

I am unsure, it seems to be an intermittent crash that doesn't really affect every user. I can only see this in google firebase crashlytics report, so far there have been 8 crashes of the same error on various android devices.

I have hermes enabled.

This is happening on my app, Entrepic http://entrepic.com/, and only on Android so far.

Here's the complete error message:

Fatal Exception: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so
	SoSource 0: com.facebook.soloader.ApkSoSource[root = /data/data/com.aprmp.projpronetplataa/lib-main flags = 1]
	SoSource 1: com.facebook.soloader.DirectorySoSource[root = /data/app/com.aprmp.projpronetplataa-Stx0SDtLuXCZ6kmaa1x9Jg==/lib/arm64 flags = 0]
	SoSource 2: com.facebook.soloader.DirectorySoSource[root = /vendor/lib64 flags = 2]
	SoSource 3: com.facebook.soloader.DirectorySoSource[root = /system/lib64 flags = 2]
	Native lib dir: /data/app/com.aprmp.projpronetplataa-Stx0SDtLuXCZ6kmaa1x9Jg==/lib/arm64
 result: 0
       at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:896)
       at com.facebook.soloader.SoLoader.loadLibraryBySoNameImpl(SoLoader.java:725)
       at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:649)
       at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:629)
       at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:577)
       at com.facebook.hermes.reactexecutor.HermesExecutor.<clinit>(HermesExecutor.java:20)
       at com.facebook.hermes.reactexecutor.HermesExecutorFactory.create(HermesExecutorFactory.java:29)
       at com.facebook.react.ReactInstanceManager$5.run(ReactInstanceManager.java:1017)
       at java.lang.Thread.run(Thread.java:764)

stack trace related to com.google.firebase.crashlytics.startup1

com.google.firebase.crashlytics.startup1
       at com.android.org.conscrypt.NativeCrypto.SSL_read(NativeCrypto.java)
       at com.android.org.conscrypt.SslWrapper.read(SslWrapper.java:384)
       at com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLInputStream.read(ConscryptFileDescriptorSocket.java:541)
       at com.android.okhttp.okio.Okio$2.read(Okio.java:136)
       at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:211)
       at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:306)
       at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:300)
       at com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:196)
       at com.android.okhttp.internal.http.Http1xStream.readResponse(Http1xStream.java:186)
       at com.android.okhttp.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:127)
       at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:737)
       at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:609)
       at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:471)
       at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
       at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:538)
       at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105)
       at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode()
       at com.google.firebase.crashlytics.internal.network.HttpGetRequest.execute(HttpGetRequest.java:77)
       at com.google.firebase.crashlytics.internal.settings.network.DefaultSettingsSpiCall.invoke(DefaultSettingsSpiCall.java:113)
       at com.google.firebase.crashlytics.internal.settings.SettingsController$1.then(SettingsController.java:199)
       at com.google.firebase.crashlytics.internal.settings.SettingsController$1.then(SettingsController.java:192)
       at com.google.android.gms.tasks.zzp.run(:2)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
       at com.google.firebase.crashlytics.internal.common.ExecutorUtils$1$1.onRun(ExecutorUtils.java:64)
       at com.google.firebase.crashlytics.internal.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:27)
       at java.lang.Thread.run(Thread.java:764)

I don't think android version has anything to do with this, I can see this happened to variety of devices:

  • 1.0.17 (30) Android 4.1.2, LG K4 LTE, Apr 10, 2021, 4:55:13 PM
  • 1.0.17 (30) Android 9, Pixel 3 XL, Apr 10, 2021, 2:44:42 PM, seems it happened 7 times on this device,
  • 1.0.17 (30) Android 11, Pixel 3a, Apr 10, 2021, 12:05:36 AM, seems it happened 3 times on this device

For the meantime, what I tried is yarn add hermes-engine jsc-android, maybe that will change something? I'll release this as soon as I can. So far, I have not experienced this happening on local development.

Expected Results

This crash should not happen

Snack, code example, screenshot, or link to a repository:

Please provide a Snack (https://snack.expo.io/), a link to a repository on GitHub, or provide a minimal code example that reproduces the problem. You may provide a screenshot of the application if you think it is relevant to your bug report. Here are some tips for providing a minimal example: https://stackoverflow.com/help/mcve

aprilmintacpineda avatar Apr 11 '21 09:04 aprilmintacpineda

Also LGE Nexus 5X suffers same issue. But other devices are going well. I turned on hermes in Android.

mym0404 avatar Jul 15 '21 06:07 mym0404

+1 in:

  • Motorola with android 9
  • LGE Nexus 5X with android 8
  • Google Pixel 3 with android 10 & 11

felansu avatar Dec 09 '21 10:12 felansu

Firebase Crashlytics just reported this error to me again, a different app this time. this is happening in production, seems already 2 users experienced this:

Here's the stack trace

Fatal Exception: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libjscexecutor.so
	SoSource 0: com.facebook.soloader.ApkSoSource[root = /data/data/com.myapp/lib-main flags = 1]
	SoSource 1: com.facebook.soloader.DirectorySoSource[root = /data/app/~~mZYDiDBOpKEAJvJTZGzklw==/com.myapp-5zgc0VZZbzZ6MpBkomzrew==/lib/arm64 flags = 0]
	SoSource 2: com.facebook.soloader.DirectorySoSource[root = /vendor/lib64 flags = 2]
	SoSource 3: com.facebook.soloader.DirectorySoSource[root = /system/lib64 flags = 2]
	Native lib dir: /data/app/~~mZYDiDBOpKEAJvJTZGzklw==/com.myapp-5zgc0VZZbzZ6MpBkomzrew==/lib/arm64
 result: 0
       at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:918)
       at com.facebook.soloader.SoLoader.loadLibraryBySoNameImpl(SoLoader.java:740)
       at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:654)
       at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:634)
       at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:582)
       at com.facebook.react.jscexecutor.JSCExecutor.loadLibrary(JSCExecutor.java:24)
       at com.facebook.react.jscexecutor.JSCExecutor.<clinit>(JSCExecutor.java:20)
       at com.facebook.react.jscexecutor.JSCExecutor.loadLibrary()
       at com.facebook.react.ReactInstanceManagerBuilder.getDefaultJSExecutorFactory(ReactInstanceManagerBuilder.java:352)
       at com.facebook.react.ReactInstanceManagerBuilder.build(ReactInstanceManagerBuilder.java:319)
       at com.facebook.react.ReactNativeHost.createReactInstanceManager(ReactNativeHost.java:95)
       at expo.modules.ReactNativeHostWrapper.createReactInstanceManager(ReactNativeHostWrapper.kt:33)
       at com.facebook.react.ReactNativeHost.getReactInstanceManager(ReactNativeHost.java:42)
       at com.myapp.MainApplication.onCreate(MainApplication.java:63)
       at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1192)
       at android.app.ActivityThread.handleMakeApplication(ActivityThread.java:7507)
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7446)
       at android.app.ActivityThread.access$1400(ActivityThread.java:301)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2148)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:246)
       at android.app.ActivityThread.main(ActivityThread.java:8512)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1139)

Device: Brand:samsung Model:Galaxy A21s Orientation: Portrait RAM free: 2.41 GB Disk free: 43 GB

Operating system Version:Android 11 Orientation: Portrait Rooted:No

Crash Date:29 Mar 2022, 22:13:08 App version:0.1.3 (18)

Possibly related issues:

  • https://github.com/facebook/react-native/issues/32928

aprilmintacpineda avatar Mar 30 '22 08:03 aprilmintacpineda

if you have minSdkVersion > 21, you could try to add this to app/build.gradle

android{
...
packagingOptions {
     jniLibs.useLegacyPackaging = true
}
...
}

gdogaru avatar May 12 '22 10:05 gdogaru

@aprilmintacpineda see this issue https://github.com/facebook/SoLoader/commit/25a2d47a98d907731feaa23faa613fdc647ebc56

lfoliveir4 avatar Jun 22 '22 21:06 lfoliveir4

I have hermes disabled and using the jsc engine. Facing a similar crash on One Plus 8 pro (only seen on this device). Not sure why its trying to load hermes even when its disabled on production.

Fatal Exception: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so
	SoSource 0: com.facebook.soloader.ApkSoSource[root = /data/data/.../lib-main flags = 1]
        ...
	SoSource 17: com.facebook.soloader.ApkSoSource[root = /data/data/.../lib-16 flags = 1]
	SoSource 18: com.facebook.s<truncated: 8213 chars>
       at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:896)
       at com.facebook.soloader.SoLoader.loadLibraryBySoNameImpl(SoLoader.java:725)
       at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:649)
       at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:629)
       at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:577)
       at com.facebook.hermes.reactexecutor.HermesExecutor.<clinit>(HermesExecutor.java:20)
       at com.facebook.hermes.reactexecutor.HermesExecutorFactory.create(HermesExecutorFactory.java:29)
       at com.facebook.react.ReactInstanceManager$5.run(ReactInstanceManager.java:1024)
       at java.lang.Thread.run(Thread.java:923)

sarthakpranesh avatar Sep 23 '22 10:09 sarthakpranesh

@sarthakpranesh any updates ?

Developeranees avatar Jan 11 '23 09:01 Developeranees

Hey @Developeranees and others My team has finally shifted to the latest version of React Native (v0.70.6) and we successfully completed the update process. We are now also running Hermes as its default in the latest version. We haven't seen this issue after updating to the latest version of RN, hope that continues ✌🏽

sarthakpranesh avatar Jan 12 '23 13:01 sarthakpranesh

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+.

cortinico avatar Jan 19 '23 10:01 cortinico

Hi @cortinico I cannot upgrade to RN 0.71 because one crucial 3rd-party package is not compatible with it. It'd be great if there were any hot fix for earlier versions (I'm using RN 0.70.6).

fleuverouge avatar Jan 25 '23 14:01 fleuverouge

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 Plu

Sadly this can't easily be backported. If you're able to provide a reproducer for 0.70.6, pleas e share it in a separate issue.

cortinico avatar Jan 25 '23 15:01 cortinico

@cortinico Hi. I've upgraded RN to 0.71.1 but I still got this kind of crash on OnePlus8Pro:

Fatal Exception: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so caused by: couldn't find DSO to load: libjsi.so caused by: couldn't find DSO to load: libfolly_runtime.so caused by: couldn't find DSO to load: libglog.so caused by: couldn't find DSO to load: libc++_shared.so caused by: dlopen failed: "/data/data/watch.panpan/lib-3/libc++_shared.so" is for EM_AARCH64 (183) instead of EM_X86_64 (62) result: 0 result: 0 result: 0 result: 0 result: 0
       at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:1127)
       at com.facebook.soloader.SoLoader.loadLibraryBySoNameImpl(SoLoader.java:943)
       at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:855)
       at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:802)
       at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:772)
       at com.facebook.hermes.reactexecutor.HermesExecutor.loadLibrary(HermesExecutor.java:26)
       at com.facebook.hermes.reactexecutor.HermesExecutor.<clinit>(HermesExecutor.java:20)
       at com.facebook.hermes.reactexecutor.HermesExecutor.loadLibrary(HermesExecutor.java:24)
       at com.facebook.react.ReactInstanceManagerBuilder.getDefaultJSExecutorFactory(ReactInstanceManagerBuilder.java:369)
       at com.facebook.react.ReactInstanceManagerBuilder.build(ReactInstanceManagerBuilder.java:316)
       at com.facebook.react.ReactNativeHost.createReactInstanceManager(ReactNativeHost.java:94)
       at com.facebook.react.ReactNativeHost.getReactInstanceManager(ReactNativeHost.java:41)
       at watch.panpan.MainApplication.onCreate(MainApplication.java:60)
       at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1194)
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6756)
       at android.app.ActivityThread.access$1300(ActivityThread.java:238)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1914)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:223)
       at android.app.ActivityThread.main(ActivityThread.java:7701)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

gezichenshan avatar Feb 09 '23 07:02 gezichenshan

@cortinico Hi. I've upgraded RN to 0.71.1 but I still got this kind of crash on OnePlus8Pro:

This seems related to https://github.com/facebook/SoLoader/issues/59 Please open a separate issue, with a reproducer and specifically on which device this is happening.

cortinico avatar Feb 09 '23 11:02 cortinico