I just set up a brand new react-native project (0.62). Running a fresh debug build works just fine.
I set up signing following the documentation: https://reactnative.dev/docs/signed-apk-android, and ensured that I'm using the following ABIs: "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
.
To test out a release build, I run the following: npx react-native run-android --variant release
After running the above command, the app attempts to start and crashes immediately with the following stack trace:
--------- beginning of crash
2020-05-01 09:34:26.707 19961-19976/? E/AndroidRuntime: FATAL EXCEPTION: create_react_context
Process: <BUNDLE_ID>, PID: 19961
java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so
at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:789)
at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:639)
at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:577)
at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:525)
Sure enough, when I unpackage the APK there is no libhermes.so in /lib/x86_64
(I am testing at the moment on pixel 2 API 28).
I'm not sure why hermes wasn't enabled to start out with, but just to be sure I set the following in my build.grade:
project.ext.react = [
enableHermes: true, // clean and rebuild if changing
]
Now after cleaning and building I do see libhermes.so
. Unfortunately, I am still seeing the same exact issue. But I can see that the file exists.
At this point, I'm pretty stuck. I've followed a number of threads reporting the same issue (for example, this). It sounds like an underlying issue with soloader has been fixed and is being used with the latest version of react native. Although I'm using the latest version of RN, I'm still seeing this issue.
Not being terribly familiar with Android development, what steps might I take to investigate this issue further?
you can use the old version of soloader by adding configurations.all into your build.gradle
configurations.all {
resolutionStrategy {
force "com.facebook.soloader:soloader:0.8.2"
}
}
like this
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
configurations.all {
resolutionStrategy {
force "com.facebook.soloader:soloader:0.8.2"
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
perform below steps if the above steps are not working
app/build.gradle.
android {
...
// add the following packagingOptions
packagingOptions {
pickFirst 'lib/x86_64/libjsc.so'
pickFirst 'lib/arm64-v8a/libjsc.so'
}
}
We also added the following to the defaultConfig in the app/build.gradle
ndk {
abiFilters 'armeabi-v7a', 'x86'
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With