OpenCV介绍:Java&Android——安卓开发入门 OpenCV v4.8.0

上一个教程使用 Clojure 开发 OpenCV 简介

下一个教程OpenCV4Android SDK

原作者Vsevolod Glumov
兼容性OpenCV >= 3.0

警告
本教程已废弃。

本指南旨在帮助你学习 Android 开发基础知识并快速设置工作环境。本指南是针对 Windows 7 编写的,但也适用于 Linux (Ubuntu)、Mac OS X 和 Android SDK 支持的任何其他操作系统。

如果您在彻底遵循这些步骤后遇到任何错误,请随时通过 OpenCV4Android 讨论组或 OpenCV Q&A 论坛联系我们。我们将竭尽全力帮助您。

前言

Android 是由谷歌领导的开放手机联盟开发的基于 Linux 的开源移动操作系统。一般详情请参见 Android 主页

Android 的开发与其他平台的开发有很大不同。因此,在开始为 Android 编程之前,我们建议您确保熟悉以下关键要点:

  1. Java 编程语言,这是 Android 操作系统的主要开发技术。此外,您还可以找到 Oracle 有关 Java 的有用文档
  2. Java 本地接口(JNI),这是一种在 Java 虚拟机中运行本地代码的技术。此外,Oracle 关于 JNI 的文档也很有用。
  3. Android Activity 及其生命周期,这是一个基本的 Android API 类。
  4. OpenCV 开发当然需要了解一些有关 Android 摄像头的具体知识。

手动设置 Android 开发环境

使用 Java 开发

使用 Java 开发 Android 需要安装以下软件:

  1. Sun JDK 6(也可安装 Sun JDK 7)

访问 Java SE 下载页面,下载适用于您操作系统的安装程序。

以下是 Ubuntu 和 Mac OS 的 JDK(Java 开发工具包)详细安装指南(只有 JDK 部分适用于 OpenCV)

注意事项
OpenJDK 不适用于 Android 开发,因为 Android SDK 仅支持 Sun JDK。如果使用 Ubuntu,安装
Sun JDK 后应运行以下命令设置 Sun java 环境: sudo update-java-alternatives --set java-6-sun

  1. 安卓 SDK

http://developer.android.com/sdk/index.html 获取最新的 Android SDK

以下是 Google 的 SDK 安装指南

注意事项
你可以选择下载 ADT Bundle 包,其中除 Android SDK 工具外,还包括 Eclipse + ADT +
NDK/CDT 插件、Android Platform-tools、最新的 Android 平台和用于模拟器的最新 Android 系统镜像

  • 这是首次创建 Android 开发环境的用户的最佳选择! 如果运行的是 x64 版本的 Ubuntu Linux,则需要安装用于 amd64 和 ia64 系统的 ia32 共享库。你可以使用以下命令安装它们: sudo apt-get install ia32-libs
    对于基于 Red Hat 的系统,以下命令可能会有所帮助: sudo yum install libXtst.i386
  1. 安卓 SDK 组件

您需要安装以下 SDK 组件:

  • Android SDK 工具,版本 20 或更新。

旧版本也可以使用,但不推荐使用。

  • SDK 平台 Android 3.0(API 11)。

OpenCV Java API 支持的最低平台为 Android 2.2(API 8)。这也是运行所提供示例所需的最低 API 级别。请参见 AndroidManifest.xml 文件中的 标签。但要成功编译,目标平台应设置为 Android 3.0(API 11)或更高版本。这不会妨碍它们在 Android 2.2 上运行。

在这里插入图片描述
有关安装/更新 SDK 组件的帮助,请参阅添加平台和软件包。

  1. Eclipse IDE

请查看 Android SDK System Requirements(Android SDK 系统要求)文档,查看与 Android SDK 兼容的 Eclipse 版本列表。对于 OpenCV 2.4.x,我们推荐使用 Eclipse 3.7 (Indigo)Eclipse 4.2 (Juno)。它们在 Windows 和 Linux 下都能很好地运行 OpenCV。

