我已经浏览了大量资源(包括但不限于OpenCV4Android's Google group,StackOverflow和OpenCV's answers页面试图解决此问题,达到建议变得多余的程度。问题可能是或多或少类似于我之前的(尚待解决的)question,但是情况不同,因而可能是不同的错误来源。
我已经将一个Android Activity添加到包含成功运行的应用程序的包中(OpenCV的教程3示例演示了ndk使用)。该活动使用OpenCV的java API,但调用System.loadLibrary("nativefile");
,其中nativefile
表示本机库。调用loadLibrary
的块如下所述;它在onManagerConnected()
方法中。在loadLibrary
行,Logcat发出:
02-17 19:27:39.239: E/AndroidRuntime(10872): FATAL EXCEPTION: main
02-17 19:27:39.239: E/AndroidRuntime(10872): java.lang.UnsatisfiedLinkError: Library nativefile not found
02-17 19:27:39.239: E/AndroidRuntime(10872): at java.lang.Runtime.loadLibrary(Runtime.java:461)
02-17 19:27:39.239: E/AndroidRuntime(10872): at java.lang.System.loadLibrary(System.java:557)
这种错误确实在其他问题中确实发生了多次;我已经尝试过我遇到的建议。但是,对这个问题有一个值得注意的观察;成功运行的应用程序(OpenCV示例)通过System.loadLibrary("nativefile");
调用同一个库。
代码相当长,因此无法放入问题中。然而,下面总结了我认为是关于这个问题的关键要素,它还总结了以前与此事有关的一些答案。
Java_packageNameSeperatedWithUnderScores_callingClassName_methodName
的模式验证它是否包含包名称和类名称以及方法名称。 Morever;代码在extern "C"
块中包围,与本机开发的其他OpenCV示例cpp文件一样。以下是Android.mk
文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
include ../../sdk/native/jni/OpenCV.mk
LOCAL_MODULE := nativefile
LOCAL_SRC_FILES := nativefile.cpp
LOCAL_LDLIBS += -llog -ldl
include $(BUILD_SHARED_LIBRARY)
以下是Application.mk
文件
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := all
我尝试用all
替换APP_ABI
行中的armeabi
,并再次尝试使用armeabi-v7a
,但是没有不同的结果。
.so
文件夹中所需的lib
文件下面是BaseLoaderCallBack
实例化块,与OpenCV示例中的不同,但是我没有调用OpenCV摄像头,因为应用程序对从SD卡读取的图像执行图像处理。 / p>
BaseLoaderCallback loader = new BaseLoaderCallback(this){
public void onManagerConnected(int status){
switch(status){
case LoaderCallbackInterface.SUCCESS:{
System.loadLibrary("nativefile"); break; }
default:{
super.onManagerConnected(status); break; }
} } };
与OpenCV的示例不同,在相关活动中,行loader.onManagerConnected(LoaderCallbackInterface.SUCCESS);
已添加到onCreate()
方法,因为方法onManagerConnected
似乎没有被调用。
if (OpenCVLoader.initDebug())
。我也尝试了recommended OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, loader)
条件检查,但结果仍然没有。.so
的{{1}}个文件。鉴于同一个包中的其他活动,加载库并精细地利用它(当然在相应地修改了清单文件和cpp方法名称之后),我假设项目属性是正确的(例如添加OpenCV库,和必要的环境路径等)。
我多次检查了OpenCV样本,并按照相同的做法进行了轻微的差异,如上所述。
任何想法可能是问题的根源?
感谢您的时间。