第1章 千里之行始于足下——Android平台简介及开发环境的使用

Android是Google公司于2007年11月5日发布的基于Linux内核的移动平台,该平台由操作系统、中间件、用户界面和应用软件组成,是一款真正开放的移动开发平台。

本章将介绍Android系统的起源、特点、应用程序框架以及开发环境的搭建,让读者对Android平台有个初步的了解,之后将导入并在手机上运行第一款 Android 程序 JengaMe,带领读者步入Android开发的大门。

1.1 Android的来龙去脉

Android的创始人Andy Rubin是硅谷著名的“极客”,他离开Danger移动计算公司后不久便创立了Android公司,并开发了Android平台,他一直希望将Android平台打造成完全开放的移动终端平台。之后Android公司被Google公司看中并将其收购。不久,号称全球最大的搜索服务商Google大举进军移动通信市场,并推出自主品牌的移动终端产品。到本书出版为止,Android已有5年的发展了,下面将带领读者简单回顾一下Android的发展历程。

· 2007年11月初,Google正式宣布与其他33家手机厂商、软硬件供应商、手机芯片供应商、移动运营商联合组成开放手机联盟(Open Handset Alliance),并发布名为Android的开放手机软件平台。

· 2010年10月份,谷歌宣布Android系统达到了第一个里程碑,即电子市场上获得官方数字认证的Android应用数量已经达到了10万个,Android系统的应用增长非常迅速。

· 2011年8月2日,Android手机已占据全球智能机市场48%的份额,并在亚太地区市场占据统治地位,终结了Symbian(塞班系统)的霸主地位,跃居全球第一。

· 2011年9月份,Android系统的应用数已经达到了48万,而在智能手机市场,Android系统的占有率已经达到了43%,继续排在移动操作系统首位。

· 2011年10月19日,谷歌发布全新的Android 4.0操作系统,这款系统被谷歌命名为 Ice Cream Sandwich(冰激凌三明治)。

· 2012年1月6日,谷歌Android Market已有10万开发者推出超过 40万活跃的应用,大多数的应用程序为免费。

· 2012年 10月30日,谷歌又发布了Android 4.2操作系统,被谷歌命名为 Jelly Bean(果冻豆)。

1.2 掀起Android的盖头来

自从Android发布以来,越来越多的人关注Android的发展,越来越多的开发人员在Android系统平台上开发应用,那是什么使Android备受青睐,什么使Android在众多移动平台中脱颖而出呢?

1.2.1 选择Android的理由

与其他手机的操作系统相比,Android具有如下优点:

· 开放性;

· 平等性;

· 无界性;

· 方便性;

· 硬件的丰富性。

下面将对以上各个优点进行简单介绍。

1.开放性

提到Android的优势,首先想到的一定是其真正的开放,其开放性包含底层的操作系统以及上层的应用程序等。Google与开放手机联盟合作开发Android的目的就是建立标准化、开放式的移动软件平台,在移动产业内形成一个开放式的生态系统。

Android 的开放性也同样会使大量的程序开发人员投入到 Android 程序的开发中,这将为Android平台带来大量新的应用。

2.平等性

在Android的系统上,所有的应用程序完全平等,系统默认自带的程序与自己开发的程序没有任何区别,程序开发人员可以开发个人喜爱的应用程序来替代系统的程序,构建个性化的Android手机系统,这些功能在其他的手机平台是没有的。

在开发之初,Android平台就被设计成由一系列应用程序组成的平台,所有的应用程序都运行在一个虚拟机上面。该虚拟机提供了系列应用程序之间和硬件资源通信的API。

3.无界性

Android平台的无界性表现在应用程序之间的无界,开发人员可以很轻松地将自己开发的程序与其他应用程序进行交互,如应用程序需要播放声音的模块,而正好你的手机中已经有一个成熟的音乐播放器,此时就不需要再重复开发音乐播放功能,只需简单地加上几行代码即可将成熟的音乐播放功能添加到自己的程序中。

4.方便性

在Android平台中开发应用程序是非常方便的,如果对Android平台比较熟悉,想开发一个功能全面的应用程序并不是什么难事。Android平台为开发人员提供了大量的实用库及方便的工具,同时也将Google Map等强大的功能集成了进来,只需简单的几行调用代码即可将强大的地图功能添加到自己的程序中。

