注释:本文最新勘误文地址:http://blog.csdn.net/watkinsong/article/details/9849973 包含最新的完全的配置说明
简介:本系列博客介绍了安卓开发环境的配置,和在安卓开发中,通过JNI调用本地C++代码,使用opencv进行开发处理,本地代码通过NDK进行编译。
参考链接:http://www.cnblogs.com/ldr213/archive/2012/02/20/2359262.html 我最早学习是参考这个链接的,但是教程比较老,而且OPENCV现在都2.4.5的版本了,所以想总结一下分享给需要的朋友。
请文明转载,声明出处。by watkins.song
有一种方式不需要自己配置所有的Sun JDK, Android SDK以及NDK,Eclipse等设置,使用已经配置好的开发套件就可以进行直接的开发,由NVIDIA开发的开发套件Tegra Android Development Pack能够直接设置好所有的开发环境,而且最新的版本还包含了OPENCV,不想自己配置的朋友可以直接下载这个套件。但是我本人没有尝试过使用这个套件,怎么使用也不明白,所以如果不想自己配置环境的话还是需要自己去看看这个套件的使用。
**本节主要涉及在安卓开发中配置本地代码调用的方式,通过JNI调用,使用NDK进行编译。
安卓开发环境的配置请见:http://blog.csdn.net/weixingstudio/article/details/8829072
1. 安装CDT(CDT plugin for Eclipse)
Eclipse的CDT插件是用来在Eclipse进行C++开发的工具,如果你在配置安卓开发环境的时候安装ADT的过程中,已经选择了NDK Plugins,那么就不需要再进行安装了,因为NDK Plugins已经包含了CDT,如下图:
如果在安装的时候没有选择NDK插件,那么需要再次安装CDT。
2. Android NDK
访问http://developer.android.com/sdk/ndk/index.html 下载最新的Android NDK,是一个ZIP解压包,只需解压到某个路径即可,例如"F:\android-ndk-r8b-windows\android-ndk-r8b",再把这个路径添加到系统的环境变量PATH中。
3. 安装Cygwin(可以选择性安装,通过命令行进行编译C++代码)
网上有些教程说需要安装Cygwin,而且好多教程说要把Cygwin的所有组件都装上,但是这个如果都装上的话,占用非常多的硬盘空间,而且我发现现在这个Cygwin也没有什么用。
Cygwin是unix/linux工具集的一个集合,将所有的linux工具移植到windows平台上可以运行,其他的教程里说用这个,主要使用使用它进行C++代码的编译,但是目前最前的方式,可以使用Cygwin,也可以使用Windows控制台编译,也可以使用Eclipse进行编译,本人不推荐下载Cygwin,因为太麻烦,而且编译的时候还需要手动输入命令,如果你喜欢那种命令行的控制操作可以使用。
下面简单说下Cygwin的使用。
访问http://cygwin.com/index.html下载最新的Cygwin,最好安装全部的Cygwin组件。假设安装在"C:\cygwin"下,将"C:\cygwin\bin"添加到系统环境变量PATH中,为了方便的在命令行下调用Android NDK,找到"C:\cygwin\home\(你的用户名)"这个目录,打开文件".bash_profile",在文件的最下面加上下面两行内容:
NDK=/cygdrive/f/android-ndk-r6b-windows/android-ndk-r6b
export NDK
这样便可以在命令行中以 "$NDK/ndk-build" 这种形式调用NDK了。
因为在Windows的控制台就可以使用ndk-build进行编译本地cpp代码,所以一般不需要使用cygwin,而且不仅可以使用windows的控制台,还可以在eclipse中配置编译本地cpp代码。
4. OpenCV For Android
下载最新的opencv for android,
下载地址:http://sourceforge.net/projects/opencvlibrary/files/opencv-android/
安装完以后最好配置环境变量。
5. 在Android中使用Opencv
使用opencv有两种方式,一种是使用opencv的java版本的API,但是这种方式不是通过本地调用实现的,全部都是java代码,所以这里先不讲,另外一种方式就是使用opencv的c++版本的API,将本地c++代码编译成.so链接库,然后在安卓开发中进行调用,本地cpp代码使用NDK进行编译。
5.1 安卓代码
下面给出一个使用Canny算子检测边缘的本地代码调用的使用方式。
新建安卓项目,配置使用安卓API等信息,这里我的项目名称为HaveImgFun