web-dev-qa-db-ja.com

Android ReactNative Java.lang.UnsatisfiedLinkError:ロードするDSOが見つかりました:libreactnativejni.so

ReactNativeを既存のAndroidアプリケーションに追加しようとしています。 this リンクの指示に従いました。追加できましたが、アプリケーションを開くとクラッシュしますネイティブアクティビティに反応します。

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)

この問題の原因を突き止めることができないため、私は完全に失われました。

前もって感謝します。

13
Anu

これは、次の問題(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 answer 64ビットAndroidで32ビットjniライブラリを使用 は、32ビットライブラリへのフォールバックと、混在できないことを説明しています。 64ビットが見つかった場合、すべて64ビットである必要があります

Github issue#2814を読むことをお勧めします。複数の修正が提案されていますが、状況によって状況が異なります。

発行者はそれについてのブログも書いています: Androidでの32ビットと64ビットの依存関係の混合

お役に立てれば!

12

これは私の問題を修正しました:

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

これはbuild.gradle defaultConfigセクション。

17
Aristo Michael