本篇是 OpenCV4Android 三篇系列之一 —— Android开发简介。
本文旨在帮助大家学习Android开发基础和快速配置工作环境。文档以Windows 7配置为基础,但是同样也适用于Linux(Ubuntu),Mac OS X等支持Android SDK的操作系统。
如果你完成了下面的步骤后还是不幸的遇到了问题,请通过OpenCV4Android 讨论组或者OpenCV 的Q&A forum联系我们,我们将尽我们最大努力帮你解决问题。
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 特有的知识。
如果你是从头开始配置的话,你可以尝试由NVIDIA发布的Tegra Android Development Pack (TADP)。
Note:从V2.0版本后,TADP开发包已经包含了OpenCV for Tegra SDK,这就是我们常用的OpenCV4Android SDK,只不过它加入了一些Tegra特有的东西。
为了在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++开发Android需要安装下面的软件:
为了在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去了解一些额为的信息。
详细的下载和按照过程请访问原文。
通常情况下,Android程序的源代码有如下的结构:
其中:
Note:AndroidManifest.xml 和project.properties文件是编译C++部分不可缺少的,因为Android NDK构建系统依赖于它们,如果它们中的任何一个不存在的话,将会在编译C++部分钱先编译Java部分。
脚本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
有几种可能的方法配置本地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。
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应用程序。
上面两部分比较简单,详细可参考原文。
(译注:这部分可以简化,其实按照一个360手机助手就可以了)
现在,你已经配置好了Android开发的环境,可以继续按照OpenCV4Android SDK。你可以在独立的OpenCV4Android SDK教程中学习具体怎样去做。
转载请注明出处:OpenCV4Android开发简介 from Beenking
本文翻译自OpenCV官方文档Introduction into Android Development