Android NDK不会对变化做出反应
我正在实现Android摄像头应用程序,我正在JNI中处理预览帧。我有一个processImage.cpp文件,我在其中执行所有本机处理,直到现在,当我发现如果我对本机文件进行任何更改,它不会改变应用程序的行为时,它才起作用 也许它可以连接到我最近添加的OpenCV库的静态链接,并在那里加载本机库Android NDK不会对变化做出反应,android,opencv,android-ndk,java-native-interface,unsatisfiedlinkerror,Android,Opencv,Android Ndk,Java Native Interface,Unsatisfiedlinkerror,我正在实现Android摄像头应用程序,我正在JNI中处理预览帧。我有一个processImage.cpp文件,我在其中执行所有本机处理,直到现在,当我发现如果我对本机文件进行任何更改,它不会改变应用程序的行为时,它才起作用 也许它可以连接到我最近添加的OpenCV库的静态链接,并在那里加载本机库 package fit.vutbr.faceswap; // OpenCV static initialization static { if (!OpenCVLoader.
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)
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_MODULES := processImage
应用程序.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)
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(中心x,中心y)
I get未满足链接错误:未找到本机方法
有人知道问题出在哪里吗?尝试将本机方法修改为:
extern "C" {
JNIEXPORT jintArray JNICALL Java_fit_vutbr_faceswap_CameraPreview_kalmanFilterNative( JNIEnv* env, jobject thiz, jint center_x, jint center_y);
};
JNIEXPORT jintArray JNICALL Java_fit_vutbr_faceswap_CameraPreview_kalmanFilterNative( JNIEnv* env, jobject thiz, jint center_x, jint center_y)
{
// code
return ret;
}
可能是现金问题。从项目目录中删除apk,并从设备中卸载应用程序。仍然获得:“W/dalvikvm(6553):未找到本机Lfit/vutbr/faceswap/CameraPreview;的实现。kalmanFilterNative:(II)[I”我遇到过C++编译失败的情况,但我没有注意到。我手动运行<代码> NDK Bug < /Cord>,结果出错了。在修改后,构建完成了。但是,在运行<代码> NDK Bug 之后,我失去了OpenCVJava.A.从LIBS目录(我使用静态init,如上面所提到的)。是否可以立即构建它们?好的,问题已解决:)我刚刚根据此编辑了Android.mk。您能否回答我的问题,我会将其标记为已接受?谢谢,但我忘了包含
extern“C”{JNIEXPORT…JNICALL}
在我最初的问题中,但我的代码中有:)无论如何,正如您在评论中看到的,我已经解决了这个问题。