文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏

这篇文章可以帮且你学习Android开发的基本知识,并且快速的配置你的工作环境.是在Windows 7下编写的,当然它也同样适用于Linux(Ubuntu),Mac等其它操作系统的Android开发.

如果你按下面的步骤执行时发生错误时,不用担心,你可以通过 OpenCV4Android讨论组或OpenCV的问答论坛联系我们.

 

前言

Android 是基于Linux, 它是由谷歌领导的开放手机联盟所开发的开源手机操作系统.可以在 Android 官网 看到更多信息.

第 1 段(可获 2 积分)

在Windows下进行Android开发,与在其它系统开发是有明显不同的.所以在我们进行Android编程之前,建议你应该熟悉下面的概念:

  1. Java 是开发Android系统应用程序的主要编程语言.你可以找到一些有用的 Java文档 .
  2. Java本地接口 (JNI) 是可以在Java虚拟机中运行本地代码的技术.另外,你可以找到一些  Oracle JNI技术文档 .
  3. Android Activity 和它的生命周期, 是Android API 类的基础.
  4. OpenCV 的开发需要你对 Android摄像头  的知识有所了解.
第 2 段(可获 2 积分)

快速设置Android开发环境

如果想使用免安装的绿色版,你可以尝试英伟达发布的 Tegra Android 开发包 (TADP).

提示

从TADP 2.0版本开始包含Tegra的OpenCV开发包,它是Tegra基于OpenCV4Android开发包扩展后的具体实现。

解压后,TADP将会自动设置所有的环境变量,因此你可以跳过后续的指导。

如果你是Android开发的新手,我们推荐你使用TADP进行开发。

提示

英伟达Tegra开发平台的 Tegra Android 开发包包含了一些特殊功能,但是它并没有限制只能在Tegra的设备上使用。

 

第 3 段(可获 2 积分)
  • 安装至少需要1.6G的硬盘存储空间.

  • TADP将会从谷歌服务器下载 Android SDK 与Android NDK , 所以在安装时需要网络。

  • TADP 在安装最后可能会询问是否显示你的开发工具包 。 如果你没有 Tegra开发工具包 ,你可以跳过这一步.

  • 在UNIX 下安装TADP的过程中需要管理员权限,所以需要确保你有管理员权限使用 sudo 

Android开发环境设置指导

Java开发环境

用Java进行Android开发时,你需要安装以下软件:

第 4 段(可获 2 积分)
  1. Sun JDK 6 (Sun JDK 7也可以)

    访问 Java SE 下载页面 然后根据你的操作系统下载安装包.

    这里有一份详细的JDK 安装指导 ,是关于Ubuntu 和 Mac OS (只有JDK的部分适用于 OpenCV)

    提示

    自从Android 开发包只支持Sun JDK后,OpenJDK就不适合Android 开发了。如果你使用的是ubuntu,安装完Sun JDK后,你需要支行下面的命令来设置java的环境变量:

    sudo update-java-alternatives --set java-6-sun

     

  2. Android 开发工具包

    从这里获取最新的Android 开发工具包 http://developer.android.com/sdk/index.html

    谷歌写了一份开发工具包安装手册.

    提示

    你也可以选择下载 ADT Bundle 包,因为Android软件开发工具包中已经包含 Eclipse + ADT + NDK/CDT 插件, Android 平台工具,最新的Android平台,和模拟器的最新Android系统镜像 - 对第一次设置Android开发环境来说,这是最好的选择!

    提示

    如果你在64位的Ubuntu上运行,你需要在amd64上使用ia32共享库,而ia64的共享库系统已经安装了。你可以通过下面的命令安装它们:

    sudo apt-get install ia32-libs

     

    如果是基本 Red Hat操作系统,下面的命令可能更有效:

    sudo yum install libXtst.i386

     

  3. Android SDK 组件

    你需要安装下面的 SDK组件:

    查看添加开发平台与包 , 可以帮助安装/更新 SDK 组件。Android SDK Manager

    • Android 软件开发工具包, 版本20 或以上.

      老的版本也可以正常工作,但我们不推荐使用。

  4. Eclipse IDE

    查看Android SDK 系统要求文档中,Eclipse版本兼容Android SDK列表。 对于OpenCV 2.4.x 我们rqadEclipse 3.7 (Indigo) 或Eclipse 4.2 (Juno)。 在Windows和Linux下开发OpenCV,它们都工作的很好。

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

  5. Eclipse下的ADT 插件

    这里的安装步骤是从 Android开发都者网站转载的,如果有任何关于ADT的问题请指正。

    首先确保你已安装 Eclipse IDE,和上面描述的一要,下面的这几步是关于ADT插件下载与安装:

    1. 启动Eclipse, 然后选择 Help菜单 ‣ 安装新软件...

    2. 点击Add (在右上角).

    3. 在弹出的添加资源库对话框内,在名称栏输入"ADT Plugin",在地址栏输入:

      https://dl-ssl.google.com/android/eclipse/

    4. 点击OK

      提示

      如果你在获取插件的时候有问题,尝试在地址栏内使用"http"代替"https"(https可以更好的解决安全问题)。

    5. 可用的软件列表对话框内,选中开发者工具旁边的复选框,然后点击NextADT installation

    6. 阅读并接受许可协议, 然后点击 Finish.

      提示

      如果你收到一个无法确认软件安全与有效的安全警告,点击 OK.

    7. 安装完以后重启 Eclipse.

