Android java .lang.UnsatisfiedLinkError: не удалось найти DSO для загрузки - PullRequest
3 голосов
/ 01 мая 2020

Я только что создал новый реактивный проект (0.62). Запуск отладочной сборки fre sh работает просто отлично.

Я настроил подпись, следуя документации: 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, в /lib/x86_64 нет libhermes.so (я сейчас тестирую на API 2 пикселя 2).

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

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

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

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

Вопрос

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

1 Ответ

3 голосов
/ 09 мая 2020

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

выполните следующие шаги, если вышеуказанные шаги не работают

app / 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'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...