5.硬件的丰富性

由于平台的开放,众多的硬件制造商推出了各种各样的产品,但这些产品功能上的差异并不影响数据的同步与软件的兼容,例如,原来在诺基亚手机上的应用程序,可以很轻松地被移植到摩托罗拉手机上使用,且联系人、短信息等资料更是可以方便地转移。

1.2.2 Android的应用程序框架

从软件分层的角度来说,Android 平台由应用程序、应用程序框架、Android 运行时库层以及Linux内核共4部分构成,本节将分别介绍各层的功能,分层结构如图1-1所示。

figure_0020_0002

▲图1-1 Android平台架构图

1.应用程序层

本层的所有应用程序都是用 Java 语言编写的,一般情况下,很多应用程序都是在系列相同的核心应用程序包中共同发布的,主要有拨号程序、浏览器、音乐播放器、通信录等。该层的程序是完全平等的,开发人员可以任意将Android自带的程序替换成自己的应用程序。

2.应用程序框架层

应用程序框架层是开发人员接触最多的层面。该应用程序的框架设计简化了组件的重用,其中任何一个应用程序都可以发布自身的功能供其他应用程序调用,这也使用户可以很方便地替换程序的组件而不影响其他模块的使用。当然,这种替换需要遵循框架的安全性限制。

该层主要包含以下9部分,如图1-2所示。

figure_0021_0003

▲图1-2 应用程序框架

· 活动管理(Activity Manager):用来管理程序的生命周期,以及提供最常用的导航回退功能。

· 窗口管理(Window Manager):用来管理所有的应用程序窗口。

· 内容管理(Content Providers):通过内容管理,可以使一个应用程序访问其他应用程序的数据,或者共享数据。

· 视图管理(View System):用来构建应用程序的基本组件,包括按钮、列表、网格、文本框,甚至是可嵌入的Web浏览器。

· 包管理(Package Manager):用来管理Android系统内的程序。

· 电话管理(Telephony Manager):所有的移动设备的功能统一归电话管理器管理。

· 资源管理(Resource Manager):资源管理器可以为应用程序提供所需要的资源,包括图片、文本、声音、本地字符串,甚至是布局文件。

· 位置管理(Location Manager):该管理器是用来提供位置服务的,如GPS定位等。

· 通知管理(Notification Manager):主要对手机顶部状态栏的管理,开发人员在开发Android程序时会经常使用,如来短信提示、电量低提示,还有后台运行程序的提示等。

3.Android运行时库

该层包含两部分,程序库及Android运行时库。

程序库为一些C/C++库,这些库能够被Android系统中不同的应用程序调用,并通过应用程序框架为开发者提供服务。而Android运行时库包含了Java编程语言核心库的大部分功能,提供了程序运行时所需调用的功能函数。

程序库主要包含的功能库如图1-3所示。

figure_0022_0004

▲图1-3 程序库框架

· libc:是一个从BSD继承来的标准C系统函数库,专门针对移动设备优化过的。

· Media Framework:基于PacketVideo公司的OpenCORE。支持多种常用音频、视频格式回放和录制,并支持多种图像文件,如MPEG-4、H.264、MP3、AAC、AMR、JPG、PNG等。

· Surface Manager:Surface Manager主要管理多个应用程序同时执行时,各个程序之间的显示与存取,并且为多个应用程序提供了2D和3D图层无缝的融合。

· SQLite:所有应用程序都可以使用的轻量级关系型数据库引擎。

· WebKit:是一套最新的网页浏览器引擎。同时支持Android浏览器和一个可嵌入的Web视图。

· OpenGL ES:是基于OpenGL ES 1.0 API标准来实现的 3D绘制函数库。该函数库支持软件和硬件两种加速方式执行。

· FreeType:提供位图(bitmap)和矢量图(vector)两种字体显示。

· SGL:提供了2D图形绘制的引擎。

Android运行时库包括核心库及Dalivik虚拟机,如图1-4所示。

figure_0022_0005

▲图1-4 Android运行时库

