【发布时间】:2014-03-31 13:18:29
【问题描述】:
我正在实现 Android 相机应用程序,我在 JNI 中处理预览帧。我有 processImage.cpp 文件,我在其中进行所有本机处理,直到现在我发现如果我对本机文件进行任何更改,它不会改变应用程序的行为。
也许它可以连接到我最近添加的OpenCV库的静态链接以及我加载本机库的位置。
package fit.vutbr.faceswap;
// OpenCV static initialization
static {
if (!OpenCVLoader.initDebug()) {
// Handle initialization error
Log.d(TAG, "OpenCV init error");
}
else {
System.loadLibrary("processImage");
//System.loadLibrary("detection_based_tracker");
}
}
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# OpenCV
OPENCV_LIB_TYPE:=STATIC
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
include C:\Users\Acer\Projects\OpenCV\OpenCV-2.4.6-android-sdk\sdk\native\jni\OpenCV.mk
LOCAL_C_INCLUDE:= C:\Users\Acer\Projects\OpenCV\OpenCV-2.4.6-android-sdk\sdk\native\jni\include
LOCAL_LDLIBS += -llog -ldl
LOCAL_MODULE := processImage
LOCAL_SRC_FILES := processImage.cpp
include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_MODULES := processImage
声明原生方法:
private native int[] kalmanFilterNative(int center_x, int center_y);
在 processImage.cpp 中的定义:
jintArray Java_fit_vutbr_faceswap_CameraPreview_kalmanFilterNative( JNIEnv* env, jobject thiz, jint center_x, jint center_y)
{
// code
return ret;
}
随叫随到ret = kalmanFilterNative(center_x, center_y); 我得到UnsatisfiedLinkError: Native method not found。
有人知道问题出在哪里吗?
【问题讨论】:
-
可能是现金问题。从项目目录中删除 apk,并从设备中卸载应用程序。
-
仍然得到:“W/dalvikvm(6553): 未找到本机 Lfit/vutbr/faceswap/CameraPreview 的实现;.kalmanFilterNative:(II)[I”
-
我遇到过C++构建失败的情况,但是我没有注意到。
-
我手动运行了
ndk-build,结果发现有一个错误。改正后构建完成。但是现在在运行ndk-build之后,我从 libs 目录中丢失了我的 opencv_java.so (我正在使用上面提到的静态初始化)。是否可以一次构建它们? -
好的,问题解决了 :) 我刚刚根据link 编辑了 Android.mk。您能回答我的问题,我会将其标记为已接受吗?
标签: android opencv android-ndk java-native-interface unsatisfiedlinkerror