本文旨在帮助大家学习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。
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教程中学习具体怎样去做。