1、第 1 章 Android 智能手机软件开发概述随着移动设备的普及,其功能越来越完善,移动设备的系统平台也日渐火热。本章首先介绍智能手机及其操作系统平台(如 Symbian、Android、Windows Mobile、IOS 等),并对学习 Android 手机软件开发的必要性进行阐述。之后,介绍 Android 平台的总体架构,并对完成 Android 应用程序软 件开发的 SDK 及其组成进行简要说明。最后,对 通过 Android Market 发布自己应用程序的方法进行介绍。学习本章内容时,要求重点掌握如下内容: 了解常见的智能手机操作系统平台。 了解 Android 的总体结构及主
2、要功能。 了解 Dalvik 虚拟机、AVD 等。 了解 Android Market 及发布应用程序的方法。1.1 智能手机及其操作系统据中国互联网络信息中心于 2011 年 7 月 19 日发布的统计中国互联网络发展统计报告显示,2011 年上半年,我国手机网民规模继续稳步扩大。截至 2011 年 6 月底,我国手机网民达 3.18 亿,较 2010 年底增加 1495 万人(如图 1.1 所示) 。可以说,智能手机正在快速走进人们的生活。就目前来看,已经有越来越多的人开始把智能手机当作日常看视频、办公的首选设备。随着 A9 架构、双核概念的问世,智能手机能更广泛、轻松地接管生活和工作中的
3、大小事务 1。因此,学习和研究智能手机软件开发,具有广阔的社会需求和工程实践意义。图 1.1 手机上网网民规模智能手机一般指像个人电脑一样具有独立操作系统,可由用户自行安装软件等第三方服务商提供的程序,并且,用户能对手机功能进行扩充。目前,全球多数手机厂商都有智能手机产品,如芬兰的诺基亚公司、美国的苹果公司,以及加拿大的黑莓、美国的摩托罗拉、中国台湾的宏达 HTC、韩国的三星等。图 1.2 列出了几款常见的手机操作系统 2。图 1.2 几款常见智能手机及其主要配置由于这些智能手机多使用 ARM 而非 X86 的 CPU 体系架构,因此有不同于普通计算机的操作系统和软件开发环境。目前,常见的移动
4、开发平台有当下正在逐步兴起的 Google的 Android,以及 Symbian、 Windows Phone、iPhone、RIM 公司的黑莓 BlackBerry、Web OS(又称 Palm OS) 、MeeGo(米狗)等。自 iPhone 在 07 年初次登台并将智能手机直接带向移动互联时代后,一方面智能手机普及率直线上升,另一方面整个市场目前也呈现了 iPhone 与 Android 手机两强争霸(亦有说 iPhone、Android、Windows Phone 三雄争霸)的局面。随着智能手机应用的普及,各大手机平台都推出了用于开发手机软件的 SDK(Software Develo
5、pment Kit) 。如苹果推出了iPhone 的 SDK,谷歌推出了 Android 的 SDK,塞班推出了 S60 SDK 等。SDK 大大降低了开发智能手机软件的门槛。但由于手机有着和普通 PC 机不一样的特点(如一般要考虑到屏幕大小、内存大小、背景色、省电模式的使用、实际的操作特点等) ,因此开发智能手机应用软件也有着和开发普通计算机应用程序不一样的特点。下面,对常见的智能手机操作系统进行简介。1.1.1 Symbian 简介Symbian 是一个实时、多任务的纯 32 位操作系统,具有功耗低、内存占用少等特点,适合手机等移动设备使用。虽然 Symbian 在智能手机市场取得了成功并
6、长期居于首位,但Symbian S60 等系统近两年亦遭遇到发展瓶颈。另外,并不是所有的 Symbian 系统都是智能系统(如 S40 系统就不属于智能手机) 。限于篇幅,这里不再对 Symbian 进行详细介绍,有兴趣的读者可以参阅如下文献或网站资料:1. 李树仁, 孙晨, 时磊. “Symbian OS C+编程指南”, 人民邮电出版社, 2009 年.2. 华清远见嵌入式培训中心, 侯茂清. “Symbian 手机应用开发标准教程”, 人民邮电出版社, 2009.3. 赵希哲, 司维, 宋昱鹏. “Easy Symbian:手机应用开发入门 ”, 人民邮电出版社, 2009 年.4. R
7、ichard Harrison, Mark Shackman. “Seybian OS C+手机应用开发”, 人民邮电出版社, 2009.5. 尚邮论坛:http:/ 百度贴吧:http:/ 搜狐数码公社:http:/ Android 简介Android 是谷歌公司推出的一款高效的、以 Linux 为基础的、专为智能手机设计的操作系统平台,也是免费、开放的智能手机开发平台。Android 包括中间件(负责硬件和应用程序之间的沟通) 、应用软件等。在开发智能手机软件时,Android SDK(Software Development Kit)是很有用的工具,它方便了开发人员开发 Android
8、应用程序。一般地,用户可以使用 Java 语言来开发 Android 平台上的应用程序,并通过 Android SDK 提供的一些工具将其打包为 Android 平台使用的 APK 文件,再使用模拟器来测试该软件在 Android平台上的实际运行情况和效果(当然,也可以直接将其安装到实际的 Android 智能手机上应用) 。有关 Android 的参考文献或网站资料主要有:1. 杨丰盛. Android 应用开发揭秘, 机械工业出版社, 2010.2. E2E Cloud 工作室. 深入浅出 Google Android, 人民邮电出版社, 2009.3. 韩超, 梁泉. Android 系
9、统原理及开发要点详解, 电子工业出版社, 2010.4. Ed Burnette. Android 基础教程, 人民邮电出版社, 2009.5. 机锋, http:/ 安卓网, http:/ Android 开发者门户: http:/www.eoeA 安卓手机论坛, http:/A 9. 开发者网站: http:/www.A.1.1.3 Windows Mobile 简介作为微软的掌上版操作系统,Windows Mobile 与桌面 PC 和 Office 办公软件的兼容性很好,而且 Windows Mobile 具有强大的多媒体性能,使其成为较有潜力的操作系统之一。但目前 Windows M
10、obile 尚不是 Android 与苹果的竞争对手。为此,微软与诺基亚于 2011年 2 月 11 日宣布达成战略合作伙伴关系,两者对未来的计划是打造一个全球移动“生态系统” ,届时诺基亚手机将采用微软的 Windows Phone 系统作为主要的智能手机系统,以期能优势互补,占据更大的市场份额。但结果如何,尚需拭目以待。限于篇幅,本书不对Windows Mobile 进行介绍,有兴趣的读者可以参阅如下文献或网站资料:1. 杨云, “Windows Phone 3G 手机软件开发”, 机械工业出版社, 2010.2. Charles Petzold, “Programming Windows
11、 Phone 7”, Microsoft Press, 2010.3. Nick Randolph, “Professional Windows Phone 7 Application Development: Building Windows Phone Applications and Games Using Silverlight and Xna”, Wrox Pr/Peer Information Inc. Press, 2010.4. Charles Petzold, “Microsoft Silverlight Programming for Windows Phone 7”, M
12、icrosoft Press, 2010.5. Windows 移动设备论坛: http:/ 智机网, http:/ Windows Mobile 讨论区:http:/ 中文社区: http:/ IOS 简介IOS 又称 MAC OS,是苹果公司为 iPhone 开发的操作系统,主要是为 iPhone、iPod touch 以及 iPad 使用。该系统的人机界面设计及人机操作非常优秀且应用软件丰富,已经赢得了可观的市场份额。限于篇幅,本书不对 IOS 进行介绍,有兴趣的读者可以参阅如下文献或网站资料:1. Dave Mark, Jeff LaMarche, iphone3 开发基础教程, 人民
13、邮电出版社, 2009.2. Christopher Allen, Shannon Appelcline, iPhone 开发实战, 人民邮电出版社, 2009.3. Duncan Campbell, iphone SDK 3 开发快速上手, 机械工业出版社, 2010.4. John Ray, Sean Johnson, “iPhone 开发入门经典”, 人民邮电出版社, 2010.5. iPhone 论坛:http:/ 泡泡网, http:/ 手机论坛, http:/ 苹果开发中文站: http:/.1.2 为什么要学习 Android?为什么要学习 Android 智能手机应用程序开发呢
14、?这不仅是由于 Android 背后有强大的谷歌作为后盾,并开放了 Android SDK 软件开发组件,可以让第三方的开源社区方便快捷地开发众多实用的 Android 应用程序,而且它与手机产业链中最具有影响力的龙头公司联盟这个联盟由包括中国移动、摩托罗拉、高通、宏达和 T-Mobile 在内的几十家技术和无线应用的领军企业组成建立了战略合作关系,并且建立了标准化、开放式的通信软件平台。也就是说,只要采用 Android 操作系统平台,就基本不受限于硬件装置,程序的可移植性好,能很好地解决当前由于众多手机操作系统的不同而造成的不同智能手机间文件格式不同而无法让信息顺利流通的问题。总的来说,学
15、习和采用 Android 的理由有:(1) 国内外很多移动巨头都开始着手进行基于 Android 的应用软件开发,国内厂商可以借鉴其开发经验,更好地促进移动技术的开发与应用。其良好的盈利模式使得运营商、制造商、独立软件生产商都可以从中获得不菲的利益。(2) Android 拥有完善的程序开发环境,如设备模拟器、调试工具、内存和性能分析工具等。另外,Android 继承了开源技术的基本特征,社区支持度高,系统应用的移植性好。(3) 采用了对有限内存、电池和 CPU 优化过的虚拟机 Dalvik,处理速度更快。(4) 应用程序框架可以方便地重用。(5) 集成了基于开源的 WebKit 引擎的浏览器
16、。(6) 集成了轻量级数据库管理系统 SQLite。(7) 拥有优化的图形系统,自定义了 2D/3D 图形库。(8) 支持常见的音频和视频以及各种图片格式。(9) 在相应硬件环境(注:这些硬件环境多是目前智能手机能够提供的)支持下,可集成GSM、蓝牙、EDGE、3G、Wi-Fi 、摄像头、GPS、罗盘、加速度计等。:一般地,Android 系统内核是 Linux;程序开发语言是 Java;编程 IDE 可以采用Eclipse;由其 dx 工具转换为 Dalvik Executable(.dex)文件格式后,再由 Dalvik 虚拟机器在Linux 平台上运行。目前,Android 的成长很快。
17、据谷歌创始人及 CEO 佩奇曾透露,全球有超过 1.5 亿部Android 设备被激活,每天激活的设备数量高达 55 万部,这些设备遍及全球 123 个国家的231 家运营商的网络上。Android 手机不仅在美国的市场占有率居首(达 38%) ,而且在全球智能手机的占有率也已经超过了苹果手机 3。有数据显示,虽然苹果公司在 2011 年第二季度一跃而成为全球最大的智能机制造商,市场份额也超过 19%,但如果按照操作系统来划分,Android 则反超苹果公司的 iOS 操作系统 4。2011 年 8 月 15 日,谷歌更是宣布已与移动巨头摩托罗拉签署收购后者的协议。收购摩托罗拉移动有助于谷歌进
18、一步强化Android 生态系统,从而提升在移动计算市场的竞争力。交易完成后,摩托罗拉移动将作为谷歌的独立业务继续运营,而 Android 仍将保持开放。可以预见,上述举措将会进一步强化整个 Android 的开发系统 5。2011 年 11 月 3 日,由 CSDN 和创新工场联合主办的“2011 中国移动开发者大会”在北京召开。会上,创新工场董事长兼首席执行官李开复表示,国内移动互联网发展还处于发展初级阶段,但可以看到国内的发展速度非常之快,其中基于 Android 开发在 2012 年将迎来发展爆发点。另据路透社报道,由于 RIM 的黑莓服务故障影响了 4 个大洲的无数用户,分析家认为,
19、这次事故将推动黑莓用户加速转向iOS 和 Android 设备。因此,学习 Android,开发基于 Android 的应用程序,是时代发展的需要。1.3 Android SDK 简介Android SDK 提供了在 Windows/Linux/Mac 平台上开发 Android 应用程序的相应的开发组件,它含有在 Android 平台上开发应用程序的工具集,如用于模拟和测试该软件在Android 平台上的运行情况和效果的模拟仿真器(注: 在仿真器上开发程序后可将其部署到真实的手机上) ,以及用于在 Eclipse 中的开发工具插件 ADT、调试工具(如 DDMS 等) 、打包成 APK 文件
20、的工具、 用来运行 Android 的应用程序的 Dalvik 虚拟机、Webkit 网页浏览引擎、2D/3D 图形界面、SQLite 数据库、照相机、指南针等 6。程序开发者可以直接调用这些 API 函数。1.3.1 SDK 总体架构概述Android SDK 总体架构如图 1.3 所示。图 1.3 Android SDK 总体架构Android SDK 的最底层(Linux Kernel)是基于 Linux 2.6 内核实现的,它负责硬件驱动、网络管理、电源管理、系统安全、内存管理等。例如,它可以负责显示驱动、基于Linux 的帧缓冲驱动、键盘驱动、Flash 驱动、照相机驱动、音频视频驱
21、动、蓝牙驱动、基于 IEEE 802.15.1 标准的无线传输技术、Wi-Fi 驱动、基于 IEEE 802.11 标准的驱动、Binder IPC 驱动、能源管理等。Android SDK 的第二层(即 Libraries & Android Runtime 层)由大多数开源的函数库组成,如标准的 C 函数库 Libc、OpenSSL、SQLLite 等。其中的 WebKit 负责 Android 网页浏览器的运行,2D SGL/3D OpenGL 图形与多媒体函数库分别支持各种影音与图形文件的播放(如 MPEG4、AAC、AMR、JPG);SQLLite 提供了轻量级的数据库管理系统。在这
22、一层中的 Android RunTime 提供了 Android 特有的 Java 内核函数库。另外, Android 为每个应用程序分配了专有的 Dalvik 虚拟机,可以通过 Java 语言编写应用程序并在 Android 平台上同时运行多个 Java 应用程序。Dalvik 虚拟机拥有可在一个设备上运行多个虚拟机的特性,Dalvik 虚拟机下的 .dex 格式文件经过了优化,占用的内存非常小,执行效率高。:Dalvik 虚拟机和一般 Java 虚拟机有所不同,它执行的不是 Java 标准的字节码,而是 Dalvik 可执行格式.dex 文件。和普通的基于栈的 Java 虚拟机不同,Dal
23、vik 是基于寄存器的虚拟机。Dalvik 的好处在于可以实现更多的优化,这更适合移动设备的特点。Android SDK 的第三层是应用程序架构(即 Application Framework 层) ,它为应用程序层的开发者提供用于软件开发的 API。由于最上层的应用程序是以 Java 构建的,因此本层次提供的组件包含了用户界面 UI 程序中所需要的各种控件。相应功能有显示(如消息方块、条列消息、按钮、内嵌式浏览器等) 、消息提供(如访问信息、分享信息) 、资源管理(如图形、布局文件等) 、提示消息(显示警告信息等) 。例如,这里的 Activity Manager负责在仿真器上生成窗口事件,
24、而 View System 则在窗口显示设定的内容。Android SDK 的最上层是应用程序(即 Applications 层) 。 Android 本身已经提供了一些简单的应用如主屏幕(Home) 、联系人(Contact)、电话(Phone)、浏览器(Browers)、游戏,以及谷歌 Maps、E-mail、即时通信工具、MP3 播放器、电话、照相程序、文件管理等应用。同时,开发者还可以使用 SDK 提供的 API 开发自己的程序。这也是本书的重点所在。1.3.2 SDK 内部结构将下载的 Android SDK 解压后(注:下载方法参见第 2 章 ),其文件夹下一般有子目录add-on
25、s、docs 、 platforms、samples、tools 等以及 SDK Manager.exe 等,见图 1.4。其中,add-ons 和 platforms 目录初始时可能为空,因为从 Android SDK 1.6 开始,Android 均采取在线更新组件的方式来安装各版本的 SDK,具体方法是运行 SDK Manager.exe,出现如图1.5 所示的对话框,点击 Update 完成在线更新。图 1.4 Android SDK 解压后的文件夹列表图 1.5 SDK 在线更新这里的有些文件(如 Android.jar) ,对 Android 应用程序的开发是起重要作用的。进入SD
26、K 所在文件夹下的相应子文件夹(注:随版本不同而有差异,如 platformsandroid-8) ,用 Winrar 工具打开 Android.jar,会看到这个 Android.jar 的内部结构,如图 1.6 所示。图 1.6 Android.jar 内部结构一般地,在 SDK 文件夹下的 docsguideindex.html 是有关 SDK 的 API 的说明文档,建议读者和开发人员阅读其中的 Dev Guide 部分,如图 1.7 所示。图 1.7 Android Developers Guide1.3.3 简单的 Android 应用程序组成总的来说,简单的 Android 应用
27、程序由 Activity、Content provider、Service 、Intent 等部分组成(可能只包含其中部分而非全部组成) 。其中,Activity 相当于 Windows 应用程序的对话框窗口或网络应用程序的 Web 页面窗口;Content provider 提供供多个应用使用的数据存储;Service 被设计成和 Activity 独立的可以保持后台运行的服务(如设计需要在后台运行的音乐播放器时需要用到 Service) ,Intent 是一种运行时的绑定机制,用来描述一个程序想要作什么事情、从一个 Activity 跳到另一个 Activity 等,借助于 Intent,
28、各个 Activity间的切换是很方便的。1.4 用于在 Eclipse 中开发程序的外挂工具 ADT虽然专门用于手机开发的 J2ME 拥有众多的图形工作界面和 IDE(如IntelliJ、 Eclipse、Fastpace、MIDP、NetBeans 等) ,但最终 Google 还是选择 Eclipse 作为其开发 Android 智能手机应用程序的 IDE,并将开发 Android 应用程序所需的程序创建、运行测试与纠错功能等完全集成到 Eclipse 外挂的 ADT(Android Development Tools)中。可见,ADT 是 Google 开发的 Eclipse 外挂程序
29、,它在常规的 Eclipse 中打造了一个 Android 专属的开发环境,并扩展了 Eclipse 的功能,可以让用户快速、方便地建立和调试 Android 项目如创建 Adnroid 开发实例、运行与除错、 在基于 Android 框架的 API 上添加组件,以及用 SDK 工具集(如 DDMS 等)调试应用程序、导出签名(或未签名)的 APK 程序以便发布应用程序等功能。这些功能已经都集成到 Eclipse 的开发环境中,因此不需要额外的使用命令行指令(如 adb.exe 和 ddms.exe 等)进行处理。可见,通过 ADT 扩充 Eclipse 的功能,可让程序开发者在 Eclips
30、e 中快速创建 Android 程序,并自动将应用程序发送到Android 仿真环境中运行、测试和除错,并在程序可能出错的地方,提供断点插入功能。有关在 Eclipse 中集成 ADT 的方法参见后文第 2 章,而 Eclipse 的简介参见本书附录。1.5 Dalvik 虚拟机众所周知,Java 程序运行时需要 JRE 运行环境。Google 为了让 Android 避开可能的版权问题,使用了自己的 JRE,它就是位于 SDK 总体架构中间层的 Dalvik 虚拟机。就是说,Android 通过 Dalvik 非直接采用 Java 的虚拟机来运行 Android 程序。Dalvik 虚拟机针
31、对手机的实际情况进行了功能优化,如支持多进程与内存管理、低功耗支持等。和普通 Java 虚拟机不同的是,Dalvik 支持运行的文件格式是特殊的,因此它需要将普通 Java 的 class 的文件用 Android SDK 中的 dx 工具转换为 .dex 格式的文件(这些转换对使用 Eclipse ADT 的程序开发者而言是透明的,编程人员无需分神关注) 。1.6 虚拟仿真器 AVD在设置了 Java JDK、Eclipse 集成开发环境、ADT 、Android SDK 路径后,就可以开始编写 Android 应用程序了。在 Eclipse 中完成应用程序的开发后,可以先在虚拟手机上仿真而
32、不必将其真正放到手机上运行(虽然这种方式更直观些) 。Android 仿真器 AVD(Android Virtual Device) ,是由 Qemu 所改装而成的。Qemu 是一套由 Fabrice Bellard 所编写的模拟处理器的自由软件,其高速度及跨平台特很突出,它支持三个版本(即 Windows、 Linux、Mac OS 版)来供 Android 开发者使用。Qemu 可以让 x86 平台上仿真 ARM 处理器运行 Android,可以在系统中仿真出虚拟的 CPU,然后将要仿真的操作系统交给这个虚拟 CPU 去处理,能够达到在同一平台却能同时执行不同操作系统的目的。可见,Andr
33、oid 实际上是通过 Qemu+device skin 功能来显示当前所看到的手机虚拟器。在模拟器启动后,手机画面是上锁的,按手机上的 Menu 菜单,就是 Android手机使用画面了。在 Android SDK 1.5 及其以后的程序开发中,需要创建至少一个 AVD,每个 AVD 模拟了一套设备来运行 Android 平台。:第一次在 Eclipse 中用模拟器启动应用程序时,其启动时间是比较长的。当其启动后,每次运行新的应用程序时不必关闭旧的模拟器。可以直接在 Eclipse 中右击工程,在弹出的快捷菜单中执行【Run As】|【Android Application】 ,运行程序即可。但模拟器 AVD 毕竟不是真实的手机,它在如下几点一般是没有真实手机的功能的 6: 不支持实际呼叫和接听电话。 不支持 USB 连接。 不支持相机和视频捕获。 不支持音频输入(捕获) ,但支持输出(播放) 。