Windows下使用android NDK(JNI)调用OpenCV本地代码——流程梳理

最近在弄把window下用 vs+opencv写的C代码算法打包成.so文件,供Android平台调用。从零学习Android环境的搭建,参考了各种大神的博客,使用ndk算是走通了一条路。

把整个过程梳理了一下,把参考内容也列出来,自己记录以备遗忘,也希望对和我一样的初学者有所帮助。


一,搭建Android 开发环境。

Android开发环境的搭建,包括JDK、ADT、SDK、NDK等。搭建步骤网上很多,资源下载可参考 http://www.open-open.com/lib/view/open1386252535564.html

我使用的是adt-bundle,已经包含了adt、sdk、eclipse,是一个完整的Android开发环境。中间出现的问题,打开eclipse提示adt版本太低,要求更新adt。由于众所周知的原因,谷歌网站根本无法登陆,用了代理还是慢的要死。我使用的解决方法是,找到sdk目录/tools/lib/plugin.prop,将里面的plugin.version改成已有的adt版本,即可正常运行。

建立一个最简单的Android工程,能正常输出HelloWorld就行。

二,NDK配置

NDK的配置包括路径设置、添加NativeSupport、设置C/C++的Paths and Symbols三个步骤。参考http://blog.csdn.net/u013149325/article/details/40375455

NDK调用本地C/C++文件的简单例子,可参考http://www.tuicool.com/articles/iQZr6z。当然其中头文件可以使用javah命令生成,可以在eclipse中直接生成,后面会说到。

三,添加native方法的类,并生成jni头文件

这部分内容可以网上查Java jni调用c/c++文件的内容,jni头文件生成有两种方式,一是通过命令行利用javah命令生成,二是通过在eclipse中建立编译选项直接生成。第二种方法可以参考http://blog.csdn.net/u013149325/article/details/40375455中的第八部分。

四,编写本地C/C++代码

主要是在C/C++中添加 jni.h和第三步生成的头文件,jni参数与C/C++代码中的参数对应可以查阅jni文档。这一步可以继续参考http://blog.csdn.net/u013149325/article/details/40375455

因为我主要是把调用opencv的C代码打包成.so文件,供Android使用。所以这里的一个关键问题是如何将opencv包加载进来。我的做法是直接把opencv解压缩包中build/include中的opencv2整个文件夹放到到Android工程的jni文件夹中,eclipse会自动加载opencv2文件夹中的内容。这里的opencv是使用Windows版本的opencv2库还是Android版本的opencv2库,实际中貌似这两个都行,也许这两个库本来就是一样的,有待确认。

        这一步还有其他方法,可以参考   http://blog.csdn.net/u013149325/article/details/40554311 ,重点推荐http://blog.csdn.net/yanzi1225627/article/details/27863615,这位大神对于OpenCV4Android有各种深入研究,还建了人满为患的讨论群

五,配置 Android.mk和Application.mk

这两个文件的配置,可以参考http://blog.csdn.net/u013149325/article/details/40554311、http://blog.csdn.net/watkinsong/article/details/8829235,以及opencv自带文档opencv_tutorials.pdf中introduction的Android开发部分

六,生成.so文件

编译文件生成.so文件,运行程序,查看在模拟器中的运行结果。

ps.这里只是初步走通了这个流程,如何在jni环境中,像在VS中一样调试C/C++代码,有待继续学习。还有,如何在C/C++代码中根据路径读取Android平台上的图像,还没走通。

你可能感兴趣的:(Android,opencv学习)