zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【转】寻找最好的笔记软件:海选篇 (v1.0)
    【转】git rebase简介(基本篇)
    【转】学会这13个原则写UI界面文案,用户才能秒懂
    sqlserver巧用row_number和partition by分组取top数据
    使用SQL语句清空数据库所有表的数据
    在 SQL Server 2005 中配置数据库邮件
    SQL compute by 的使用
    SQL Cursor 基本用法
    Sqlserver双机热备文档(无域)
    查询分页的几种Sql写法
  • 原文地址:https://www.cnblogs.com/bestheart/p/4187436.html
Copyright © 2011-2022 走看看