0

私は android studio を初めて使用し、OpenCV を使用している既存のプロジェクトに取り組んでいます。CMU の Pocketsphinx for Android を実装する必要があります。インストール手順に従って、プロジェクトの /src ディレクトリに jniLibs フォルダーを作成し、そこに Pocketsphinx 用の適切なファイルを配置しました。

ここで問題が発生します。これを行うと、突然次のエラー メッセージが表示されます。

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

/src ディレクトリに jniLibs フォルダーがない場合、このエラーは発生しませんが、もちろん、必要な .so ファイルが見つからないというエラーが pocketSphinx から表示されます。

さらに、OpenCV の SDK を調べたところ、「libjniopencv_core.so」というファイルがないことに気付きました。どこにも存在しません。他の .so ファイルがありますが、その名前のファイルはありません。すべての armeabi と、openCV から新しい jniLibs フォルダーにディレクトリ以外のものをインストールしても、このエラー メッセージが表示されます。

Pocketphinx jniLibs ファイルのみをロードし、そのディレクトリでの openCV .so ファイルの検索を無視するように Android Studio に指示するにはどうすればよいですか?

4

2 に答える 2

1

これを行うには、gradle に次のコードを追加します。

android {
    ...
    defaultConfig {
        ...
        ndk {
            abiFilters "armeabi-v7a", "x86","armeabi"
        }

        packagingOptions {
            exclude "lib/arm64-v8a/mysofile.so"
        }
    }
}

arm64-v8a/mysofile.so を除外したいものに置き換えます。

于 2016-10-15T16:47:14.073 に答える
0

Pocketphinx jniLibs ファイルのみをロードし、そのディレクトリでの openCV .so ファイルの検索を無視するように Android Studio に指示するにはどうすればよいですか?

重要なファイルを無視してはいけません。opencv には libjniopencv_core.so が必要です。

さらに、OpenCV の SDK を調べたところ、「libjniopencv_core.so」というファイルがないことに気付きました。

他の重要な so ファイルと一緒に opencv-android-arm.jar 内にある必要があります。

ファイルが競合する理由は明らかではありません。gradle に問題があるはずです。ファイルが実際にパックされているため、APKの内部を確認する必要があります。ほとんどの場合、armeabi や armeabi-v7 などの異なるアーキテクチャをパックしようとします。同じアーキテクチャの .so ファイルをパックする必要がある場合があります。

于 2016-10-15T19:35:40.190 に答える