· 核心库(Core Libraries):该核心库包括 Java语言所需要的基本函数及Android的核心库。与标准Java不一样的是,系统为每个Android的应用程序提供了单独的Dalvik虚拟机来执行,即每个应用程序拥有自己单独的线程。

· Dalvik虚拟机(Dalvik Virtual Machine):大多数的虚拟机(包括 JVM)都是基于栈的,而Dalvik虚拟机则是基于寄存器的,它可以支持已转换为.dex格式的Java应用程序的运行。.dex格式是专门为Dalvik虚拟机设计的,更适合内存和处理器速度有限的系统。

4.Linux内核

Android平台中操作系统采用的是Linux 2.6内核,其安全性、内存管理、进程管理、网络协议栈和驱动模型等基本依赖于Linux。对于程序开发人员来说,该层为软件与硬件之间增加的一层抽象层,使开发过程中不必时时考虑底层硬件的细节。而对于手机开发商而言,对此层进行相应的修改即可将Android平台运行到自己的硬件平台之上。

1.3 Android开发环境的搭建

本节主要讲述如何构建基于Eclipse的Android开发环境,之后在Eclipse中导入并在手机上运行第一个Android程序JengaMe。

1.3.1 SDK的下载及安装

前面已经对Android平台进行了简单的介绍,从本节开始,将带领读者逐步搭建自己的开发环境,具体的步骤如下。

(1)登录Oracle官方网站 http://www.oracle.com/technetwork/java/index.html,单击 Java SE下载最新的JDK安装程序。

(2)双击刚刚下载的JDK安装程序jdk-7u11-windows-i586.exe,根据提示将JDK安装到默认目录。

(3)右键单击我的电脑,依次选择属性/高级/环境变量,在系统变量中新建一个名为JAVA_HOME,值为“C:\Program Files\Java\jdk1.7.0_11”的环境变量。

(4)再打开Path环境变量,在最后加上“C:\Program Files\Java\jdk1.7.0_11\bin;”,单击“确定”按钮即可。

(5)到 http://developer.android.com/sdk/index.html 页面下载最新的 SDK,本书使用的版本是 4.2,其他版本的安装与配置方法基本相同。

(6)将下载好的SDK压缩包解压到C盘根目录下,如图1-5所示。

figure_0023_0006

▲图1-5 Android SDK安装环境

(7)右键单击我的电脑,依次选择属性/高级/环境变量,打开Path系统环境变量,在其最后加上SDK的解压目录中的tools目录“C:\android-sdk-windows\tools”,单击“确定”按钮完成配置,如图1-6所示。

figure_0023_0007

▲图1-6 SDK环境变量配置

1.3.2 Eclipse集成开发环境的搭建

上一小节已经讲解了SDK的安装与配置,本小节将带领读者构建基于Eclipse的集成开发环境,具体步骤如下。

(1)读者只需登录http://www.eclipse.org/downloads/即可下载最新版本的Eclipse安装程序,本书采用的版本是3.8.0。

(2)将下载好的Eclipse安装程序解压到C盘根目录下,如图1-7所示。

figure_0023_0008

▲图1-7 Eclipse安装目录

(3)双击C:\eclipse目录下的 eclipse.exe文件,运行Eclipse,再依次单击菜单Help/Install New Software项,如图1-8所示。

figure_0023_0009

▲图1-8 Eclipse的软件安装

(4)单击弹出的Install界面中的“Add”按钮,在Name栏中输入任意的名字,并在Location栏中输入ADT的下载地址https://dl-ssl.google.com/android/eclipse/,如图1-9所示。

figure_0024_0010

▲图1-9 填写 ADT地址

提示

如果输入的地址不能正常下载 ADT,读者可以尝试将 https://dl-ssl.google.com/android/eclipse/改为http://dl-ssl.google.com/android/eclipse/。如果出现下载的ADT与已经安装的SDK版本不兼容的情况,可以手动下载ADT压缩包,然后单击“Archive”按钮选择手动下载ADT压缩文件即可安装,如图1-10所示。

figure_0024_0011

▲图1-10 选择 ADT压缩文件