如果没有安装 Eclipse,可以从官方网站获取。

  1. Eclipse 的 ADT 插件

这些说明抄自 Android Developers 网站,如果遇到任何与 ADT 相关的问题,请查看该网站。

假设你已安装 Eclipse IDE,如上所述,请按照以下步骤下载并安装 ADT 插件:

a. 启动 Eclipse,然后选择帮助 -> 安装新软件…
b. 单击添加(在右上角)。
c. 在出现的 Add Repository 对话框中,在 Name(名称)中输入 “ADT Plugin”,在 Location(位置)中输入以下 URL:https://dl-ssl.google.com/android/eclipse/
d. 单击确定

注意
如果在获取插件时遇到困难,请尝试在位置 URL 中使用 “http”,而不是 “https”(出于安全考虑,首选 https)。

e. 在 "可用软件 "对话框中,选择 "开发工具 "旁边的复选框,然后单击 “下一步”。
f. 在下一个窗口中,你将看到要下载的工具列表。单击下一步。

注意
如果您还计划使用 Android NDK 开发本地 C++ 代码,请不要忘记同时启用 NDK Plugins 安装。

在这里插入图片描述
g. 阅读并接受许可协议,然后单击完成。

注意
如果收到安全警告,称无法确定软件的真实性或有效性,请单击确定。

h. 安装完成后,重新启动 Eclipse。

使用 C++ 进行本地开发

要使用 C++ 进行 Android 开发,您需要安装以下软件:

  1. Android NDK

要为 Android 平台编译 C++ 代码,您需要 Android Native Development Kit(NDK)。

您可以从下载页面获取最新版本的 NDK。要安装 Android NDK,只需将压缩包解压到电脑上的某个文件夹即可。以下是安装说明

注意事项
开始前,您可以阅读 Android NDK 存档中 docs/ 文件夹中的 Android NDK 官方文档。关于使用
Android NDK 构建系统的主要文章在 ANDROID-MK.html 文件中。其他信息请参见
APPLICATION-MK.htmlNDK-BUILD.html 文件以及
CPU-ARM-NEON.htmlCPLUSPLUS-SUPPORT.htmlPREBUILTS.html

  1. 用于 Eclipse 的 CDT 插件

如果您选择安装 Eclipse ADT 插件中的 NDK 插件组件(见上图),您的 Eclipse IDE 应该已经拥有 CDT 插件(即 C/C++ Development Tooling)。将 Android NDK 的 C++ 代码编译集成到 Eclipse 编译过程中有几种可能的方法。我们推荐基于 Eclipse CDT(C/C++ 开发工具)生成器的方法。

Android 应用程序结构

通常 Android 应用程序的源代码具有以下结构:

  • 项目根文件夹/
    • jni/
    • libs/
    • res/
    • src/
    • AndroidManifest.xml
    • project.properties
    • … 其他文件 …

其中

  • src 文件夹包含应用程序的 Java 代码、
  • res 文件夹包含应用程序的资源(图片、描述用户界面布局的 xml 文件等)、
  • libs 文件夹包含构建成功后的本地库、
  • jni 文件夹包含 C/C++ 应用程序源代码和 NDK 构建脚本 Android.mkApplication.mk 生成的本地库、
  • AndroidManifest.xml 文件向 Android 系统提供了应用程序的基本信息(应用程序名称、主应用程序软件包名称、应用程序组件、所需权限等)。

可以使用 Eclipse 向导或 Android SDK 中的 android 工具创建该文件。

  • project.properties 是一个文本文件,包含有关目标 Android 平台和其他构建细节的信息。该文件由 Eclipse 生成,也可使用 Android SDK 中的 android 工具创建。

注意事项
编译应用程序的 C++ 部分需要 AndroidManifest.xmlproject.properties 文件,因为
Android NDK 编译系统依赖它们。如果其中任何一个文件不存在,请先编译项目的 Java 部分,然后再编译 C++ 部分。

Android.mkApplication.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

