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
Надеюсь это поможет!
На самом деле в моем случае эти шаги сработали:
- удалить приложение с устройства
- близко
Metro Bundler
- бегать
./gradlew clean
в каталоге Android - бегать
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
}
Я решил эту проблему, обновите библиотеку fresco, которая поддерживает пакет приложений до версии 2.0.0 ниже, она не будет поддерживать,
Обновление: для меня проблема была решена после обновления fresco до версии 2.0.0, поскольку в 1.11.0, по-видимому, не было поддержки Android App Bundle. Я не знаю, была ли у вас одна и та же проблема.
просто сделай это:
implementation 'com.facebook.fresco:fresco:2.0.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"
}
}
Шаг 1: перейдите в Android Studio -> Build -> clean project. Шаг 2: удалите проект на вашем устройстве. Шаг 3: запустите реагирующий запуск. Шаг 4: запустите npx response-native run-android.
- Это работает для меня, никаких изменений, связанных с градиентом, не требуется.
Это может быть lib\x86_64\libreactnativejni.so, который не найден из-за отсутствия инструмента удаления для ABI 'X86_64'. Попробуйте выполнить следующие шаги.
- Удалите apk
Очистите папку android
Перейдите в папку Android
cd android
.Очистите каталог с помощью gradle
Для Windows,
gradlew clean
- Для Linux
./graldew clean
Теперь ты можешь попробовать
react-native run-android --no-jetifier
Если вы используете libres на фреске, убедитесь, что вы используете последнюю версию и установите для свойств значение false:
shrinkResources false
minifyEnabled false
внутри build.gradle
файл.