第1章 Android智能手机软件开发概述 随着移动设备的普及,其功能越来越完善,移动设备的系统平台也日渐火热。本章首先介绍智能手机及其操作系统平台(如Symbian、Android、Windows Mobile、IOS等),并对学习Android手机软件开发的必要性进行阐述。之后,介绍了Android平台的总体架构,并对完成Android应用程序软件开发的SDK及其组成进行简要说明。最后,对通过Android Market发布自己应用程序的方法进行了介绍。
学习本章内容时,要求重点掌握如下内容:
了解常见的智能手机操作系统平台。
了解Android的总体结构及主要功能。
了解Dalvik虚拟机、AVD等。
了解Android Market及发布应用程序的方法。
1.1 智能手机及其操作系统
据中国互联网络信息中心于2011年7月19日发布的统计《中国互联网络发展统计报告》显示,2011年上半年,我国手机网民规模继续稳步扩大。截至2011年6月底,我国手机网民达3.18亿,较2010年底增加1495万人(如图1.1所示)。可以说,智能手机正在快速走进人们的生活。就目前来看,已经有越来越多的人开始把智能手机当作日常看视频、办公的首选设备。随着A9架构、双核概念的问世,智能手机能更广泛、轻松地接管生活和工作中的大小事务[石家庄新闻网, 2011]。因此,学习和研究智能手机软件开发,具有广阔的社会需求和工程实践意义。
图1.1 手机上网网民规模
智能手机一般指像个人电脑一样具有独立操作系统,可由用户自行安装软件等第三方服务商提供的程序,并且,用户能对手机功能进行扩充。目前全球多数手机厂商都有智能手机产品,如芬兰的诺基亚公司、美国的苹果公司,以及加拿大的黑莓、美国的摩托罗拉、中国台湾的宏达HTC、韩国的三星等。图1.2列出了几款常见的手机操作系统[百度百科, 2010]。由于这些智能手机多使用ARM而非X86的CPU体系架构,因此有不同于普通计算机的操作系统和软件开发环境。目前,常见的移动开发平台有当下正在逐步兴起的Google的Android,以及Symbian、Windows Phone、iPhone、RIM公司的黑莓BlackBerry、Web OS(又称Palm OS)、MeeGo(米狗)等。自iPhone在07年初次登台将智能手机直接带向移动互联时代后,一方面智能手机普及率直线上升,另一方面整个市场目前也呈现了iPhone与Android手机两强争霸(亦有说iPhone、Android、Windows Phone三雄争霸)的局面。
图1.2 几款常见智能手机及其主要配置
随着智能手机应用的普及,各大手机平台都推出了用于开发手机软件的SDK(Software Development Kit)。如苹果推出了iPhone的SDK,谷歌推出了Android的SDK,塞班推出了S60 SDK等。SDK大大降低了开发智能手机软件的门槛。但由于手机有着和普通PC机不一样的特点(如一般要考虑到屏幕大小、内存大小、背景色、省电模式的使用、实际的操作特点等),因此开发智能手机应用软件有着和开发普通计算机应用程序不一样的特点。
下面,对常见的智能手机操作系统进行简介。
1.1.1 Symbian简介
Symbian是一个实时、多任务的纯32位操作系统,具有功耗低、内存占用少等特点,适合手机等移动设备使用。虽然Symbian在智能手机市场取得了成功并长期居于首位,但Symbian S60等系统近两年亦遭遇到显著的发展瓶颈。另外,并不是所有的Symbian系统都是智能系统(如S40系统就不属于智能手机)。限于篇幅,这里不再对Symbian进行详细介
绍,有兴趣的读者可以参阅如下文献或网站资料:
[1]. 李树仁, 孙晨, 时磊. “Symbian OS C++编程指南”, 人民邮电出版社, 2009年.
[2]. 华清远见嵌入式培训中心, 侯茂清. “Symbian手机应用开发标准教程”, 人民邮电出版
社, 2009.
[3]. 赵希哲, 司维, 宋昱鹏. “Easy Symbian:手机应用开发入门”, 人民邮电出版社, 2009年.
[4]. Richard Harrison, Mark Shackman. “Seybian OS C++手机应用开发”, 人民邮电出版社,
2009.
[5]. 尚邮论坛:http://www.77cn.com.cn/forumdisplay.php?fid=30
[6]. 百度贴吧:http://www.77cn.com.cn/f?kw=symbian
[7]. 搜狐数码公社:http://www.77cn.com.cn/
1.1.2 Android简介
Android是谷歌公司推出的一款高效的、以Linux为基础的、专为智能手机设计的操作系统平台,也是免费、开放的智能手机开发平台。Android包括中间件(负责硬件和应用程序之间的沟通)、应用软件等。在开发智能手机软件时,Android SDK(Software Development Kit)是很有用的工具,它方便了开发人员开发Android应用程序。一般地,用户可以使用Java语言来开发Android平台上的应用程序,并通过Android SDK提供的一些工具将其打包为Android平台使用的APK文件,再使用模拟器来测试该软件在Android平台上的实际运行情况和效果(当然,也可以直接将其安装到实际的Android手机上应用)。有关Android的参考文献或网站资料主要有:
[1]. 杨丰盛. Android应用开发揭秘, 机械工业出版社, 2010.
[2]. E2E Cloud工作室. 深入浅出Google Android, 人民邮电出版社, 2009.
[3]. 韩超, 梁泉. Android系统原理及开发要点详解, 电子工业出版社, 2010.
[4]. Ed Burnette. Android基础教程, 人民邮电出版社, 2009.
[5]. 机锋, http://www.77cn.com.cn/.
[6]. 安卓网, http://www.77cn.com.cn/bbs/index.php.
[7]. Android开发者门户: http://www.77cn.com.cn/forum.php.
[8]. 安卓手机论坛, http://www.77cn.com.cn/.
[9]. 开发者网站: http://www.77cn.com.cn.
1.1.3 Windows Mobile简介
作为微软的掌上版操作系统,Windows Mobile与桌面PC和Office办公软件的兼容性很好,而且Windows Mobile具有强大的多媒体性能,使其成为较有潜力的操作系统之一。但不可否认的是,目前Windows Mobile尚不是Android与苹果的竞争对手。为此,微软与诺
基亚于2011年2月11日宣布达成战略合作伙伴关系,两者对未来的计划是打造一个全球移动“生态系统”,届时诺基亚手机将采用微软的Windows Phone系统作为主要的智能手机系统,以期能优势互补,占据更大的市场份额。但结果如何,尚需拭目以待。限于篇幅,本书不对Windows Mobile进行介绍,有兴趣的读者可以参阅如下文献或网站资料:
[1]. 杨云, “Windows Phone 3G手机软件开发”, 机械工业出版社, 2010.
[2]. Charles Petzold, “Programming Windows 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”, Microsoft
Press, 2010.
[5]. Windows移动设备论坛:
http://www.77cn.com.cn/Forums/zh-CN/category/windowsmobiledevicecn.
[6]. 智机网, http://www.77cn.com.cn/.
[7]. Windows Mobile讨论区:http://www.77cn.com.cn/board/26-68.html.
[8]. 中文社区: http://www.77cn.com.cn/BBS/.
1.1.4 IOS简介
IOS又称MAC OS,是苹果公司为iPhone开发的操作系统,主要是为iPhone、iPod touch以及iPad使用。该系统的人机界面设计及人机操作非常优秀且应用软件丰富,已经赢得了可观的市场份额。限于篇幅,本书不对IOS进行介绍,有兴趣的读者可以参阅如下文献或网站资料:
[1]. Dave Mark, Jeff LaMarche, iphone3开发基础教程, 人民邮电出版社, 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://www.77cn.com.cn/~.
[6]. 泡泡网, http://www.77cn.com.cn/005900050-00137-000008520s-1_right.html.
[7]. 手机论坛, http://www.77cn.com.cn/forum-id-68621.html.
[8]. 苹果开发中文站: http://www.77cn.com.cn.
1.2 为什么要学习Android?
为什么要学习Android智能手机应用程序开发呢?这不仅是由于Android背后有强大的谷歌作为后盾,并开放了Android SDK软件开发组件,可以让第三方的开源社区方便快捷
地开发众多实用的Android应用程序,而且它与手机产业链中最具有影响力的龙头公司联盟——这个联盟由包括中国移动、摩托罗拉、高通、宏达和T-Mobile在内的几十家技术和无线应用的领军企业组成——建立了战略合作关系,并且建立了标准化、开放式的通信软件平台。也就是说,只要采用Android操作系统平台,就基本不受限于硬件装置,程序的可移植性好,能很好地解决当前由于众多手机操作系统的不同而造成的不同智能手机间文件格式不同而无法让信息顺利流通的问题。总的来说,学习和采用Android的理由有:
(1) 国内外很多移动巨头都开始着手进行基于Android的应用软件开发,国内厂商可以借鉴
其开发经验,更好地促进移动技术的开发与应用。其良好的盈利模式使得运营商、制造商、独立软件生产商都可以获得不错的利益。
(2) Android拥有完善的程序开发环境,如设备模拟器、调试工具、内存和性能分析工具等。
另外,Android继承了开源技术的基本特征,社区支持度高,系统应用的移植性好。
(3) 采用了对有限内存、电池和CPU优化过的虚拟机Dalvik,处理速度更快。
(4) 应用程序框架可以方便地重用。
(5) 集成了基于开源的WebKit引擎的浏览器。
(6) 集成了轻量级数据库管理系统SQLite。
(7) 拥有优化的图形系统,自定义了2D/3D图形库。
(8) 支持常见的音频和视频以及各种图片格式。
(9) 在相应硬件环境(注:这些硬件环境多是目前智能手机能够提供的)支持下,可集成
GSM、蓝牙、EDGE、3G、Wi-Fi、摄像头、GPS、罗盘、加速度计等。
目前,Android的成长很快。据谷歌创始人及CEO佩奇曾透露,全球有超过1.5亿部Android设备被激活,每天激活的设备数量高达55万部,这些设备遍及全球123个国家的231家运营商的网络上。Android手机不仅在美国的市场占有率居首(达到38%),而且在全球智能手机的占有率也已经超过了苹果手机[周健工, 2011]。有数据显示,虽然苹果公司在2011年第二季度一跃而成为全球最大的智能机制造商,市场份额也超过19%,但按照操作系统来划分,Android则反超苹果公司的iOS操作系统[罗小卫, 2011]。2011年8月15日,谷歌更是宣布已与移动巨头摩托罗拉签署收购后者的协议。收购摩托罗拉移动有助于谷歌进一步强化Android生态系统,从而提升在移动计算市场的竞争力。交易完成后,摩托罗拉移动将作为谷歌的独立业务继续运营,而Android仍将保持开放。可以预见,上述举措将会进一步强化整个Android的开发系统 [新浪, 2011]。
因此,学习Android,开发基于Android的应用程序,是时代发展的需要。
1.3 Android SDK简介
Android SDK提供了在Windows/Linux/Mac平台上开发Android应用程序的相应的开发组件,它含有在Android平台上开发应用程序的工具集,如用于模拟和测试该软件在Android平台上的运行情况和效果的模拟仿真器(注:在仿真器上开发程序后可将其部署到真实的手机上),以及用于在Eclipse中的开发工具插件ADT、调试工具(如DDMS等)、打包成APK文件的工具、用来运行Android的应用程序的Dalvik虚拟机、Webkit网页浏览引擎、2D/3D图形界面、SQLite数据库、照相机、指南针等[
函数。 靳言, 2009]。程序开发者可以直接调用这些API
1.3.1 SDK总体架构概述
Android SDK总体架构如图1.3所示。Android SDK的最底层(Linux Kernel)是基于Linux 2.6内核的,它负责硬件驱动、网络管理、电源管理、系统安全、内存管理等。例如,它可以负责显示驱动、基于Linux的帧缓冲驱动、键盘驱动、Flash驱动、照相机驱动、音频视频驱动、蓝牙驱动、基于IEEE 802.15.1标准的无线传输技术、Wi-Fi驱动、基于IEEE 802.11标准的驱动、Binder IPC驱动、能源管理等。
图1.3 Android SDK总体架构
Android SDK的第二层(Libraries & Android Runtime)由大多数开源的函数库组成,如标准的C函数库Libc、OpenSSL、SQLLite等。其中的WebKit负责Android网页浏览器的运行,2D SGL/3D OpenGL图形与多媒体函数库分别支持各种影音与图形文件的播放(如MPEG4、AAC、AMR、JPG);SQLLite提供了轻量级的数据库管理系统。在这一层中的
Android
RunTime提供了Android特有的Java内核函数库。另外,Android为每个应用程序分配了专有的Dalvik虚拟机,可以通过Java语言编写应用程序并在Android平台上同时运行多个Java应用程序。Dalvik虚拟机拥有可在一个设备上运行多个虚拟机的特性,Dalvik虚拟机下的.dex格式文件经过了优化,占用的内存非常小,执行效率高。
Android SDK的第三层是应用程序架构(Application Framework),它为应用程序层的开发者提供用于软件开发的API。由于最上层的应用程序是以Java构建的,因此本层次提供的组件包含了用户界面UI程序中所需要的各种控件,相应功能有显示(如消息方块、条列消息、按钮、内嵌式浏览器等)、消息提供(如访问信息、分享信息)、资源管理(如图形、布局文件等)、提示消息(显示警告信息等)。例如:这里的Activity Manager负责在仿真器上生成窗口事件,而View System则在窗口显示设定的内容。
Android SDK的最上层是应用程序(Applications)。Android本身已经提供了一些简单的应用——如主屏幕(Home)、联系人(Contact)、电话(Phone)、浏览器(Browers)、游戏,以及谷歌Maps、E-mail、即时通信工具、MP3播放器、电话、照相程序、文件管理等应用。同时,开发者还可以使用SDK提供的API开发自己的程序。这,也是本书的重点所在。
1.3.2 SDK内部结构
将下载的Android SDK解压后(注:下载方法参见后文),其文件夹下一般有子目录add-ons、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应用程序的开发是起重要作用的。进入SDK所在文件夹下的相应子文件夹(注:随版本不同而有差异,如platforms\android-8),用Winrar工具打开Android.jar,会看到这个Android.jar的内部结构,如图1.6所示。
图1.6 Android.jar内部结构
一般地,在SDK文件夹下的docs\guide\index.html是有关SDK的API的说明文档,建议读者和开发人员阅读其中的Dev Guide部分,如图1.7所示。
图1.7 Android Developer’s Guide
1.3.3 简单的Android应用程序组成
总的来说,简单的Android应用程序由Activity、Content provider、Service、Intent四部分组成。其中,Activity相当于Windows应用程序的对话框窗口或网络应用程序的Web页面窗口,Content provider提供供多个应用使用的数据存储,Activity和Content Provider可以随时被关闭;Service被设计成和Activity独立的可以保持后台运行的服务,如设计需要在后台运行的音乐播放器时需要用到Service;Intent是一种运行时的绑定机制,用来描述一个程序想要作什么事情、从一个Activity跳到另一个Activity等,借助于Intent,各个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外挂程序,它在常规的Eclipse中打造了一个Android专属的开发环境,并扩展了Eclipse的功能,可以让用户快速建立、调试Android项目——如创建Adnroid开发实例、运行与除错、在基于Android框架的API上添加组件,以及用SDK工具集(如DDMS等)调试应用程序、导出签名(或未签名)的APK程序以便发布应用程序等功能。这些功能已经都集成到Eclipse的开发环境中,因此不需要额外的使用命令行指令(如adb.exe和ddms.exe等)进行程序除错。可见,通过ADT扩充Eclipse的功能,可让程序开发者在Eclipse中快速创建Android程序,并自动将应用程序发送到Android仿真环境中运行、测试和除错,并在程序可能出错的地方,提供断点插入功能。
有关在Eclipse中集成ADT的方法参见后文,而Eclipse的简介参见本书附录。
1.5 Dalvik虚拟机
众所周知,Java程序运行时需要JRE运行环境。Google为了让Android避开可能的版权问题,使用了自己的JRE,它就是位于SDK总体架构中间层的Dalvik虚拟机。就是说,Android通过Dalvik非直接采用Java的虚拟机来运行Android程序。Dalvik虚拟机针对手机的实际情况进行了功能优化,如支持多进程与内存管理、低功耗支持等。
和普通Java虚拟机不同的是,Dalvik支持运行的文件格式是特殊的,因此它需要将普通Java的class的文件用Android SDK中的dx工具转换为.dex格式的文件(这些转换对使用Eclipse ADT的程序开发者而言是透明的)。
1.6 虚拟仿真器AVD
在设置了Java JDK、Eclipse集成开发环境、Android SDK路径、ADT后,就可以开始编写Android程序了。在Eclipse中完成应用程序的开发后,可以先在虚拟手机上仿真而不必将其真正放到手机上运行(虽然这种方式更直观些)。
Android仿真器AVD(Android Virtual Device)是由Qemu所改装而成的。Qemu是一套由Fabrice Bellard所编写的模拟处理器的自由软件,其高速度及跨平台特很突出,它支持其中的三个版本(Windows、Linux、Mac OS)来供Android开发者使用。Qemu可以让x86平台上仿真ARM处理器运行Android,可以在系统中仿真出虚拟的CPU,然后将要仿真的操作系统交给这个虚拟CPU去处理,能够达到在同一平台却能同时执行不同操作系统的目的。可见,Android实际上是通过Qemu+device skin功能来显示当前所看到的手机虚拟器。在完成开机后,手机画面是上锁的,按手机上的Menu菜单,就是Android手机使用画面了。 在Android SDK 1.5后的程序开发中,需要创建至少一个AVD,每个AVD模拟了一套设备来运行Android平台。
但模拟器AVD毕竟不是真实的手机,它在如下几点一般没有真实手机的功能 不支持实际呼叫和接听电话。
不支持USB连接。
不支持相机和视频捕获。
不支持音频输入(捕获),但支持输出(播放)。
不支持扩展耳机。
不能确定连接状态。
不能确定电池水平和充电状态。
不能确定SD卡的插拔。
不支持蓝牙功能。 靳岩:
1.7 在Android Market上发布自己的应用程序
Android Market是个开放的平台,开发者可以上传和销售自己的应用,用户可以随时随地的下载、安装和评价应用。Google Android平台负责人Eric Chu 称,Android Market对应用程序开发者最大的吸引力是他们可以很轻松地进入这个市场。与YouTube相似,开发者仅需三个简单的步骤即可在上传内容:注册、上传内容并加以描述、发布。Google表示不
会像苹果那样对iTunes AppStore内的软件应用进行严格的监管,这也是Android Market称为Market的意图。软件开发商只需要注册并一次性支付25美元的申请费,之后就可以在Android Market上销售他们的软件,并从每次交易中获得70%的利润,这类似于苹果的销售模式,不同的是,交易所得的其它利润将属于运营商而不是Google[
1.5.1 在Market上注册成为会员
要想将自己开发的应用上传到Google Android Market上,必须申请market帐号。打开http://www.77cn.com.cn/publish/signup页面(如图1.8所示),点击右下角的【Create an Account Now】按钮进入账号注册页面,如图1.9所示,输入基本信息后,并向指定手机号发送确认码。在用户输入正确的确认码后,注册成功。
沃达网, 2010]。
图
1.8 Android Market
图1.9 在Android Market上注册成为会员
之后,需要按照Market的规定,缴纳一定的费用,如图1.10所示。完成汇款后,就可以看到控制台并可以上传Android应用软件了。
图1.10 缴纳注册费用
1.8 本章小结
本章对Android智能手机软件开发进行综述,以期读者对智能手机软件开发能有一个全局认识。
Android智能手机在市场上拥有巨大的发展潜力,值得应用程序开发人员重视。
SDK提供了在Windows/Linux/Mac平台上开发Android应用程序的相应的开发组件,含有在Android平台上开发应用程序的工具集。借助于Android SDK提供的四层架构以及相应工具的支持,程序开发人员可以方便地开发Android应用程序。在进行应用程序开发时,一般需要在Eclipse中使用Java语言开发,之后Android中的RunTime的Dalvik
运行dex字节码,而应用程序的使用界面UI则需要通过XML和Java程序设计来实现。而Android Market则提供了发布、交流应用程序的窗口。
思考与实践
1、Android SDK由基层基础架构所组成?各层的主要功能、组成各是什么?
2、参阅本书附录,了解Eclipse的使用。了解在Eclipse中建立、运行、调试
的方法;了解Eclipse插件(如Log4j)的添加与使用方法。
3、参阅本书附录,了解XML技术。熟悉XML文档的组成成分及其作用等。
4、由于Android应用程序是使用Java语言编写的,因此具备Java技术方面的经验是必需的。请了解Java中有关字符串操作、流与文件读写等的方法。 Android Java应用程序 虚拟机将其转换