(5)在 Install界面上选中“Developer Tools”并单击“Next”按钮,如图 1-11所示。

figure_0025_0012

▲图1-11 选择 Develpoer Tools

(6)在弹出的界面中,再次单击“Next”按钮进入下一界面,在下一界面中选择“I accept the…”,直接单击“Finish”按钮,如图1-12所示。之后进入安装进度条界面,等待安装,如图1-13所示。

figure_0025_0013

▲图1-12 ADT安装选择界面

figure_0025_0014

▲图1-13 安装进度条

(7)Eclipse将弹出提示窗口,单击“Yes”按钮,系统将自动重启Eclipse,到此为止已经完成ADT的安装。

(8)重启Eclipse后,依次选择Window/Preferences项,如图1-14所示。

figure_0026_0015

▲图1-14 选择“Preferences”菜单

(9)在弹出的窗口中选择左侧的“Android”,然后通过单击右侧的“Browse”按钮来选择SDK的安装目录,单击“OK”按钮完成配置,如图1-15所示。

figure_0026_0016

▲图1-15 Preferences配置

1.3.3 虚拟设备的创建与模拟器的运行

前几小节已经完成了Eclipse集成环境的搭建工作,但在运行模拟器前还需要创建AVD(Android Virtual Device,Android虚拟设备)。AVD实质上是用来描述模拟器属性的,有了AVD,开发人员可以为自己的模拟器进行必要的设置,如屏幕尺寸、内存等。本节将运用之前搭建好的Eclipse环境创建虚拟设备并运行模拟器,具体步骤如下。

(1)在系统的开始菜单中单击“运行”按钮,在弹出的窗口中输入“cmd”进入命令行,如图1-16所示。

figure_0026_0017

▲图1-16 启动cmd命令行

(2)通过 cd命令导航到 android的安装目录下的 tools下,并通过 android list target命令来显示当前可用的目标机,如图1-17所示。

figure_0026_0018

▲图1-17 当前可用的目标机

(3)然后通过 android create avd --name android21 --target 6命令创建一个名为 android21、目标机id为6的AVD,创建的AVD默认存放在我的文档下,而Android的AVD并不支持中文目录,可以通过配置ANDROID_SDK_HOME环境变量来指定所创建的AVD的存放位置。

提示

除了使用命令行方式来创建AVD外,还可以使用Eclipse自带的AVD Manager来创建。在Eclipse中依次选择“Window/Android Virtual Device Manager”打开AVD管理界面,如图1-18和图1-19所示。在AVD管理界面中不仅可以创建AVD,还可以对已经存在的AVD进行管理。

figure_0027_0019

▲图1-18 打开 AVD管理器

figure_0027_0020

▲图1-19 AVD管理界面

(4)在 cmd命令行中导航到 android的 tools目录后,输入 emulator -avd android21命令启动Android模拟器,如果安装和配置正确的话,将出现如图1-20所示的模拟器界面。

figure_0027_0021

▲图1-20 Android2.1模拟器效果图

提示

运行模拟器时可能会很慢,有时甚至可能达到几分钟时间,如果没有报错,请读者耐心等待。

1.3.4 Eclipse与真机的连接

前面已经对Android的开发环境和模拟器的配置进行了讲解,本小节将对读者讲解Eclipse与真机的连接,因此,读者需要一部Android手机。

(1)通过USB数据线将手机与计算机连接,首次连接计算机会提示安装驱动,此时安装驱动即可,该过程可能需要几分钟,请读者耐心等待。

(2)进入手机的“系统设置——开发人员选项”中,将USB调试打开。

提示

如果驱动下载安装失败,读者可自行到该手机品牌的官方网站下载相应的最新的驱动。此外,不同的手机USB打开方式可能不同,详细步骤读者可参考该手机的使用手册。

(3)打开Eclipse,点开DDMS查看Devices中手机是否与Eclipse连接,如图1-21和图1-22所示。

figure_0028_0022

▲图1-21 打开DDMS窗口

figure_0028_0023

▲图1-22 查看手机连接状态

(4)上述步骤执行完毕后,读者就可以在手机上运行程序了,详细步骤参见下一节。

提示