注意
我们建议对所有目标机设置 APP_ABI := all。如果要明确指定目标,请在 ARMv5/ARMv6 中使用 armeabi,在
ARMv7 中使用 armeabi-v7a,在 Intel Atom 中使用 x86,在 MIPS 中使用 mips。

从命令行编译应用程序本地部分

以下是编译 Android 应用程序 C++ 部分的标准方法:

警告

我们强烈建议在 Windows 上使用 cmd.exe(标准 Windows 控制台)而不是 Cygwin。只有在绝对确定自己正在做什么的情况下,才能使用后者。Cygwin 并不真正受支持,如果您在使用过程中遇到问题,我们也不可能提供帮助。因此,只有当你有能力自己处理后果时才使用它。

  1. 打开控制台,进入 Android 应用程序的根文件夹
cd <项目根目录>/
  1. 运行以下命令
<NDK 所在路径>/ndk-build

注意
在 Windows 系统中,我们建议在标准 Windows 控制台 (cmd.exe) 中使用 ndk-build.cmd,而不是在
Cygwin shell 中使用类似的 bash 脚本。
在这里插入图片描述

  1. 执行该命令后,源代码的 C++ 部分将被编译。

之后就可以(使用 Eclipse 或 Ant 编译工具)编译应用程序的 Java 部分。

注意事项
可以为 ndk-build 设置一些参数: 例 1:详细编译
<path_where_NDK_is_placed>/ndk-build V=1
例 2: 全部重建
<path_where_NDK_is_placed>/ndk-build -B

从 Eclipse 构建应用程序本地部分(CDT 生成器)

将 Android NDK 的本地 C++ 代码编译集成到 Eclipse 构建流程中有几种可能的方法。我们推荐基于 Eclipse CDT(C/C++ 开发工具)生成器的方法。

重要

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 "行并注销后再登录来设置。

注释
也可以在 Eclipse IDE 中定义 NDKROOT
环境变量,但应在创建的每个新工作区中定义。如果比起设置系统环境变量,你更喜欢这个选项,打开 Eclipse 菜单 Window ->
Preferences -> C/C++ -> Build -> Environment,按 Add… 按钮并将变量名设为
NDKROOT,值设为本地 Android NDK 路径。#. 之后,你需要重启 Eclipse 以应用更改。

  1. 打开 Eclipse 并加载要配置的 Android 应用程序项目。
  2. 通过 Eclipse 菜单 New -> Other -> C/C++ -> Convert to a C/C++ Project 向项目添加 C/C++ Nature。

在这里插入图片描述
然后:
在这里插入图片描述
4. 选择要转换的项目。指定 “项目类型”= Makefile 项目,“工具链”= 其他工具链。
在这里插入图片描述
5. 打开 “项目属性” -> “C/C++ 编译”,取消选中 “使用默认编译命令”,将 "编译命令 "文本从 "make "替换为

Windows 上的"${NDKROOT}/ndk-build.cmd"、

在 Linux 和 MacOS 上改为"${NDKROOT}/ndk-build"。
在这里插入图片描述
6. 转到 "行为 "选项卡,更改 "工作台构建类型 "部分,如下图所示:在这里插入图片描述

  1. 按 “确定”,确保在构建项目时成功调用 ndk-build。在这里插入图片描述

  2. 如果在 Eclipse 编辑器中打开 C++ 源文件,就会看到语法错误通知。它们并不是真正的错误,但需要进行额外的 CDT 配置。

在这里插入图片描述

  1. 打开项目属性 -> 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(Android 虚拟设备)可能不是测试依赖于 OpenCV 的应用程序最方便的方法,但却是配置最简单的方法。

  1. 假设你已经安装了 Android SDK 和 Eclipse IDE,在 Eclipse 中进入 Window -> AVD Manager。
  2. 按下 AVD 管理器窗口中的新建按钮。
  3. 创建新的 Android 虚拟设备(Android Virtual Device)窗口会让你为新设备选择一些属性,如目标 API 级别、SD 卡大小等。

