AndroidStudio2.2对C++开发做了很好的支持,默认使用CMake构建编译,以前做Andorid下的opencv开发都是基于Android.mk方式是编译和配置opencv依赖的加载,本文通过配置CMakeList.txt来完成NDK opencv开发。
第一步、建立一个支持C++的工程,如下:
第二步、建立一个NDKloader类,如下:
public class NDKloader { // Used to load the 'native-lib' library on application startup. static { System.loadLibrary("native-lib"); System.loadLibrary("opencv_java3"); } /** * A native method that is implemented by the 'native-lib' native library, * which is packaged with this application. */ //public static native String stringFromJNI(); //public static native String validate(long matAddrGr, long matAddrRgba); //图像处理 public static native int[] getGrayImage(int[] pixels, int w, int h); }第三步、修改main目录下的CMakeList.txt,如下:
# Sets the minimum version of CMake required to build the native # library. You should either keep the default value or only pass a # value of 3.4.0 or lower. #工程路径 set(pathToProject D:/AndroidSpace/20160923/HelloCv-master) #OpenCV-android-sdk路径 set(pathToOpenCv C:/Developer/OpenCV-android-sdk) #CMake版本信息 cmake_minimum_required(VERSION 3.4.1) #支持-std=gnu++11 set(CMAKE_VERBOSE_MAKEFILE on) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") #配置加载native依赖 include_directories(${pathToOpenCv}/sdk/native/jni/include) #CPP文件夹下带编译的cpp文件 add_library( native-lib SHARED src/main/cpp/native-lib.cpp ) #动态方式加载 add_library( lib_opencv SHARED IMPORTED ) #引入libopencv_java3.so文件 set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION ${pathToProject}/app/src/main/jniLibs/${ANDROID_ABI}/libopencv_java3.so) #C++日志 find_library( log-lib log ) #target_link_libraries( native-lib $\{log-lib} ) target_link_libraries( native-lib $\{log-lib} lib_opencv)第四步、修改app目录下的build.gradle,在defaultConfig添加,