OpenCV for Android Studio 学习笔记(一):NDK及OpenCV的安装配置

来源:互联网 发布:java stringbuffer类 编辑:程序博客网 时间:2024/05/22 17:00

最近项目中有使用OpenCV的要求,这对于还没有接触过NDK的我来说真是有点儿难度。

所以先从NDK的配置入手,然后又配置OpenCV,并尝试使用OpenCV来运行一些小例子。

终于步入正轨了,特来做个小总结。


一、NDK

其实,Android Studio中NDK的配置是很简单的。不需要像Eclipse中那样复杂,不必使用cygwin这一类工具来模拟Linux环境。

只需:

File ——> Project Structure——>SDK Location 最下方的选项就是NDK。只有在这里下载会自动配置各种内容。(注意,此过程有连接外网的需求,应该是在下载的最后部分)


此后,按照

http://wiki.jikexueyuan.com/project/android-actual-combat-skills/ndk-development-in-android-studio.html

介绍的关于 头文件  、  Native代码 、.so文件的内容都能完成。


注意,Android Studio 默认是没有.mk文件的。(关于.mk文件的内容还了解的不多,以后补充)如果有需求要使用自己的.mk文件,就要在自己动手修改buile.gradle文件,更改jnilibs目录。

在android {

}

内部增加一下代码:

sourceSets.main.jni.srcDirs = []//禁止自带的ndk功能sourceSets.main.jniLibs.srcDirs = ['src/main/libs','src/main/jniLibs']//重定向so目录为src/main/libssrc/main/jniLibs,原来为src/main/jniLibstask ndkBuild(type: Exec, description: 'Compile JNI source with NDK') {    Properties properties = new Properties()    properties.load(project.rootProject.file('local.properties').newDataInputStream())    def ndkDir = properties.getProperty('ndk.dir')    if (org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_WINDOWS)) {        commandLine "$ndkDir/ndk-build.cmd", '-C', file('src/main/jni').absolutePath    } else {        commandLine "$ndkDir/ndk-build", '-C', file('src/main/jni').absolutePath    }}tasks.withType(JavaCompile) {    compileTask -> compileTask.dependsOn ndkBuild}task ndkClean(type: Exec, description: 'Clean NDK Binaries') {    Properties properties = new Properties()    properties.load(project.rootProject.file('local.properties').newDataInputStream())    def ndkDir = properties.getProperty('ndk.dir')    if (org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_WINDOWS)) {        commandLine "$ndkDir/ndk-build.cmd",'clean', '-C', file('src/main/jni').absolutePath    } else {        commandLine "$ndkDir/ndk-build",'clean', '-C', file('src/main/jni').absolutePath    }}clean.dependsOn 'ndkClean'


二、OpenCV

OpenCV的使用方式有很多种,随着版本的更新还出现了一种使用Manager进行中间衔接的方式,但这种方式要额外安装apk(用户打开需要OpenCV的功能时,会自动获得提醒去Google Play Store下载),不是很方便,特别是国内环境。

我一般是这样初始化OpenCV

if (!OpenCVLoader.initDebug()) {    Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");    //用这种方式初始化需要额外安装apk(监测到没有安装会提示去google play 下载)    OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);} else {    //这种方式使用本地lib    Log.d(TAG, "OpenCV library found inside package. Using it!");    mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);}


具体的关于OpenCV的使用可以参考:

http://blog.csdn.net/sbsujjbcy/article/details/49520791






0 0
原创粉丝点击