Android ReactNative java.lang.UnsatisfiedLinkError: может найти DSO для загрузки: libreactnativejni.so

Я пытался добавить ReactNative к моему существующему приложению для Android. Я следовал инструкциям по этой ссылке. Я мог бы добавить его, но приложение перестало работать, как только я открыл активную реакцию. Я начал использовать сервер

adb reverse tcp:8081 tcp:8081

и начал реагировать родное использование

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 ответов

Решение

Это вызвано следующей проблемой (открытой в течение 2 лет) https://github.com/facebook/react-native/issues/2814

Из вопроса:

React Native на Android не предоставляет 64-битную версию libreactnativejni.so Собственная библиотека, которая может вызвать проблемы совместимости на 64-битных устройствах. Я столкнулся с этим, пытаясь интегрировать React Native с большим существующим приложением, которое я разрабатываю.

Реакция из Фейсбука:

"Спасибо за сообщение! Да, мы не предоставляем 64-битную версию нативного кода, и система всегда должна возвращаться к 32-битной".

А также:

большинстве проектов Android используется ряд сторонних библиотек, и любая, включающая собственный 64-битный код, приведет к сбою React Native".

Следующий ответ SO Использование 32-битных библиотек jni на 64-битном андроиде объясняет, почему откат к 32-битным библиотекам невозможен. Так что, если найден 64-битный, все должно быть 64-битным

Я предлагаю прочитать в выпуске Github № 2814. Предлагается несколько исправлений, но все зависит от вашей ситуации.

Эмитент также написал блог об этом: смешивание 32- и 64-битных зависимостей в Android

Надеюсь это поможет!

На самом деле в моем случае эти шаги сработали:

  1. удалить приложение с устройства
  2. близко Metro Bundler
  3. бегать ./gradlew clean в каталоге Android
  4. бегать react-native run-android

надеюсь помочь вам.

Это исправило мою проблему

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

Это должно быть помещено в build.gradle раздел defaultConfig

Для меня работало чистое построение проекта и его повторная сборка. https://s tackru.com/images/41998a020086e12cefdf15ceda9a41ab5d2b5467.png

Вы можете использовать старую версию soloader, добавив configurations.all в свой build.gradle

configurations.all {
    resolutionStrategy {
        force "com.facebook.soloader:soloader:0.8.2"
    }
}

нравится

// 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
}

ссылка /questions/51907274/android-javalangunsatisfiedlinkerror-ne-udalos-najti-dso-dlya-zagruzki/51907278#51907278

Я решил эту проблему, обновите библиотеку fresco, которая поддерживает пакет приложений до версии 2.0.0 ниже, она не будет поддерживать,

Обновление: для меня проблема была решена после обновления fresco до версии 2.0.0, поскольку в 1.11.0, по-видимому, не было поддержки Android App Bundle. Я не знаю, была ли у вас одна и та же проблема.

просто сделай это:

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

Это сработало для меня,

      cd android
./gradlew clean

У меня была такая же проблема при работе на 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"
  }
}

Кредиты

Шаг 1: перейдите в Android Studio -> Build -> clean project. Шаг 2: удалите проект на вашем устройстве. Шаг 3: запустите реагирующий запуск. Шаг 4: запустите npx response-native run-android.

  • Это работает для меня, никаких изменений, связанных с градиентом, не требуется.

Это может быть 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

Если вы используете libres на фреске, убедитесь, что вы используете последнюю версию и установите для свойств значение false:

shrinkResources false
minifyEnabled false

внутри build.gradle файл.

Другие вопросы по тегам