web-dev-qa-db-ja.com

android静的初期化opencv3.0ライブラリ "opencv_Java3"を読み込めません

Android ADTを使用して、openCVを静的に初期化しようとしているため、アプリビルドに含まれ、ユーザーはAndroid playstoreからopenCVManagerをダウンロードする必要はありません。

OpenCV v3を使用しています( http://opencv.org/downloads.html

OpenCV-Android-sdk\samples\face-detectionのサンプルの1つに静的初期化を追加しようとしている段階。

私は例に従いました( http://docs.opencv.org/2.4/doc/tutorials/introduction/Android_binary_package/dev_with_OCV_on_Android.html

多くの例を調べましたが、それを機能させるための解決策はまだありません。誰かが助けてくれることを願っています。

Libopencv_Java3.soがlibs/armeabi-v7a/フォルダーにないことが原因である可能性があると思いました。OpenCV-Android-sdk\sdk\native\libs\armeabi-v7aからコピーして貼り付けると消えます。これは、ndkのセットアップ方法と関係があると思います。もちろん、問題はまったく異なるものである可能性があります。

LogCatはこれを提供します:

11-26 16:36:33.647: D/OpenCV/StaticHelper(13993): Trying to load library opencv_Java3 
11-26 16:36:33.647: D/OpenCV/StaticHelper(13993): Cannot load library "opencv_Java3" 
11-26 16:36:33.647: W/System.err(13993): Java.lang.UnsatisfiedLinkError: Couldn't load opencv_Java3 from loader dalvik.system.PathClassLoader[DexPathList[[Zip file "/data/app/org.opencv.samples.facedetect-1.apk"],nativeLibraryDirectories=[/data/app-lib/org.opencv.samples.facedetect-1, /vendor/lib, /system/lib, /vendor/lib]]]: findLibrary returned null 
11-26 16:36:33.767: D/OpenCV/StaticHelper(13993): Trying to load library opencv_Java3 
11-26 16:36:33.767: D/OpenCV/StaticHelper(13993): Cannot load library "opencv_Java3" 
11-26 16:36:33.767: W/System.err(13993): Java.lang.UnsatisfiedLinkError: Couldn't load opencv_Java3 from loader dalvik.system.PathClassLoader[DexPathList[[Zip file "/data/app/org.opencv.samples.facedetect-1.apk"],nativeLibraryDirectories=[/data/app-lib/org.opencv.samples.facedetect-1, /vendor/lib, /system/lib, /vendor/lib]]]: findLibrary returned null
10
Garry Dunicazzz

誰かがこの問題に遭遇し、AndroidStudioを使用している場合に備えて。 OpenCV-Android-sdk\sdk\native\libsフォルダーをコピーするだけで修正できます

openCvProject/openCVLibrary310/source/mainに移動し、名前をjniLibsに変更します。最終的な構造は次のようになります。OpenCvProject/ openCVLibrary310/source/main/jniLibs/ enter image description here

すでにAndroidStudioからプロジェクトを実行している場合は、必ず最初にデバイスからプロジェクトを削除してください。そうしないと、AndroidStudioが再デプロイせず、そのためにライブラリをコピーできない可能性があります。

LibsをopenCVLibraryフォルダーではなく実際のプロジェクトにコピーした場合にも機能する可能性がありますが、私はそれを試しませんでした。

16
Thor_Bux

Opencv.mkを含める前に、「ON」に設定されたモジュールをインストールするオプションがあることを確認してください。

OPENCV_INSTALL_MODULES:=on
include ${OPENCV_Android_SDK}/${Android_SDK_JNI}/OpenCV.mk

すでにメイクファイルに変数を設定しています

参照: http://docs.opencv.org/2.4/doc/tutorials/introduction/Android_binary_package/dev_with_OCV_on_Android.html

1
I L

私は最近この質問に出会う!これは、「app/src/main/jniLibs」フォルダーではなく、「app/src/main/cpp/libs」(カスタム)フォルダーに配置するためです。

フォルダパス:

folder path

ランタイムエラー:

runtime error

APKコンテンツ:

apk content

libopencv_Java3.soがapkファイルにパックされていないことがわかります。

'so'フォルダーパスを "app/src/main/jniLibs"に変更し、 "CMakeLists.txt"を変更しました。

jniLibsを使用する:

use jniLibs

プロジェクトを構築します。

見える。

apk content

libopencv_Java3.soを見つけることができます。

とアプリは正常に実行されます。

したがって、すべての「so」ファイルをjniLibsフォルダーに配置する必要があると思います。

他のフォルダを使用したい場合。 「build.gradle」で設定する必要があります

1
杨观回

楽しみとVOILÁのためだけに何かを試したとき、私はこの問題と何時間も戦いました! System.loadLibrary("whateverYourLibraryWasCalled");で問題が発生したので、ロードされたOpenCVを直前に追加します。

static {
    System.loadLibrary("opencv_Java3");
    System.loadLibrary("MyOpencvLibs");
}

そして、すべてがうまくいきました。

0
Hans Araya