2015-11-30 24 views
8

私はAndroidスタジオのマルチディックスプロジェクトにlib(.jar & .so)を追加しようとしています。Android multidex、UnsatisfiedLinkError - .soファイルが見つかりませんでした

私はプロジェクトに数個のジャーを追加するだけで、すべて正常に動作します。 私はこのエラーを取得してい 私はより多くのjarファイル(他のLIBS)を追加した場合に:

java.lang.UnsatisfiedLinkError: 
    dalvik.system.PathClassLoader[DexPathList[[zip file 
    "/data/app/com.test.digital.ocrtest-2/base.apk"],nativeLibraryDirectories=[/data/app/com.test.digital.ocrtest-2/lib/arm, 
    /data/app/com.test.digital.ocrtest-2/base.apk!/lib/armeabi-v7a, 
    /vendor/lib, /system/lib]]] couldn't find 
    "libScanovatePassportAndIDLSDK_CPP.so" 

私はjarファイルを生成するので、同じDEXにするためにコンパイラに伝えることができますどのように任意のアイデア?あなたのlibScanovatePassportAndIDLSDK_CPP.soのみarmeabiために建てられた一方で

+0

いいえ、.soはdexに入りません。しかし、.soがAPKに入っているかどうか確認してください。あなたは 'unzip -l'を使ってAPKファイルの内容を表示することができます。 –

+0

はい、APKにパックされています。 –

+0

APKの動作が停止したときの合計サイズは?これはどのデバイスですか? –

答えて

4

は余分なJARファイルの一部は、armeabi-v7aのネイティブlibriesを持参した場合、インストーラは、ライブラリの間違ったセットを抽出します。この修正は.soのコピーを追加するのではなく、他のABIを取り除くことです。 gradleでは、splitsを使用できます。

+2

ありがとう!私はすべての基本的なUnsatisfiedLinkErrorの質問を使い果たしました。最終的にこれを発見した。 –

1

これには優雅なソリューションがあります。 APKファイルに64ビット版のすべてのネイティブライブラリが含まれていない場合は、APKファイルに64ビットライブラリが含まれていないことを確認するだけです。あなたのアプリは64ビットABIのデバイスにインストールされている場合、パッケージマネージャはインストールにAPKファイルをスキャンし、64ビットのネイティブライブラリを探し https://corbt.com/posts/2015/09/18/mixing-32-and-64bit-dependencies-in-android.html

背景:ここでは、この問題を解決するために、あなたのプロジェクトを構成する方法についてのチュートリアルです。適切な64ビットネイティブライブラリフォルダ(任意のzipクライアントで開くと、APKファイル内の/ libsフォルダを確認できます)が見つかると、すべてのネイティブライブラリが64ビットバージョンで利用可能であるとみなされます。 1つ以上のネイティブライブラリが64ビットバージョンで使用できない場合、パッケージマネージャは32ビットバージョンのロードに失敗します。したがって、これらのネイティブlibrairiesに依存するコードを実行しようとすると、このUnsatisfiedLinkErrorメッセージが表示されます。つまり、ライブラリの32ビットバージョン

関連する問題