OpenCV4Android 之 Android 开发简介

  本篇是 OpenCV4Android 三篇系列之一 —— Android开发简介。  

  本文旨在帮助大家学习Android开发基础和快速配置工作环境。文档以Windows 7配置为基础,但是同样也适用于Linux(Ubuntu),Mac OS X等支持Android SDK的操作系统。

  如果你完成了下面的步骤后还是不幸的遇到了问题,请通过OpenCV4Android 讨论组或者OpenCV 的Q&A forum联系我们,我们将尽我们最大努力帮你解决问题。

一、Preface (前言)

   Android是一个基于Linux内核的开源操作系统,它是由Google公司领导的开放手机联盟(Open Handset Alliance)组织开发的系统。详细信息请访问Android的官网

  Android开发明显不同于其它平台的软件开发,在开发Android程序前,我们强烈建议你熟悉下面的关键知识点:

    1. Java编程语言是主要的Android操作系统的开发语言,你可以访问Oracle关于Java的介绍。

    2. Java Native Interface (JNI) (Java本地接口)是一项可以让本地代码在Java virtual machine(Java虚拟机)上的运行的技术。同样,你也可以访问Oracle关于JNI的介绍。

    3. Android Activity (Android 活动)和它的生命周期,这对理解Android API类非常重要。

    4. OpenCV开发显然需要了解一些关于Android Camera 特有的知识。

二、 Android开发快速环境配置

  如果你是从头开始配置的话,你可以尝试由NVIDIA发布的Tegra Android Development Pack (TADP)。

Note:从V2.0版本后,TADP开发包已经包含了OpenCV for Tegra SDK,这就是我们常用的OpenCV4Android SDK,只不过它加入了一些Tegra特有的东西。

  • 安装至少需要1.6Gb的磁盘空间。
  • TADP将会下载Android SDK平台和Android SDK的谷歌服务,所以请联网下载(墙内的可能还要FQ)。
  • 在安装结束的时候TADP可能会请求你flash your development kit,如果你没有Tegra Development Kit的话就忽略它吧。
  • (UNIX) TADP在安装过程中将会请求你root权限。所以你必须是sudo组的成员。

三、Android开发手动环境配置

(一)Java开发

  为了在Java环境下开发Android必须安装下面的软件:

    1.Sun JDK 6 (Sun JDK 7 也可以)

    2.Android SDK

    3.Android SDK components

    4.Eclipse IDE

    5.ADT plugin for Eclipse

详细的下载和按照过程请访问原文

(二)C++本地开发

为了可以用C++开发Android需要安装下面的软件:

   1. Android NDK

  为了在Android平台下编译C++代码需要Android Native Development Kit (NDK)(本地开发包)。

  可以从这下载最新的NDK版本,安装Android NDK只需解压到电脑的某个文件夹就可以了。

Note:可以先阅读官方的Android NDK文档,文档在NDK库docs/目录下。关于使用NDK的主要文档是ANDROID-MK.html文件。你也可以访问APPLICATION-MK.html, NDK-BUILD.html,和CPU-ARM-NEON.html, CPLUSPLUS-SUPPORT.html, PREBUILTS.html去了解一些额为的信息。

   2.CDT plugin for Eclipse

  详细的下载和按照过程请访问原文

四、Android 程序结构

  通常情况下,Android程序的源代码有如下的结构:

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

  其中:

    • src 文件夹包含了程序的Java代码
    • res 文件夹包含了程序的资源(图片,xml文件等),
    • lib 文件夹包含成功构建(build)后的本地(native)库文件,
    • jni 文件夹包含C/C++程序源代码和NDK的构建脚本Android.mk和Application.mk,
    • AndroidManifest.xml文件表述了Android程序的系统信息(程序名,主程序的包名,程序组件,授权等)。使用Eclipse向导或者Android SDK 的android 工具可以创建该文件。
    • Project.properties 是一个文本文件,它包含了目标Android平台和其它构建细节的信息。这个文件有Eclipse或者android工具生产。

Note:AndroidManifest.xml 和project.properties文件是编译C++部分不可缺少的,因为Android NDK构建系统依赖于它们,如果它们中的任何一个不存在的话,将会在编译C++部分钱先编译Java部分。

五、Android.mk and Application.mk 脚本

  脚本Android.mk通常有下面的结构:

 1 LOCAL_PATH := $(call my-dir)
 2 
 3 include $(CLEAR_VARS)
 4 LOCAL_MODULE    := <module_name>
 5 LOCAL_SRC_FILES := <list of .c and .cpp project files>
 6 <some variable name> := <some variable value>
 7 ...
 8 <some variable name> := <some variable value>
 9 