第 5 段(可获 2 积分)

C++的本地代码开发

使用C++开发Android项目中的本地代码,你需要安装如下软件:

  1. Android NDK

    为了编译Android平台的C++ 代码,你需要 Android 本地开发工具包(NDK).

    你可以从下载页这里获取NDK的最新版本.下载完Android NDK 后直接解压到电脑上任何目录.这里有 安装手册

    提示

    在开始安装之前,你可以阅读Android NDK压缩包内docs目录下的Android NDK官方文档.使用Android NDK构建系统的主要文章在ANDROID-MK.html内.其它信息你可以阅读APPLICATION-MK.html, NDK-BUILD.html文件和CPU-ARM-NEON.html, CPLUSPLUS-SUPPORT.html, PREBUILTS.html文件.

  2. Eclipse中的CDT插件

    如果你选择安装NDK插件,一个Eclipse ADT插件(看上图),你的Eclipse IDE应该已经安装了CDT插件(指的是C/C++开发工具).有几种可能的方法,可以在Eclipse编译过程中使用Android NDK集成编译C++代码.我们推荐的方法是基于Eclipse CDT构建器编译.

第 6 段(可获 2 积分)

Android 应用程序结构

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

  • 项目的根目录/
    • jni/
    • libs/
    • res/
    • src/
    • AndroidManifest.xml
    • project.properties
    • ... 其它文件 ...

说明:

  • src文件夹存放应用程序的Java代码,

  • res 文件夹存放应用程序的资源文件(images,,描述UI而已的xml 文件等),

  • libs文件夹包含成功编译后的本地包,

  • jni 包含 C/C++ 应用程序源码和NDK的构建脚本 Android.mk和Application.mk用于生成本地库,

  • AndroidManifest.xml文件是用于描述Android系统上应用程序的基本信息(应用程序的名称,主应用程序包的名称,应用程序组件,所需的权限信息等)

    你可以通过Eclipse创建它,也可以通过Android 软件开发工具包中的android工具创建。

  • project.properties 是一个文本文件,它包含支持的Android平台设备信息和其它构建细节。这个文件是Eclipse创建的,也可以通过Android 软件开发工具包中的android工具创建。

第 7 段(可获 2 积分)

提示

自从 Android NDK编译系统依赖 AndroidManifest.xml 和project.properties 两个文件,在编译C++部分的程序代码时它们是必须的。如果有任何一个文件不存在,你需要在编译C++代码之前编译Java项目。

Android.mk 和Application.mk 脚本

 Android.mk脚本通常具有以下结构:

LOCAL_PATH := $(call my-dir)

