Android java.lang.UnsatisfiedLinkError: не удалось найти DSO для загрузки

Я только что создал новый проект, поддерживающий реакцию (0.62). Запуск новой отладочной сборки работает нормально.

Я настроил подписку, следуя документации: https://reactnative.dev/docs/signed-apk-android, и убедился, что использую следующие ABI:"armeabi-v7a", "x86", "arm64-v8a", "x86_64".

Чтобы протестировать сборку релиза, я запускаю следующее: npx react-native run-android --variant release

Проблема

После выполнения указанной выше команды приложение пытается запуститься и сразу вылетает со следующей трассировкой стека:

    --------- 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)

Конечно же, когда я распаковываю APK, в нем нет libhermes.so /lib/x86_64 (Сейчас я тестирую пиксель 2 API 28).

Я не уверен, почему Hermes не был включен с самого начала, но просто для уверенности я установил следующее в моем build.grade:

project.ext.react = [
    enableHermes: true,  // clean and rebuild if changing
]

Теперь, после очистки и строительства, я вижу libhermes.so. К сожалению, я все еще вижу ту же проблему. Но я вижу, что файл существует.

На этом я довольно застрял. Я следил за несколькими потоками, в которых сообщалось об одной и той же проблеме (например, об этой). Похоже, основная проблема с soloader была исправлена ​​и используется с последней версией react native. Хотя я использую последнюю версию RN, эта проблема все еще возникает.

Вопрос

Не очень хорошо разбираясь в разработке Android, какие шаги я могу предпринять для дальнейшего изучения этой проблемы?

2 ответа

Вы можете использовать старую версию 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
}

выполните указанные ниже действия, если указанные выше действия не работают.

приложение / build.gradle.

android {
  ...
  // add the following packagingOptions 
  packagingOptions {
    pickFirst 'lib/x86_64/libjsc.so'
    pickFirst 'lib/arm64-v8a/libjsc.so'
  }
}

Мы также добавили следующее в defaultConfig в app/build.gradle

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

Причина ошибки

      Fatal Exception: java.lang.UnsatisfiedLinkError
couldn't find DSO to load: libimagepipeline.so
com.facebook.soloader.SoLoader.doLoadLibraryBySoName
 

Добавьте ниже строки в build.gradle

       // add the following packaging Options inside android {  }
   
android {
...
     packagingOptions {
            pickFirst 'lib/x86_64/libjsc.so'
            pickFirst 'lib/arm64-v8a/libjsc.so'
        }
}
Другие вопросы по тегам