OpenCV Android开发教程
本指南旨在帮助您快速学习Android开发基础知识并设置工作环境。它是用Windows 7写的,虽然它可以与Linux(Ubuntu),Mac OS X和Android SDK支持的任何其他操作系统一起使用。
如果您在彻底按照这些步骤后遇到任何错误,请随时通过OpenCV Q&A论坛或者加入zijiebao官方群与我们联系。我们将竭尽全力帮助您。
前言
Android是由Google领导的开放手机联盟开发的基于Linux的开源移动操作系统。有关详细信息,请参阅Android教程。
Android的开发与其他平台的开发显着不同。所以在开始编程Android之前,我们建议您确保您熟悉以下主题:
- Java编程语言是Android操作系统的主要开发技术。此外,您可以在Java上找到有用的Java文档。
- Java本机接口(JNI)是Java虚拟机中运行本机代码的技术。此外,您可以在JNI上找到Oracle文档。
- Android Activity及其生命周期,这是一个必不可少的Android API类。
- OpenCV的开发一定要了解Android Camera的具体细节。
Android开发的快速环境设置
如果您正在安装一个干净的环境,那么您可以尝试NVIDIA发布的Tegra Android开发包(TADP)。
- 注意
- 启动版本2.0的TADP软件包包括OpenCV for Tegra SDK,这是一个常规的OpenCV4Android SDK,扩展了Tegra特定的东西。拆包后,TADP将自动覆盖所有环境设置,您可以跳过本指南的其余部分。
如果您是Android开发中的初学者,那么我们还建议您从TADP开始。
- 注意
- NVIDIA的Tegra Android开发包包含了NVIDIA * Tegra平台的一些特殊功能,但其使用并不仅限于Tegra设备。*您需要至少1.6 Gb可用磁盘空间进行安装。
- TADP将从Google的服务器下载Android SDK平台和Android NDK,因此安装需要Internet连接。
- TADP可能会在安装过程结束时要求您刷新开发套件。如果没有Tegra开发套件,请跳过此步骤。
- (UNIX)TADP将在安装过程中询问您的root,因此您需要成为sudo组的成员。
用于Android开发的手动环境设置
Java开发
您需要安装以下软件才能开发适用于Java的Java:
- Sun JDK 6(Sun JDK 7也是可能的)请访问Java SE下载页面并下载操作系统的安装程序。以下是Ubuntu和Mac OS 的详细JDK(Java Development Kit)安装指南(仅适用于OpenCV的JDK部分)
sudo update-java-alternatives --set java-6-sun
2. Android SDK
从http://developer.android.com/sdk/index.html获取最新的Android SDK
这是Google的SDK 安装指南。
sudo apt-get install ia32-libs
对于基于Red Hat的系统,以下命令可能会有所帮助:
sudo yum install libXtst.i386
3. Android SDK组件
您需要安装以下SDK组件:
- Android SDK工具,修订版本20或更新版本。较旧的修订也应该有效,但不推荐。
- SDK平台Android 3.0(API 11)。OpenCV Java API支持的最小平台是Android 2.2(API 8)。这也是提供的示例运行所需的最低API级别。请参阅他们的AndroidManifest.xml文件中的<uses-sdk android:minSdkVersion =“8”/>标签。但为了成功编译,目标平台应设置为Android 3.0(API 11)或更高版本。它不会阻止他们在Android 2.2上运行。
有关安装/更新SDK组件的帮助,请参阅添加平台和软件包。
4. Eclipse IDE
检查Android SDK系统要求文档以获取与Android SDK兼容的Eclipse版本列表。对于OpenCV 2.4.x,我们推荐使用Eclipse 3.7(Indigo)或Eclipse 4.2(Juno)。它们在Windows和Linux下都适用于OpenCV。
如果您没有安装Eclipse,您可以从官方网站获取。
5. Eclipse的ADT插件
这些说明是从Android开发人员网站复制的,如有任何与ADT有关的问题,请查看。
假设您已安装Eclipse IDE,请按照以下步骤下载并安装ADT插件:
- 启动Eclipse,然后选择帮助 - >安装新软件...
- 点击添加(在右上角)。
- 在显示的“添加存储库”对话框中,为“名称”输入“ADT Plugin”,并为“位置”输入以下URL:https : //dl-ssl.google.com/android/eclipse/
- 单击确定
注意 如果您在获取插件时遇到问题,请尝试使用位置网址中的“http”,而不是“https”(出于安全考虑,首选使用https)。
- 在可用软件对话框中,选中开发人员工具旁边的复选框,然后单击下一步。
- 在下一个窗口中,您将看到要下载的工具的列表。点击下一步。
注意 如果您还计划使用Android NDK开发本机C ++代码,请不要忘记启用NDK插件安装。
8. 阅读并接受许可协议,然后单击完成。
9. 安装完成后,重新启动Eclipse。
C ++中的本地开发
您需要安装以下软件才能在C ++中为Android开发:
1、Android NDK
要编译Android平台的C ++代码,您需要Android Native Development Kit(NDK)。
您可以从下载页面获取最新版本的NDK 。要安装Android NDK,请将存档提取到计算机上的某个文件夹。以下是安装说明。
注意
在开始之前,您可以在该文件夹中阅读Android NDK存档中的官方Android NDK文档docs/。关于使用Android NDK构建系统的主要文章在ANDROID-MK.html文件中。你可以在找到一些额外的信息APPLICATION-MK.html,NDK-BUILD.html文件和CPU-ARM-NEON.html,CPLUSPLUS-SUPPORT.html,PREBUILTS.html。
2、Eclipse的CDT插件
如果您选择安装Eclipse ADT插件的NDK插件组件(见上图),您的Eclipse IDE应该已经有CDT插件(也就是C / C ++开发工具)。有几种可能的方式将Android NDK的C ++代码的编译整合到Eclipse编译过程中。我们建议基于Eclipse CDT(C / C ++开发工具)Builder的方法。
Android应用程序结构
通常Android应用程序的源代码具有以下结构:
- root folder of the project/jni/libs/res/src/AndroidManifest.xmlproject.properties... other files ...
Where:
- 该src文件夹包含应用程序的Java代码,
- 该res文件夹包含应用程序的资源(图像,描述UI布局的xml文件等),
- 该libs文件夹将在成功构建后包含本机库,
- 该jni文件夹包含C / C ++应用程序源代码和NDK的构建脚本Android.mk并Application.mk生成本机库,
- AndroidManifest.xml 文件提供有关Android系统应用程序的基本信息(应用程序名称,主应用程序包的名称,应用程序的组件,所需的权限等)。它可以使用Eclipse向导或Android SDK中的Android工具创建。
- project.properties是一个包含目标Android平台和其他构建细节信息的文本文件。这个文件是由Eclipse生成的,或者可以使用android SDK中包含的android工具来创建。
- 注意
- 由于Android NDK构建系统依赖于它们,所以需要两者
AndroidManifest.xml
和project.properties
文件来编译应用程序的C ++部分。如果任何这些文件不存在,请在C ++部分之前编译项目的Java部分。
Android.mk和Application.mk脚本
该脚本Android.mk通常具有以下结构:
LOCAL_PATH := f$(call my-dir)
include f$(CLEAR_VARS)
LOCAL_MODULE := <module_name>
LOCAL_SRC_FILES := <list of .c and .cpp project files>
<some variable name> := <some variable value>
...
<some variable name> := <some variable value>
include f$(BUILD_SHARED_LIBRARY)
这是Android.mk构建Android应用程序的C ++源代码的最小文件。请注意,前两行和最后一行都是强制性的Android.mk。
通常,该文件Application.mk是可选的,但是在使用OpenCV的项目中,当在C ++中使用STL和异常时,也应该创建它。文件示例Application.mk:
APP_STL:= gnustl_static
APP_CPPFLAGS:= -frtti -fexceptions
APP_ABI:= all
从命令行构建应用程序本机部分
以下是编译Android应用程序的C ++部分的标准方法:
警告
我们强烈推荐使用cmd.exe(标准Windows控制台)而不是Windows上的Cygwin 。如果只有你绝对确定,你在做什么才能使用后者。Cygwin不是真正的支持,我们不大可能帮助你,万一你遇到一些问题。所以,只有当你能够自己处理后果时,才能使用它。
- 打开控制台并转到Android应用程序的根文件夹
cd <root folder of the project>/
2. 运行以下命令
<path_where_NDK_is_placed>/ndk-build
3. 执行该命令后,源代码的C ++部分被编译。
之后,可以(重新)编译应用程序的Java部分(使用Eclipse或Ant构建工具)。
<path_where_NDK_is_placed> / ndk-build V = 1
示例2:重建所有
<path_where_NDK_is_placed> / ndk-build -B
从Eclipse构建应用程序本机部分(CDT Builder)
有几种可能的方式将Android NDK的本机C ++代码的编译整合到Eclipse构建过程中。我们建议基于Eclipse CDT(C / C ++开发工具)Builder的方法。
important
OpenCV for Android软件包自版本2.4.2包含预配置的CDT构建器的示例项目。对于您自己的项目,请遵循以下步骤。
1、定义包含系统中Android NDK路径的NDKROOT环境变量(例如“X: Apps android-ndk-r8”或“/ opt / android-ndk-r8”)。
在Windows上,可以通过我的电脑 - >属性 - >高级 - >环境变量设置环境变量。在Windows 7上也可以在控制台会话中使用setx命令。
在Linux和MacOS上,可以通过向"~/.bashrc"文件中添加“export VAR_NAME = VAR_VALUE”行来设置环境变量,并注销然后再打开。
2、打开Eclipse并加载Android应用程序项目进行配置。
3、通过Eclipse菜单将C / C ++自然添加到项目中 - >其他 - > C / C ++ - >转换为C / C ++项目。
和:
4、选择要转换的项目。指定“项目类型”= Makefile项目,“工具链”=其他工具链。
5、 打开项目属性 - > C / C ++构建,取消选中使用默认构建命令,将“构建命令”文本替换为“make”
“$ {NDKROOT} /ndk-build.cmd”在Windows上,
在Linux和MacOS上的“$ {NDKROOT} / ndk-build”。
6、转到行为选项卡并更改“工作台构建类型”部分,如下所示:
7、按确定,确保在构建项目时成功调用ndk-build。
8、如果您在Eclipse编辑器中打开C ++源文件,您将看到语法错误通知。它们不是真正的错误,但需要额外的CDT配置。
9、打开项目属性 - > C / C ++常规 - >路径和符号,并为** C ++ ** 添加以下包含路径:
# 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
最后一个路径应该更改为OpenCV4Android SDK位置的正确绝对路径或相对路径。
这应该清除Eclipse C ++编辑器中的语法错误通知。
调试和测试
在本节中,我们将为您提供有关如何设置用于测试和调试Android项目的仿真器或硬件设备的易于遵循的说明。
AVD
AVD(Android虚拟设备)不太可能是测试与OpenCV相关的应用程序最方便的方法,但确定配置的最简单的方法。
- 假设你已经安装了Android SDK和Eclipse IDE,那么在Eclipse中转到Window - > AVD Manager。
- 在AVD管理器窗口中按新建按钮。
- 创建新的Android虚拟设备窗口将允许您为新设备选择一些属性,如目标API级别,SD卡等大小
- 当您单击创建AVD按钮时,您的新AVD将可在AVD管理器中使用。
- 按开始启动设备。请注意,任何AVD(也称为仿真器)通常比硬件Android设备慢得多,因此可能需要几分钟的时间才能启动。
- 在Eclipse IDE中运行 - >运行/调试,以常规或调试模式运行应用程序。设备选择器将允许您在正在运行的设备之间进行选择或启动新的设备。
硬件设备
如果您有Android设备,可以使用它来测试和调试应用程序。这样做更真实,虽然有点难以设置。您需要对Windows和Linux操作系统进行一些操作才能使用Android设备。Mac OS不需要额外的操作。有关在下面的子部分中配置硬件设备的详细信息。
有关更多信息,您还可以咨询官方的Android开发人员网站说明。
Windows主机
1、在Android设备上启用USB调试(通过设置菜单)。
2、使用USB电缆将Android设备连接到PC。
3、转到开始菜单,然后右键单击计算机。在上下文菜单中选择管理。可能会要求您提供管理权限。
4、在左窗格中选择设备管理器,并在列表中找到未知设备。您可以尝试拔下电源插头,然后重新插上电源,以检查列表中是否显示您的确切设备。
5、尝试运行安装Google USB驱动程序,无需任何修改:右键单击未知设备,选择属性菜单项 - >详细信息选项卡 - >更新驱动程序按钮。
6、选择浏览计算机驱动程序软件。
7、指定<Android SDK folder>/extras/google/usb_driver/
文件夹的路径。
8、如果您得到安装未经验证的驱动程序并报告成功的提示 - 您已完成USB驱动程序的安装。
9、否则(得到如下所示的故障)按照下面的步骤。
10、再次右键单击未知设备,选择属性 - >详细信息 - >硬件标识,并复制行USBVID_XXXX&PID_XXXX&MI_XX
。
11、现在打开文件<Android SDK folder>/extras/google/usb_driver/android_winusb.inf
。根据您的主机系统架构,选择Google.NTx86或Google.NTamd64部分。
12、应该有您的设备的现有记录,您需要手动添加一个。
13、保存android_winusb.inf
文件并尝试重新安装USB驱动程序。
14、这次安装应该成功。
15、而一个未知的设备现在被认为是Android手机。
16、通过adb devices命令可以在控制台中验证成功的设备USB连接。
17、现在,在Eclipse中运行 - >运行/调试以常规或调试模式运行应用程序。设备选择器将让您在设备之间进行选择。
Linux主机
默认情况下,Linux无法识别Android设备,但很容易解决此问题。在Ubuntu Linux上,您必须创建一个新的** / etc / udev / rules.d / 51-android.rules **配置文件,其中包含有关Android设备的信息。您可能会在这里找到一些供应商ID ,或执行lsusb命令来查看已插入的Android设备的VendorID。这是LG设备的这样一个例子:
SUBSYSTEM ==“usb”,ATTR {idVendor} ==“1004”,MODE =“0666”,GROUP =“plugdev”
然后重新启动您的adb服务器(甚至更好地重新启动系统),插入您的Android设备并执行adb设备命令。您将看到附加设备的列表:
Mac OS主机
不需要任何操作,只需通过USB连接设备并运行adb设备来检查连接。
下一步是什么
现在,当您设置和配置开发环境时,您可能需要继续安装OpenCV4Android SDK。您可以在单独的OpenCV4Android SDK教程中学习如何做到这一点。