Android ReactNative java.lang.UnsatisfiedLinkError:可以找到要加载的DSO:libreactnativejni.so

时间:2017-04-12 11:59:47

标签: java android react-native

我一直在尝试将ReactNative添加到我现有的Android应用程序中。我按照this链接的说明操作。我可以添加它,但是一旦打开react本机活动,应用程序就会崩溃。我已经使用

启动了服务器
adb reverse tcp:8081 tcp:8081

并使用

启动react-native
react-native start

我得到了js文件正在加载的对话框。但最终以崩溃告终。以下是在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)

我完全迷失了,因为我无法弄清楚这个问题的原因。

提前致谢。

11 个答案:

答案 0 :(得分:14)

这解决了我的问题:

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

应将其放置在build.gradle defaultConfig节中。

答案 1 :(得分:10)

实际上,在我看来,这些步骤有效:

  1. 从设备上卸载应用程序
  2. 关闭Metro Bundler
  3. 在Android目录上运行./gradlew clean
  4. 运行react-native run-android

希望能为您提供帮助。

答案 2 :(得分:7)

这是由以下问题引起的(开放2年)https://github.com/facebook/react-native/issues/2814

来自问题:

  

Android上的React Native不提供64位版本的libreactnativejni.so本机库,这可能会导致64位设备出现兼容性问题。在尝试将React Native与我正在开发的大型现有应用程序集成时,我遇到了这个问题。

来自Facebook的反应:

  

感谢您的报告!是的,我们不提供64位版本的本机代码,系统应始终回退到32位。

     

     

大多数Android项目使用大量第三方库,任何包含本机64位代码的项都会导致React Native失败。

以下SO回答Use 32-bit jni libraries on 64-bit android解释了回退到32位库以及您无法混合的事实。因此,如果找到64位,则所有都应该是64位

我建议阅读Github问题#2814。提出了多种修复方法,但这取决于您的具体情况。

发行人还撰写了一篇关于它的博客:Mixing 32- and 64-bit Dependencies in Android

希望这有帮助!

答案 3 :(得分:4)

对我来说,有效的方法是清理项目构建,然后重新构建。 enter image description here

答案 4 :(得分:2)

我解决了此问题,更新了不支持应用程序捆绑包的壁画库2.0.0,低于此值,

更新:对我来说,在将fresco更新为2.0.0之后,该问题已解决,因为1.11.0显然不支持Android App Bundle。我不知道你们是否都遇到过同样的问题。

只需这样做:

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

答案 5 :(得分:1)

您可以通过在 build.gradle

中添加 configurations.all 来使用旧版的soloader。
Test

像这样

class Caller(BoxLayout):
    def do(self):
        App.get_running_app().root.rv.data = [{'value': ''.join(sample(ascii_lowercase, 6))}
                        for x in range(50)]

参考 https://stackoverflow.com/a/61695629/8079868

答案 6 :(得分:1)

这对我有用,

plt.bar()

答案 7 :(得分:0)

可能是lib \ x86_64 \ libreactnativejni.so,因为缺少ABI'X86_64'的剥离工具 请尝试以下步骤。

  1. 卸载apk
  2. 清理android文件夹

    • 导航到android文件夹cd android

    • 使用以下命令清洁目录 gradle

    • 对于Windows,gradlew clean

    • 对于Linux,./graldew clean
  3. 现在您可以尝试react-native run-android --no-jetifier

答案 8 :(得分:0)

在Android 30上运行时,我遇到了同样的问题。在android/build.gradle文件中添加以下内容后对我有用:

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

Credits

答案 9 :(得分:0)

第 1 步:转到 Android Studio -> 构建 -> 清理项目。 第 2 步:删除设备中的项目。 第 3 步:运行 react-native start。 第四步:运行 npx react-native run-android。

  • 它对我有用,不需要任何与 gradle 相关的更改。

答案 10 :(得分:-1)

如果您是壁画库,请确保使用最新版本并将属性设置为false:

shrinkResources false
minifyEnabled false

内部build.gradle文件。