SoLoader: SoLoader causes instrumented tests to crash
Bug Report
SoLoader looks for libfbjni in the .test path during instrumented tests. I am not sure how it makes that decision, since package name still reports without .test. Since the tests use a debug variant, I don’t see a way to prevent Flipper loading during instrumented tests.
java.lang.UnsatisfiedLinkError: dlopen failed: library "/data/app/com.appscoop.takingroot.staging.test-1Dt01Y4N51I9qkS3sSAU3w==/base.apk!/lib/x86/libfbjni.so" not found
at java.lang.Runtime.load0(Runtime.java:938)
at java.lang.System.load(System.java:1631)
at com.facebook.soloader.SoLoader$1.load(SoLoader.java:529)
at com.facebook.soloader.DirectApkSoSource.loadLibrary(DirectApkSoSource.java:77)
at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:1038)
at com.facebook.soloader.SoLoader.loadLibraryBySoNameImpl(SoLoader.java:914)
at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:826)
at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:773)
at com.facebook.soloader.NativeLoaderToSoLoaderDelegate.loadLibrary(NativeLoaderToSoLoaderDelegate.java:29)
at com.facebook.soloader.nativeloader.NativeLoader.loadLibrary(NativeLoader.java:51)
at com.facebook.soloader.nativeloader.NativeLoader.loadLibrary(NativeLoader.java:30)
at com.facebook.jni.HybridData.<clinit>(HybridData.java:34)
at com.facebook.flipper.android.FlipperThread.run(FlipperThread.java:25)
libfbjni.so not found on /vendor/lib
libfbjni.so not found on /system/lib
couldn't find DSO to load: libfbjni.so
SoSource 0: com.facebook.soloader.DirectorySoSource[root = /data/app/com.appscoop.takingroot.staging-_zWOlH2oMX4dVzDGOq6zXw==/lib/x86 flags = 0]
SoSource 1: com.facebook.soloader.DirectApkSoSource[root = /data/app/com.appscoop.takingroot.staging.test-1Dt01Y4N51I9qkS3sSAU3w==/base.apk!/lib/x86]
SoSource 2: com.facebook.soloader.DirectorySoSource[root = /vendor/lib flags = 2]
SoSource 3: com.facebook.soloader.DirectorySoSource[root = /system/lib flags = 2]
Native lib dir: /data/app/com.appscoop.takingroot.staging-_zWOlH2oMX4dVzDGOq6zXw==/lib/x86
result: 0
FATAL EXCEPTION: FlipperEventBaseThread
Process: com.appscoop.takingroot.staging, PID: 5862
java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libfbjni.so
SoSource 0: com.facebook.soloader.DirectorySoSource[root = /data/app/com.appscoop.takingroot.staging-_zWOlH2oMX4dVzDGOq6zXw==/lib/x86 flags = 0]
SoSource 1: com.facebook.soloader.DirectApkSoSource[root = /data/app/com.appscoop.takingroot.staging.test-1Dt01Y4N51I9qkS3sSAU3w==/base.apk!/lib/x86]
SoSource 2: com.facebook.soloader.DirectorySoSource[root = /vendor/lib flags = 2]
SoSource 3: com.facebook.soloader.DirectorySoSource[root = /system/lib flags = 2]
Native lib dir: /data/app/com.appscoop.takingroot.staging-_zWOlH2oMX4dVzDGOq6zXw==/lib/x86
result: 0
at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:1098)
at com.facebook.soloader.SoLoader.loadLibraryBySoNameImpl(SoLoader.java:914)
at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:826)
at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:773)
at com.facebook.soloader.NativeLoaderToSoLoaderDelegate.loadLibrary(NativeLoaderToSoLoaderDelegate.java:29)
at com.facebook.soloader.nativeloader.NativeLoader.loadLibrary(NativeLoader.java:51)
at com.facebook.soloader.nativeloader.NativeLoader.loadLibrary(NativeLoader.java:30)
at com.facebook.jni.HybridData.<clinit>(HybridData.java:34)
at com.facebook.flipper.android.FlipperThread.run(FlipperThread.java:25)
FATAL EXCEPTION: FlipperConnectionThread
Process: com.appscoop.takingroot.staging, PID: 5862
java.lang.NoClassDefFoundError: <clinit> failed for class com.facebook.flipper.android.EventBase; see exception in other thread
at com.facebook.flipper.android.FlipperThread.run(FlipperThread.java:25)
To Reproduce
Run an instrumented test
Environment
Android API 31 debugImplementation ‘com.facebook.flipper🐬0.137.0’ debugImplementation ‘com.facebook.soloader:soloader:0.10.3’ releaseImplementation ‘com.facebook.flipper:flipper-noop:0.137.0’
About this issue
- Original URL
- State: closed
- Created 2 years ago
- Comments: 15 (2 by maintainers)
Commits related to this issue
- deps(android): bump soloader to 0.10.4 soloader 0.10.3 will apparently cause crashes in instrumented tests, 0.10.4 appears to fix these crashes Related: https://github.com/facebook/SoLoader/issues... — committed to facebook/react-native by mikehardy 2 years ago
- deps(android): bump soloader to 0.10.4 (#34213) Summary: soloader 0.10.3 will apparently cause crashes in instrumented tests, 0.10.4 appears to fix these crashes Related: https://github.com/facebook... — committed to facebook/react-native by mikehardy 2 years ago
- deps(android): bump soloader to 0.10.4 (#34213) Summary: soloader 0.10.3 will apparently cause crashes in instrumented tests, 0.10.4 appears to fix these crashes Related: https://github.com/facebook... — committed to facebook/react-native by mikehardy 2 years ago
Yes, I can see a commit that explains why this happens as well as the applied fix: https://github.com/facebook/SoLoader/commit/90084463c550b537501524f00153575d010b2f21
Hi,
I encountered the same issue while running Detox (instrumented tests) on a React Native 0.68 project with Hermes enabled. AndroidJUnitRunner would instantly crash at startup.
I was able to solve it by downgrading SoLoader to v0.9.0+ using resolutionStrategy.
Any idea why this is happening?
EDIT: I also tried various 0.10.x versions v0.10.1 is working v0.10.2 is crashing v0.10.3 is crashing
Looks like something broke in v0.10.2
Co-experiencing this issue. @CiaraSouthgateFT are you able to clarify how that solution you posted helps?
Issue seems to be gone for us after updating the SoLoader dependency to 10.0.4: https://github.com/facebook/SoLoader/releases/tag/v0.10.4