10 include $(BUILD_SHARED_LIBRARY)

 

  这是一个最简化的Android.mk,它可以构建Android程序的C++源代码,需要注意的是前两行和最后一行是任何Android.mk必不可少的。

  通常情况下,Application.mk是可选的,但是在使用OpenCV,STL或者C++异常的时候,需要创建它,Application.mk的一般结构如下:

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := all

 

Note:我们建议为所有的该文件设置APP_ABI:=all,如果你想规定具体的目标,可以为ARMv5/ARMv6使用armeabi,为ARMv7使用armeabi-v7a,为Intel内核使用x86,为MIPS使用mips。(译注:上面提到的都是程序的二进制接口abi,因为C/C++是面向CPU编程的,所以构建时必须指定你所用机器的CPU型号,当前绝大多数Android手机都是armeabi-v7a CPU架构)。

六、使用命令行构建程序本地代码

  这是一个标准的方法编译Android程序的C++本地代码:

警告:我们强烈建议使用cmd.exe(标准控制台)而不是Windows上的Cygwin。只有在你非常明确你的操作时你才可以使用后者。

  1. 打开控制台,进入Android应用程序的根目录。

cd <root folder of the project>/

 

  2. 运行下面的命令

<path_where_NDK_is_placed>/ndk-build

 

Note:在Windows上,我们建议在标准控制台(cmd.exe)上使用ndk-build.cmd,而不是bash脚本Cygwin shell。

  3. 执行了上面的C++代码后,源代码就被编译了。之后程序的Java部分可以被编译了。

Note:ndk-build中的一些参数可以设置:

例1:Verbose compilation

<path_where_NDK_is_placed>/ndk-build V=1

例2:Rebuild all

<path_where_NDK_is_placed>/ndk-build -B

 

七、使用Eclipse构建程序本地代码

  有几种可能的方法配置本地C++代码的集成编译环境,它们都是把Android的NDK集成到Eclipse的构建过程中。我们建议使用基于Eclipse CDT Builder的方法。

  从版本2.4.2后OpenCV for Android 包已经包含了样例工程的预配置的CDT Builders。对于你自己的项目你应该按照下面的步骤设置:

  1. 定义NDKROOT环境变量,设置路径名为你系统Android NDK的路径。(例如,"X:\\Apps\\android-ndk-r8" 或者 "/opt/android-ndk-r8")。

Note:也可以在Eclipse中定义NDKROOT环境变量,但是当改变workspace的时候就需要重新设置,如果你更喜欢这种方式来配置环境变量的话,打开菜单Window -> Preferences -> C/C++ -> Build -> Environment,按下ADD...按钮,然后设置变量名为NDKROOT,设置变量值为你的本地Android NDK路径。

  2. 重启Eclipse应用更改。

  3. 打开Eclipse加载Android程序工程。

  4. 通过菜单New -> Other -> C/C++ -> Convert to a C/C++ Project 为工程添加C/C++特性。

 

  5. 选择需要转换的项目,指定“Project type” = Makefile project, “Toolchains” = Other Toolchain。

wps1515.tmp

  6. 打开Project Properties -> C/C++ Build 。取消使用默认的构建命令,把“Build command” 内容从"make" 改为:

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

"${NDKROOT}/ndk-build"         //在 Linux and MacOS.

 

 

  7. 切换到Behaviour选项卡,按照下面的显示来操作“ Workbench build type” 部分。

 

  8. 按OK 确保ndk-build 能够被成功调用。

 

  9. 如果在Eclipse编辑器打开C++源文件,将会发现语法错误标注。这些不是正真的错误,设置CDT可以消除这些错误。

 

  10. 打开Project Properties -> C/C++ General -> Paths and Symbols。然后为C++增加下面的Include 路径。

1 # for NDK r8 and prior:
2 ${NDKROOT}/platforms/android-9/arch-arm/usr/include
3 ${NDKROOT}/sources/cxx-stl/gnu-libstdc++/include
4 ${NDKROOT}/sources/cxx-stl/gnu-libstdc++/libs/armeabi-v7a/include
5 ${ProjDirPath}/../../sdk/native/jni/includ

 

# 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的绝对路径或者相对路径。这样就可以消除语法错误标记。

 

八、调试和测试

  这部分将会学到怎样设置模拟器或硬件设备来测试和调试Android应用程序。

(一)Android虚拟设备AVD

(二)硬件设备(手机)

  上面两部分比较简单,详细可参考原文

(译注:这部分可以简化,其实按照一个360手机助手就可以了)

九、下一步该做什么?

  现在,你已经配置好了Android开发的环境,可以继续按照OpenCV4Android SDK。你可以在独立的OpenCV4Android SDK教程中学习具体怎样去做。

转载请注明出处:OpenCV4Android开发简介 from Beenking

本文翻译自OpenCV官方文档Introduction into Android Development

posted @ 2014-12-26 19:11  Beenking  阅读(2608)  评论(0编辑  收藏  举报