Android Studio: JNI 使用小结
项目描述:在Android上部署KCF跟踪算法,KCF 源码为c++,且依赖OpenCV,为方便使用,在Android studio中将KCF打包成JNI类。实现过程涉及: JNI 调用 C++ 类对象/方法传递数组,c++ java Opencv 混合使用, cv::Mat和Bitmap的转换等。
1. 添加OpenCV依赖
Android OpenCV document: https://docs.opencv.org/2.4/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.html#application-development-with-static-initialization
下载
OpenCV-android-sdk
,在项目中:file
->new
->import module
,选择your_path/OpenCV-android-sdk/sdk/java
,导入Android studio 后,module名为openCVLibrary320
修改
openCVLibrary320
中的build.gradle
compileSdkVersion 24 buildToolsVersion "25.0.3" minSdkVersion 21 // 至少是 21 否则opencv camera类报错 targetSdkVersion 21
为
app
module添加依赖:project视图中打开open module settings
, 选择app module ,右边绿色小加号点击,添加mudle dependence: openCVLibrary320OpenCV mixedprocessing: C++源码也依赖opencv,在Android.mk 编译c++库的时候要添加opencv依赖,
Android.mk :
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) ifdef OPENCV_ANDROID_SDK ifneq ("","$(wildcard $(OPENCV_ANDROID_SDK)/OpenCV.mk)") include ${ OPENCV_ANDROID_SDK}/OpenCV.mk else include ${ OPENCV_ANDROID_SDK}/sdk/native/jni/OpenCV.mk endif else include ../../sdk/native/jni/OpenCV.mk endif include /home/wurui/project/android/OpenCV-android-sdk/sdk/native/jni/OpenCV.mk LOCAL_MODULE := jniKCF LOCAL_SRC_FILES := ffttools.hpp \ fhog.cpp \ kcftracker.cpp \ labdata.hpp \ recttools.hpp \ kcfClass.cpp LOCAL_LDLIBS += -llog -ldl \ ## 在JNI中使用LOG -lm -llog -ljnigraphics LOCAL_LDFLAGS += -ljnigraphics ## mat/bitmap convert include $(BUILD_SHARED_LIBRARY)
Application.mk :
APP_STL := gnustl_static APP_CPPFLAGS := -frtti -fexceptions APP_ABI := arm