在这里插入图片描述

  1. 单击 "创建 AVD "按钮后,新的 AVD 将出现在 AVD 管理器中。
  2. 按 "开始 "启动设备。请注意,任何 AVD(又称模拟器)通常都比硬件 Android 设备慢得多,因此可能需要几分钟才能启动。
  3. 转到 Eclipse IDE 中的运行 -> 运行/调试,以常规或调试模式运行应用程序。设备选择器(Device Chooser)可让您从正在运行的设备中进行选择或启动一个新设备。

硬件设备

如果你有 Android 设备,可以用它来测试和调试你的应用程序。这种方式更真实,不过设置起来有点困难。要在 Windows 和 Linux 操作系统上使用安卓设备,需要进行一些操作。Mac OS 不需要额外操作。有关配置硬件设备的详细信息,请参阅下文各小节。

你也可以查阅官方 Android 开发者网站的说明,了解更多信息。

Windows 主机

  1. 在 Android 设备上启用 USB 调试(通过 "设置 "菜单)。
  2. 用 USB 电缆将安卓设备连接到电脑。
  3. 转到 "开始 "菜单,右键单击 “计算机”。在右键菜单中选择 “管理”。您可能会被要求获得管理权限。
  4. 在左侧窗格中选择 “设备管理器”,然后在列表中找到未知设备。您可以尝试拔下它,然后再插回去,以检查列表中出现的是否正是您的设备。

在这里插入图片描述

  1. 试试在不做任何修改的情况下安装 Google USB 驱动程序的运气:右键单击未知设备,选择 "属性 "菜单项 -> "详细信息 "选项卡 -> "更新驱动程序 "按钮。

在这里插入图片描述

  1. 选择浏览计算机以获取驱动程序软件。

在这里插入图片描述

  1. 指定 <Android SDK 文件夹>/extras/google/usb_driver/ 文件夹的路径。

在这里插入图片描述

  1. 如果提示安装未验证的驱动程序并报告成功,则 USB 驱动程序安装完成。

在这里插入图片描述
在这里插入图片描述

  1. 否则(出现如下图所示的故障),请执行下一步操作。

在这里插入图片描述

  1. 再次右键单击未知设备,选择 “属性”->“详细信息”->“硬件编号”,然后复制 USB\VID_XXXX&PID_XXXX&MI_XX 这样的行。

在这里插入图片描述

  1. 现在打开文件 <Android SDK 文件夹>/extras/google/usb_driver/android_winusb.inf。根据主机系统架构选择 Google.NTx86 或 Google.NTamd64 部分。

在这里插入图片描述

  1. 您的设备应该有一条类似于现有记录的记录,您需要手动添加一条。

在这里插入图片描述

  1. 保存 android_winusb.inf 文件并尝试再次安装 USB 驱动程序。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 这次安装应该会成功。

在这里插入图片描述
在这里插入图片描述

  1. 现在,未知设备已被识别为安卓手机。

在这里插入图片描述

  1. 可在控制台中通过 adb devices 命令验证设备 USB 连接是否成功。

在这里插入图片描述

  1. 现在,在 Eclipse 中进入运行 -> 运行/调试,以常规或调试模式运行应用程序。设备选择器会让你在设备中进行选择。
    Linux 主机
    默认情况下,Linux 无法识别 Android 设备,但要解决这个问题很容易。在 Ubuntu Linux 上,你必须新建一个**/etc/udev/rules.d/51-android.rules**配置文件,其中包含有关 Android 设备的信息。你可以在这里找到一些供应商 ID,或执行 lsusb 命令查看已插入的安卓设备的供应商 ID。下面是 LG 设备的此类文件示例:
SUBSYSTEM=="usb", ATTR{idVendor}=="1004", MODE="0666", GROUP="plugdev"

然后重启 adb 服务器(最好重启系统),插入 Android 设备并执行 adb devices 命令。你将看到已连接设备的列表:

在这里插入图片描述
Mac OS 主机
无需任何操作,只需通过 USB 连接设备并运行 adb 设备检查连接情况。

下一步

现在,当你建立并配置好开发环境后,你可能想继续安装 OpenCV4Android SDK。您可以在单独的 OpenCV4Android SDK 教程中了解如何安装。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值