Android ReactNative java.lang.UnsatisfiedLinkError:could find DSO to load: libreactnativejni.so-ThrowExceptions

Exception or error:

I have been trying to add ReactNative to my existing android application. I followed the instructions from this link. I could add it but the app gets crashed once I open the react native activity. I have started server using

adb reverse tcp:8081 tcp:8081

and started react-native using

react-native start

I get a dialogue that the js files are loading. But finally end up with a crash. Following is the error that is being printed in logcat:

java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libreactnativejni.so
    at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:213)
    at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:178)
    at com.facebook.react.bridge.JSCJavaScriptExecutor.<clinit>(JSCJavaScriptExecutor.java:19)
    at com.facebook.react.ReactInstanceManager.onJSBundleLoadedFromServer(ReactInstanceManager.java:413)
    at com.facebook.react.ReactInstanceManager.createReactContextInBackground(ReactInstanceManager.java:236)

I am completely lost as I am unable to figure out the cause for this issue.

Thanks in advance.

How to solve:

This is caused by the following issue (open for 2 years) https://github.com/facebook/react-native/issues/2814

From the issue:

React Native on Android doesn’t provide a 64-bit version of the libreactnativejni.so native library, which can cause compatibility issues on 64-bit devices. I ran into this while attempting to integrate React Native with a large existing application I’m developing.

Reaction from Facebook:

Thanks for reporting! Yes we don’t provide 64-bit version of the native code and the system should always fall back to 32-bit.

And:

Most Android projects use a number of 3rd-party libraries, and any that include native 64-bit code will cause React Native to fail.

The following SO answer Use 32-bit jni libraries on 64-bit android explains fallback to 32-bit libraries and the fact you cannot mix. So if 64-bit is found, all should be 64-bit

I suggest reading along the Github issue #2814. There are multiple fixes proposed, but it depends on your situation what works.

The issuer has also written a blog about it: Mixing 32- and 64-bit Dependencies in Android

Hope this helps!

###

This has fixed my issue :

   ndk {
        abiFilters 'armeabi-v7a', 'x86'
    }

This should be placed build.gradle defaultConfig section.

###

To me what worked was to clean project build and build it again. enter image description here

###

I solved this issue, update fresco library that is support for app bundle is 2.0.0 below this will not support,

Update: For me the issue got solved after updating fresco to 2.0.0, because 1.11.0 apparently didn’t have support for Android App Bundles. I don’t know if you all had the same problem, though.

just do this :

implementation 'com.facebook.fresco:fresco:2.0.0'

###

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
}

reference
https://stackoverflow.com/a/61695629/8079868

###

if you are fresco libray then make sure use latest version and set the properties as false :

shrinkResources false
minifyEnabled false

Inside build.gradle file.

Leave a Reply

Your email address will not be published. Required fields are marked *