基于adt bundle for windows-的AndroidOpenCV安装文档说明
任薛纪
说明:本文档是基于快速搭建android开发平台adt bundle for windows软件的AndroidOpenCV运行环境搭建,主要参考OpenCV官方文档: http://docs.opencv.org/trunk/doc/tutorials/introduction/android_binary_package/android_dev_intro.html,如手动安装eclipse、sdk、adt、cdt等android开发环境,请参考如上的官网文档。官方文档提供了两种AndroidOpenCV的安装方法。
方法一:
下载Tegra Android Development Pack (TADP)集成软件包,运行TADP软件包将会在线下载所有的软件包,然后自动安装和配置运行环境(环境变量)。当安装完后,打开eclipse软件,然后按照如下两步来分别导入OpenCV LIbrary和Samples。注意,尽量按照两步导入,否则可能会出现路径找不到问题。
1、Import->General->Existing Project into Workspace->Next->Browse-> X:\android\OpenCV-2.4.3.2-android-sdk-tadp(AndroidOpenCV根目录),仅选择OpenCV Library,不选择Copy projects into workspace.
)
2、Import->General->Existing Project into Workspace->Next->Browse-> X:\android\OpenCV-2.4.3.2-android-sdk-tadp(AndroidOpenCV根目录),选择除OpenCV Library的所有Samples,不选择Copy projects into workspace.
3、为每一个项目选择Android平台,选择项目,点击属性,定位Android,从中选择一个Android平台。注意:对于OpenCV2.4.3,项目OpenCV LIbrary的最低平台为Android 4.2(即API Level 17),否则会提示编译问题。Sample的Android平台可以低一些。
4、如果出现编译问题,需要重复刷新,清理和编译。
方法二:
基础环境:
1、Jdk
2、Adt bundle for windows,该集成软件集成了eclipse、sdk、adt、cdt等软件下载地址:http://developer.android.com/sdk/index.html
AndroidOpenCV需要的软件
1、android-ndk-r8d
2、OpenCV-2.4.3.2-android-sdk-tadp
环境配置步骤
1、解压android-ndk-r8d和OpenCV-2.4.3.2-android-sdk-tadp
2、为ndk添加环境变量ANDROID_NDK_ROOT=X:\android\android-ndk-r8d。(My Computer -> Properties -> Advanced -> Environment variables)
3、打开eclipse软件,然后按照如下两步(4和5两步)来分别导入OpenCV LIbrary和Samples。注意,尽量按照两步导入,否则可能会出现路径找不到问题。
4、Import->General->Existing Project into Workspace->Next->Browse-> X:\android\OpenCV-2.4.3.2-android-sdk-tadp(AndroidOpenCV根目录),仅选择OpenCV Library,不选择Copy projects into workspace.
)
5、Import->General->Existing Project into Workspace->Next->Browse-> X:\android\OpenCV-2.4.3.2-android-sdk-tadp(AndroidOpenCV根目录),选择除OpenCV Library的所有Samples,不选择Copy projects into workspace.
6、为OpenCV Library项目选择Android平台,选择项目,点击属性,定位Android,从中选择一个Android平台。注意:对于OpenCV2.4.3,项目OpenCV LIbrary的最低平台为Android 4.2(即API Level 17),否则会提示编译问题。
7、AndroidOpenCV提供两种使用方法,一种为java OpenCV,另一种为native OpenCV。
7.1 对应java OpenCV,不使用ndk。只要保证选择Android平台和OpenCV库,就可以运行。
注意,如果OpenCV Library编译没有正常编译,则Samples会出现感叹号“!”,由于没有找到OpenCV的依赖库opencv library-2.4.3.jar。
7.2 对应Native OpenCV,首先应该保证7.1能够正常通过,然后还需配置ndk,编译c/c++语言。需要对C/C++ build的Builder Settings和Behavior进行设置。
8、对Jni的编辑,如果打开Jni里面的C/C++程序,将会提示很多错误,而且再也不能够运行该项目了。如下图
10、为了解决此问题,需要指明C/C++基本库的位置和OpenCV的位置,如下图所示,注意的是,可能ndk的环境变量的名称不一样,所以要根据环境变量的名称来替换ANDROID_NDK_ROOT,特别注意的是,OpenCV的路径按照官方文档来做可能不能够作用,如果不行,直接按照计算机路径添加OpenCV的路径。
配置条目如下:
${ANDROID_NDK_ROOT}/platforms/android-9/arch-arm/usr/include
${ANDROID_NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include
${ANDROID_NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.6/include
D:\android\OpenCV-2.4.3.2-android-sdk-tadp\sdk\native\jni\include
11、要运行AndroidOpenCV还需要在手机设备上安装OpenCV_2.4.2_binary_pack_tegra3.apk和OpenCV_2.4.2_manager.apk
安装如下:
adb install <path to TADP directory>
/OpenCV-2.4.2-Tegra-sdk/apk/OpenCV_2.4.2_binary_pack_tegra3.apk
最简单的Ndk单步调试
1、点击项目属性->C/C++ Build->Builder Settings->Build command,使用ndk-build编译时,加上如下参数NDK_DEBUG=1,之后生成so文件之外,还会生成gdbobserver,gdb.setup调式文件,如下图:
2、在项目的Debug Configuration中选择Android Native Apllication,点击下方Debug,如下图:
新建AndroidOpenCV项目步骤
1、建立一个名为TestOpenCV的Android项目,项目的位置和AndroidOpenCV在同一个盘符,否则这项目不能够添加OpenCV Library,如下图所示:
2、将TestOpenCV项目转化为C/C++项目
3、继续下一步,注意其中的后两部,为的时候自己配置ndk编辑C/C++程序
4、新建jni文件夹,将OpenCV Tutorial 4 - Mix Java+Native OpenCV里面jni下面的文件拷贝到新建的文件夹中。
5、添加OpenCV Library(如果新建的项目的盘符不在OpenCV所在的盘符,需要拷贝新建项目到AndroidOpenCV的盘符,否则不能够添加OpenCV Library)。
6、打开jni_part.cpp文件,添加C/C++库和OpenCV库,消除编译错误,如下图,其中内容如下。需要注意的是,官方文档有说明如下:
# for NDK r8 and prior:
${NDKROOT}/platforms/android-9/arch-arm/usr/include
${NDKROOT}/sources/cxx-stl/gnu-libstdc++/include
${NDKROOT}/sources/cxx-stl/gnu-libstdc++/libs/armeabi-v7a/include
${ProjDirPath}/../../sdk/native/jni/include
# for NDK r8b and later:
${NDKROOT}/platforms/android-9/arch-arm/usr/include
${NDKROOT}/sources/cxx-stl/gnu-libstdc++/4.6/include
${NDKROOT}/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include
${ProjDirPath}/../../sdk/native/jni/include
由于我的版本是r8d的,所以选择第二种
${ANDROID_NDK_ROOT}/platforms/android-9/arch-arm/usr/include
${ANDROID_NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include
${ANDROID_NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.6/include
D:\android\OpenCV-2.4.3.2-android-sdk-tadp\sdk\native\jni\include
7、修改JNICALL导出函数,格式为:
JNIEXPORT void JNICALL Java_新建项目报名(“.”用”_”代替)_调用Class名_FindFeatures(JNIEnv*, jobject, jlong addrGray, jlong addrRgba);
如:JNIEXPORT void JNICALL Java_com_example_testopencv_MainActivity_FindFeatures(JNIEnv*, jobject, jlong addrGray, jlong addrRgba);
8、将OpenCV Tutorial 3 - Add Native OpenCV项目里面的Sample3Native.java文件内容拷贝到MainActivity.java,同时去掉错误。
9、修改System.loadLibrary("mixed_sample");
10、将OpenCV Tutorial 3 - Add Native OpenCV项目里面的tutorial3_surface_view.xml文件复制到新建项目对应的layout文件夹中
11、配置ndk,如下两图
13、修改Android.mk文件,修改引入OpenCV Library的路径
include ../sdk/native/jni/OpenCV.mk
14、修改AndroidManifest.xml文件,添加如下权限
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>
15、注意Android平台的版本,可能由于版本问题导致不提示任何错误,但只显示错误。