如果面板上没有“DDMS”按钮,依次单击Eclipse右上角的Open Perspective/Other,如图 1-23所示。Eclipse将弹出“Open Perspective”对话框,如图 1-24所示,单击“OK”按钮后将Eclipse切换到DDMS视角。

figure_0028_0024

▲图1-23 打开 Open Perspective窗口

figure_0028_0025

▲图1-24 切换到DDMS视图

1.3.5 导入并运行Android程序

上一小节已经对手机如何与Eclipse连接进行了详细讲解,本小节将介绍如何在Eclipse中导入项目,并在手机上运行已经写好的 Android 程序。本节将以导入本书第 7章物理引擎类游戏——抽方块JengaMe为例进行详细讲解。具体步骤如下。

1.在Eclipse中导入项目

(1)启动Eclipse,依次选择“File/Import”将弹出导入项目的窗口 Import,选择Existing Projects into Workspace,然后单击“Next”按钮进入下一界面,如图 1-25所示。

figure_0029_0026

▲图1-25 切换到DDMS视图

(2)单击“Browse”按钮找到项目所在路径,然后单击“确定”按钮,如图1-26所示。

figure_0029_0027

▲图1-26 查找项目路径

(3)单击该界面上的“Finish”按钮,项目便导入Eclipse中。

2.在手机上运行程序

(1)参照上一节所述步骤将手机与Eclipse连接。

(2)把该项目导入Eclipse中后,用鼠标光标选中该项目并右键单击,在出现的菜单中选择Run As,然后单击二级菜单中的Android Application,稍等片刻,该程序便安装在了手机上,如图1-27所示。

figure_0030_0028

▲图1-27 在手机上运行该程序

(3)安装运行成功后,便进入程序的游戏界面,如图1-28所示。

figure_0030_0029

▲图1-28 游戏界面

1.3.6 Android程序的监控与调试

前面几个小节已经对Android应用程序的导入及运行进行了详细讲解,本小节将介绍如何通过 DDMS 来监控 Android 应用程序的运行以及如何调试 Android 程序。在调试过程中使用了android.util.Log类,该类简单易用。监控与调试的详细步骤如下。

(1)打开刚刚导入的项目,依次选择 src/com.cw.game 找到 JangeMeActivity.java 文件,在第 48行 super.onCreate (savedInstanceState)之后添加“Log.d("TAG", "This is message!");”语句。

(2)在项目名上单击鼠标右键,然后依次选择“Run As/Android Application”,运行该项目。

(3)单击Eclipse右上角的DDMS,切换到DDMS视角。

(4)LogCat显示在屏幕的下方,系统中所有的日志都将出现在LogCat中,通过对LogCat的观察可以详细了解Android程序运行的过程。

提示

在程序的开发和调试过程中,少不了对文本的输出,而在Android程序的开发中,建议使用Log类来打印需要打印的文本。

(5)在图 1-29 中可以看到,在程序中添加的日志输出,这样在程序的开发过程中可以随时使用Log类来打印需要打印的信息,而当LogCat中日志过多时,可以使用过滤器Filter通过对Tag进行过滤来筛选Log。

figure_0030_0030

▲图1-29 LogCat界面

1.4 小结

本章介绍了Android平台的来源、历程及优点,然后详细介绍了在Eclipse中如何构建Android的开发环境,并讲解了如何将 Eclipse 与真机相连,最后在 Eclipse 中导入了第一个 Android 项目JangaMe,并在手机上运行该程序。通过本章的学习,读者应该已经对Android平台下应用程序的运行步骤有了初步的了解。

提示

由于本书的定位是对Android应用开发有一定基础的读者,故本书中对Android应用程序开发的基本知识并没有都进行非常详细的介绍,主要的篇幅都是介绍和游戏开发相关的知识。若读者希望全面学习Android平台开发的基本知识,可以参考由笔者编写,人民邮电出版社出版的《Android应用开发完全自学手册——核心技术、传感器、2D/3D、多媒体与典型案例》一书。同时,若读者希望学习OpenGL ES 2.0开发各方面的知识,可以参考同样是由笔者编写,人民邮电出版社出版的《Android 3D游戏开发技术宝典——OpenGL ES 2.0》一书。