Android NDK не реагирует на изменения
Я реализую приложение камеры 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
,
Кто-нибудь знает, где проблема?
1 ответ
Попробуйте изменить свой родной метод для:
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;
}