include $(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 $(BUILD_SHARED_LIBRARY)

这是最小的 Android.mk文件, 在 Android 应用程序中编译C++源码。注意,对所有的Android.mk文件来说,前两行与最后一行都是必须的。

通常Application.mk文件是可选的,但OpenCV的项目除外,如果C++代码中用到STL 与异常,你还是应该创建这个文件。一个Application.mk文件示例:

第 8 段(可获 2 积分)
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := all

提示

对所有设备来说我们建议设置 APP_ABI := all。如果你需要指明设备,用armeabi表示ARMv5/ARMv,armeabi-v7a 表示ARMv7, x86 表示 Intel Atom或 mips 表示 MIPS.

通过命令行构建应用程序本地代码

这是标准的编译Android程序的C++代码:

警告

Windows系统下,我们强烈建议使用cmd.exe(标准的Windows控制台)代替Cygwin。除非你对Cygwin非常熟悉,知道你在做什么。Cygwin真的不建议使用,如果遇到什么问题的话我们很难帮你解决。所以如果你能力自己解决问题,你才可以使用它。

第 9 段(可获 2 积分)
  1. 打开控制台,然后进入到 Android 应用程序的根目录

    cd <项目的根目录>/
    
  2. 运行以下命令

    <NDK安装目录>/ndk-build
    

    提示

    在Windows操作系统上,我们推荐在标准的windows的控制台(cmd.exe)来运行 ndk-build.cmd,比在Cygwin中执行相同的脚本要好.

  3. NDK build
  4. 执行完这个命令后,关于C++源码部分就编译完了.

上面的执行完后,Java部分的应用程序就可以(重新)编译了.(即可以用Eclipse与可以使用Ant编译工具).

提示

可以为 ndk-build命令设置一些参数:

例 1: 编译时输出日志

<NDK安装目录>/ndk-build V=1

例 2: 重新构建所有

<NDK安装目录>/ndk-build -B
第 10 段(可获 2 积分)

Eclipse中构建本地代码 (CDT 构建器)

在Eclipse中使用Android NDK编译本地C++代码有好几种方式。 我们推荐使用 Eclipse CDT 构建器来完成这项工作.

重点

Android 开发包中的OpenCV,从2.4.2版本以来,它就包含预设CDT构建器的示例项目。在你自己的项目中执行如下步骤。

  1. 在系统中定义NDKROOT环境变量,它包含Android NDK的安装路径 (如. "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 菜单栏 窗口 -> 首选项 -> C/C++ -> 构建 -> 环境变量, 点击 添加... 按钮 并设置一个名为NDKROOT的变量,它的值是Android NDK 路径。

  2. 设置完以后,你需要重启Eclipse用于让变更生效。

  3. 打开Eclipse,导入Android app 程序并配置.

  4. 为项目添加 C/C++ Nature,可以通过 Eclipse 菜单 新增 -> 其它 -> C/C++ -> 转换为 C/C++ 项目.Configure CDT和:Configure CDT

  5. 选中需要转换的项目. 设置“Project type” = Makefile project, “Toolchains” = Other Toolchain.Configure CDT

  6. 打开 项目属性 -> C/C++ 构建器, 取消选中 使用默认构建命令,在"构建命令"输入框内使用"make"来代替 

    Windows上用"${NDKROOT}/ndk-build.cmd" ,

    Linux 和 MacOS上用"${NDKROOT}/ndk-build"Configure CDT

  7. 切换到 行为 选项卡并按下图更改"工作台构建类型"部分 :Configure CDT

  8. 点击 确定 并确保在构建建目时ndk-build 成功的被调用.Configure CDT

  9. 如果你在Eclipse编辑器中打开C++源文件,你可以看到语法错误的提示.它们并不是真的有错误,但CDT配置是必须的.
    Configure CDT

  10. 打开 项目属性 -> 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++ 编辑器中,语法异常的提示将会消失.Configure CDT

 

第 11 段(可获 2 积分)

调试和测试

在这一部分,我们将给你一些易于实践的指导,用于你在测试或调试Android项目时设置模拟器或硬件设备。

AVD

使用AVD (Android虚拟设备) 来测试OpenCV的应用程序可能并不是最合适的方式, 但是它的配置却是最简单的。

  1. 确保你已经安装了 Android SDKEclipse IDE ,在 Eclipse中点击菜单栏中的 容器 -> AVD 管理器.

  2. AVD 管事器容器内点击 新增 按钮 。

  3. 当点击 添加 AVD 按钮后,, 你新加的 AVD 将会显示在 AVD 管理器中。

  4. 点击开始 将会加载设备。要知道任何AVD(或称为模拟器)都比真实的Android设备启动要慢。

  5. 在 Eclipse IDE中点击 运行 -> 运行/调试 ,可以使用正常或调试模式启动应用程序。 在启动的时候设备选择器将会让你选择需要运行的设备或者创建一个新设备。

第 12 段(可获 2 积分)

硬件设备

如果你有一个 Android 设备, 你可以用它测试或调试你的应用程序. 这种方式比较真实的,尽管它有点难以安装. 你需要做一些设置,才能在Windows和Linux操作系统上使用Android设备.但在Mac OS上却不需要做这些额外设置. 配置硬件设备的详细信息请看下面几部分.

更多信息你也可以咨询官方的 Android开发都教程 .

Windows 系统电脑

  1. 启用 Android设备上的USB 调试 (通过 设置 菜单).

  2. 通过USB数据线将Android设备连接到电脑上.

  3. 跳转到 开始菜单 并在电脑上右击 . 在主菜单上选择 管理 . 你可能会被要求管理权限.

  4. 现在, 在 Eclipse 中点击 运行 -> 运行/调试, 可以使用正常或调试模式启动应用程序. 设备选择器 将会让你选择设备.Unknown device

  5. 试试你的运气,未做任何更改安装 Google USB 驱动 : 在未知设备上右键单击, 选择属性 栏目 –> 详细 选项卡 –> 更新驱动程序 按钮.Device properties

  6. 选择 浏览电脑上的软件驱动.Browse for driver

  7. 将目录指向 <Android SDK 文件夹>/extras/google/usb_driver/ folder.Browse for driver

  8. 如果它提示你安装未验证的设备,然后提示成功信息--- 你已经完成USB驱动的安装.Install promptInstalled OK

  9. 否则(得到如下所示的失败等) 执行如下步骤.No driver

  10. 再次在未知设备上 右击 , 选择 属性 –> 详细 –> 硬件标识 并复制那一行,类似于 USB\VID_XXXX&PID_XXXX&MI_XX.Device properties details

  11. 现在打开文件 <Android SDK文件夹>/extras/google/usb_driver/android_winusb.inf. 选择Google.NTx86 或Google.NTamd64部分是依赖于你的操作系统."android_winusb.inf"

  12. 这里应该有一条记录对应于你的设备,看起来和已经存在的某一条类似,并且你需要手动添加一个."android_winusb.inf"

  13. 保存android_winusb.inf 文件并尝试重新安装USB驱动.Device propertiesBrowse for driverBrowse for driver

  14. 这次安装应该会成功.Install promptInstalled OK

  15. 现在不明设备现在被识别为Android手机."Known" device

  16. 在控制台可以通过adb devices命令来校验链接成功的USB设备."adb devices"

  17. 现在, 在Eclipse中 点击 运行 -> 运行/调试 ,可以使用正常或调试模式启动应用程序.设备选择器 将让你选择一个设备

第 13 段(可获 2 积分)

Linux电脑系统

默认情况下Linux 并不认识 Android 设备, 但很容易解决这个问题. 在 Ubuntu Linux你需要创建一个包含你的Android设备的信息的新 /etc/udev/rules.d/51-android.rules 配置文件 . 在这里 你会看到一些供应商ID ,或执行 lsusb 命令,查看插入的Android设备的供应商ID . 这是LG设备文件的一个实例:

SUBSYSTEM=="usb", ATTR{idVendor}=="1004",  MODE="0666", GROUP="plugdev"

然后重新启动 adb 服务器 (最好重启系统), 插上你的安卓设备 然后执行 adb devices 命令. 你将看到连接设备的列表:

第 14 段(可获 2 积分)

Mac电脑系统

不需要其它操作, 通过USB连接上你的设备,然后运行adb devices命令检查连接.

下一步是什么

现在, 当你设置并配置好开发环境后,你可能希望继续安装 OpenCV4Android 开发包. 你可以在OpenCV4Android开发包 手册中学习怎么安装.

第 15 段(可获 2 积分)

文章评论