2017-08-12 3 views
0

githubにアンドロイドアプリが見つかりました。これはC++で書かれていて、jniを使っています。 jniLibsでは "armeabi-v7a"ディレクトリしか見つからず、すべてのjniファイル(.so)がここに格納されていました。私のアンドロイド携帯電話のcpuアーキテクチャはaarch64(arm-v8a)です。アプリは自分の携帯電話で正常に動作します。私は自分のアプリにSDKを移動した後しかし、それは常にエラーandroid appでは、armライブラリをaarch64 cpuに使用できますか?

java.lang.UnsatisfiedLinkError: Native library (com/sun/jna/android-aarch64/libjnidispatch.so) not found in resource path (.)

を促したが例のアプリで私は削除したときに同じ「.soの」ファイル、それは言う:そう

java.lang.UnsatisfiedLinkError: Native library (com/sun/jna/android-arm/libjnidispatch.so) not found in resource path (.)

答えて

0

通常、Androidデバイスは複数のABIをサポートしており、64ビットデバイスは特定の32ビットアーキテクチャのネイティブコードビルドをサポートしています。

たとえば、arm64(64ビット)デバイスは、古いアプリケーションとの互換性を保つため、常にarmeabi-v7a(32ビット)もサポートします。これはGoogleからの直接の要件です。 instaceについては

、実行して、お使いのデバイスがサポートするアーキテクチャを確認する:

  • プリロリポップ: adb shell getprop ro.product.cpu.abi
  • ロリポップ&高い: adb shell getprop ro.product.cpu.abilist

あなたはのリストが表示されますコマンドの結果としてのいくつかのABI。

最近、Realmのdevblogを読んで、JNI関連のいくつかの問題に取り組んでいます。そのうちの1つはあなたが直面しているものに似ていました。

32ビットネイティブライブラリを64ビットの同じアプリケーションにロードする必要があるときにAndroidが混乱し、32ビットバージョンのネイティブコードしか持たない場合でも、64ビットバージョンを読み込もうとします。

あなたの場合、32ビットのネイティブライブラリビルドをロードしようとしますが、Androidは64ビットバージョンをロードしようとします。これは、他の依存関係のいずれかに64ビットのネイティブライブラリがある場合に発生する可能性があります。

私が述べたdevblog:

"もっと問題.soは" 希望のためhttps://academy.realm.io/posts/kenneth-geisshirt-tales-developing-sdks-at-scale/

検索この

を支援
関連する問題