作者:张利国,龚海平等
出版社:人民邮电出版社
格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT
Android移动开发入门与进阶试读:
前言
移动开发技术已经成为目前最受瞩目的IT技术开发热点之一。随着通信技术、嵌入式技术等的发展,手机已经不再仅仅是一个通话工具,而是集通信、网络、商务等多功能于一体的智能终端,可以实现拍照、影音播放、网络浏览、邮件收发、游戏等多种应用。Android在智能手机的潮流下应运而生,其平台的开放性与易用性,受到了越来越多的人的追捧。本书的主要目的,是为广大开发人员指引一条快捷地学习和掌握Android开发技术的道路。
本书主要内容
第1章主要介绍了Android平台发展史、Android框架介绍、SDK介绍、Dalvik虚拟机以及 Android 平台和 Windows Mobile、iPhone 等平台的比较;
第2章主要介绍了AAPT、ADB、Traceview等Android开发工具;
第3章主要介绍了Android开发环境搭建以及HelloWorld实例开发;
第4章主要介绍了 Android UI 组件,包括 Button、Dialog、ListView 等,为读者提供了UI控件的学习基础;
第5章主要介绍了Android控制层的开发,包括Activity、Intent、Service等,它们是Android的核心组件;
第6章主要介绍了Android任务和进程/线程模型;
第7章主要介绍了SharedPreferences、文件存取、SQLite数据库、ContentProvider等Android持久层的功能;
第8章通过实例介绍了Android单元测试框架、单元测试方法以及性能测试工具;
第9章主要介绍了一些常用的Android网络通信开发,如HTTP、Socket、SMS等的开发;
第10章主要介绍了硬件方面的编程如照相功能、电话功能开发等;
第11章介绍了综合案例1:好友列表获取;
第12章介绍了综合案例2:RSS阅读器;
第13章介绍了综合案例 3:Hot Or Not 移动客户端;
第14章介绍了综合案例4:MP3播放器;
第15章介绍了综合案例5:计算器;
第16章主要介绍了 Android Market 以及如何在其上发布产品并赚取第一桶金。
本书由张利国负责策划和统稿,感谢xmobileapp团队的同事罗峰、龚海平、王植萌、代闻、于浩等积极参与本书的编写和修改工作,是大家共同的努力才使本书能尽快与读者见面。由于书稿的内容较多、参考资料有限,尽管再三审查但在编写过程中难免还会有些错误,恳请广大读者、老师批评指正。在此我们表示衷心的感谢!
学习建议
本书的源代码可以在www.cww.net.cn的图书频道中找到。为了提高学习效果,希望读者能够在理解的基础上修改源代码,完善一些功能,加深印象。同时,希望读者尽可能多参阅 Android SDK 文档以及官方论坛。在阅读本书的过程中如果遇到问题,请发送邮件到liguo.zhang@xmobileapp.com;对本书的编辑和出版的意见可发送邮件至zhaobin@ptpress.com.cn,我们将会及时回复您。编者2009年仲夏于北京第1章Android移动平台概述1.1 Google Android 平台简介
1.1.1 Android 发展历史
2007年11月5日,Google发布基于Linux平台的开源移动手机平台——Android。该平台由操作系统、中间件、用户界面和应用软件等组成,号称是首个为移动终端打造的真正开放的移动开发平台。
2008年9月22日,美国运营商 T-Mobile USA 在纽约正式发布第一款 Google 手机——T-Mobile G1。该款手机为中国台湾宏达电代工制造,是世界上第一部使用 Android 操作系统的手机,支持WCDMA/HSPA网络,理论下载速率为7.2Mbit/s,并支持Wi-Fi无线局域网络。
Google 与开放手机联盟(Open Handset Alliance)合作开发了 Android 移动开发平台,这个联盟由摩托罗拉、高通、宏达电和 T-Mobile、中国移动等在内的 30 多家移动通信领域的领军企业组成。Google与运营商、设备制造商、开发商和其他第三方结成了深层次的合作伙伴关系,希望通过建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。
Android作为Google企业战略的重要组成部分,将进一步推进“随时随地为每个人提供信息”这一企业目标的实现。我们发现,全球为数众多的移动电话用户从未使用过任何基于Android的移动通信设备,Google的目标是让移动通信不依赖于设备甚至平台。出于这个目的,Android将补充而不会替代Google长期以来奉行的移动发展战略:通过与全球各地的手机制造商和移动运营商结成合作伙伴,开发既有用又有吸引力的移动服务,并推广这些产品。
1.1.2 Android 平台研发队伍
Android平台的研发队伍阵容强大,包括Google、HTC(宏达电)、T-Mobile、高通、摩托罗拉、三星、LG以及中国移动在内的30多家企业都将基于该平台开发手机的新型业务,应用之间的通用性和互联性将在最大程度上得到保证。开放手机联盟(OHA)表示, Android平台可以促进移动设备的创新,让用户体验到最优越的移动服务;同时,开发商也将得到一个新的开放级别,更方便地进行协同合作,从而保障新型移动设备的研发速度。
30多家企业的加盟,将大大降低新型手机设备的研发成本,完全整合的“全移动功能性产品”成为开放手机联盟的最终目标。
在这 30 多家企业中并不包含全球手机第一巨头诺基亚,把持 UIQ 平台的索尼爱立信,凭借着iPhone风靡一时的苹果公司,以及AT&T、Verizon、微软,还有独树一帜的加拿大RIM和他们的Blackberry。
第一批加入开放手机联盟的成员有以下一些群体。
● 手机制造商
中国台湾宏达国际电子(HTC)(Palm等多款智能手机的代工厂)
摩托罗拉(美国最大的手机制造商)
韩国三星电子(仅次于诺基亚的全球第二大手机制造商)
韩国LG电子
● 电信运营商
中国移动(全球最大的移动运营商,4亿用户)
日本KDDI(2900万用户)
日本 NTT DoCoMo(5200 万用户)
美国 Sprint Nextel(美国第三大移动运营商,5400 万用户)
意大利电信(Telecom Italia)(意大利主要的移动运营商,3400 万用户)
西班牙Telefónica(在欧洲和拉美有1.5亿用户)
T-Mobile(德意志电信旗下公司,在美国和欧洲有1.1亿用户)
● 半导体公司
Audience Corp(声音处理器公司)
Broadcom Corp(无线半导体主要提供商)
英特尔(Intel)
Marvell Technology Group
Nvidia(图形处理器公司)
SiRF(GPS技术提供商)
Synaptics(手机用户界面技术)
德州仪器(Texas Instruments)
高通(Qualcomm )
● 软件公司
Aplix
Ascender
eBay的Skype
Esmertec
Living Image
NMS Communications
Noser Engineering AG
Nuance Communications
PacketVideo
SkyPop
Sonix Network
TAT-The Astonishing Tribe
Wind River Systems
2008年12月15日,又有14家公司加入了开放手机联盟。新加入开放手机联盟的有软银移动和英国沃达丰集团(Vodafone Group)2家运营商;中国台湾华硕电脑(ASUSTeK Computer)、美国高明(Garmin International)、中国华为技术(Huawei Technologies)、索尼爱立信以及东芝5家厂商。此外,还有美国AKM半导体、英国ARM、美国创锐讯通信(Atheros Communications)以及瑞典爱立信等 4家厂商,1家软件开发企业——日本欧姆龙软件(Omron Software),2家 Android 的商用化企业——中国播思通讯(北京)和瑞典Teleca。2009年5月18日,中国联通宣布加入开放手机联盟,这样开放手机联盟的成员总数达到了48家公司。
1.1.3 Android 的未来展望
美国咨询研究集团 Strategy Analytics 的最新报告指出,Google 最近公布的 Android 手机软件平台,在2008年时获得了全球智能手机软件平台2%的市场份额。
与iPhone相似,Android采用WebKit浏览器引擎,具备触摸屏、高级图形显示和上网功能,用户能够在手机上查看电子邮件、搜索网页和观看视频节目等,比iPhone等其他手机更强调搜索功能,界面更强大,可以说是一种融入全部Web应用的开放平台。
Android是一个对第三方软件完全开放的平台,开发者在为其开发程序时拥有更大的自由度,突破了 iPhone 等只能添加为数不多的固定软件的枷锁;同时与 Windows Mobile、Symbian等厂商的不同之处是Google向开发人员免费提供Android系统,这样可节省近三成成本。Android项目从手机运营商、手机厂商、开发者和消费者那里获得了大力支持。
1.1.4 Android 在中国的市场前景
OMS 是 Open Mobile System 的缩写,中文名称为开放式手机操作系统。它是由中国移动通信定制的,Google Android 平台演变出的一种更适合中国手机用户群的智能手机操作系统。OMS 采用 Linux 内核,通过大唐移动的 3G 芯片 TD-SCDMA 以 Modem AP 的方式桥接,使得Android平台兼容了中国移动TD网络,OMS目前仍然处于完善期。首先使用OMS系统的将是联想的OPhone手机,最终将会随着3G牌照的发放,Android平台的完善、以及中国本土汉化、输入法等诸多细节完善后开始投放市场。
2009年5月17日,首款安装中国移动OMS操作系统的联想Ophone开始了为期一个月的用户体验活动。作为联想与中国移动深度定制合作的O1手机,外观设计轻薄、圆滑而又坚硬,采用大尺寸触摸屏幕的UI设计风格。各大手机网站对于这款划时代的国产手机好评如潮,为日后正式推向市场做了充分的铺垫。此外其他的国内手机生产厂商也正在酝酿着自己的Android手机产品。1.2 Android 平台所提供的功能
Android 平台下层结构的核心为嵌入式 Linux 2.6 操作系统,中间是 Google 为 Android开发的Libraries(函数库)及Android Runtime(核心库、Dalvik虚拟机),上层为Application Framework(应用程序框架)。由此来开发各种不同的手机应用程序,如图1-1所示。图1-1 Android 平台框架
Android目前所提供的功能如下。
● 应用程序架构:在应用程序架构内已经具备多种不同的基础软件元素,在开发应用程序时,可以直接调用这些元素来使用,节省了开发应用程序的精力和时间。
● Dalvik虚拟机:是Google为了节省手机上的资源而开发的虚拟机。不同于JavaME虚拟机(Java Micro Editon Virtual Machine),它在运行效率和 GC 上比 Jave ME 好很多,比如进程和Activity的生命周期都是由虚拟机决定的,Google优化了Dalvik的多线程、多任务能力,并充分发挥了Linux的多任务性。
● Android 浏览器:是 Google 以 WebKit 的浏览引擎为基础开发成的。配合 Android手机的功能,可以在浏览网页时达到更好的效果,例如:局部性的缩放网页上的资讯、触控式的操作等效果。
● Android 绘图能力:Android 绘图功能分为2D与3D两个方 面。在2D方面, Android 提供了一套特有的函数库(SGL);而在3D方面则是使用 OpenGL ES (OpenGL for Embedded Systems)规范的函数库。
● SQLite 数据库:SQLite 是一套开放性源代码的关系型数据库,其特点在于轻量级的设计结构,更适合在手机上使用。
● 多媒体支持:在 Android 平台上支持多种不同的多媒体格式。例如:MPEG-4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等格式。
● GSM 驱动模块:Android 平台提供了专门的 GSM 驱动模块。
● Bluetooth、EDGE、3G 及 Wi-Fi:Android 平台提供了蓝牙、EDGE、3G 以及 Wi-Fi无线局域网的功能。
● Camera、GPS、电子指南针(compass)、加速感应器(accelerometer):Android平台提供了照相、导航、指南针、加速感应器等功能。
● Android 开发环境:Android SDK 提供了完善的程序开发环境。其开发环境包括模拟器(Emulator)、调试工具(Android Debug Bridge)、程序执行所耗用内存、性能等方面的评估功能;另外,也有提供可用于 Eclipse IDE 的插件 ADT(Android Development Tools)。1.3 Android 框架简介
1.3.1 Android 框架组成
Android框架共由5部分组成。分别是:
● Applications(应用程序层);
● Application Framework(应用程序框架);
● Android Runtime(Android执行环境,包括Android Core Libraries和Dalvik Virtual Machine);
● Libraries(函数库);
● Linux Kernel(Linux 内核)。
下面首先讨论 Applications(应用程序层)及 Application Framework(应用程序框架),然后讨论 Libraries(函数库)、Android Runtime(Android 执行环境)及 Linux Kernel(Linux内核)。
1.3.2 Android 应用程序层
Android会同一系列核心应用程序包一起发布,该应用程序包包括E-mail客户端、SMS短消息程序、日历、地图、浏览器及联系人管理程序等。所有的应用程序都是使用Java语言编写的,如图1-1“APPLICATIONS”一栏所示。
1.3.3 Android 应用框架
开发人员可以完全访问Android核心应用程序所使用的API框架,如图1-1“APPLICATIONS FRAMEWORK”一栏所示。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块,并且任何其他的应用程序都可以使用其所发布的功能块(不过要遵循框架的安全性限制)。同样,该应用程序重用机制也可以使用户方便地替换程序组件。
隐藏在每个应用后面的是一系列的服务和系统,其中包括以下几种:
● 丰富而又可扩展的视图(Views)可以用来构建应用程序,包括列表(Lists)、网格(Grids)、文本框(Text Boxes)及按钮(Buttons)等;
● 内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据;
● 资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串、图形和布局文件(layout files);
● 通知管理器(Notification Manager)使得应用程序可以在状态栏中显示自定义的提示信息;
● 活动管理器(Activity Manager)用来管理应用程序生命周期并提供常用的导航回退功能。
1.3.4 Android 运行库
如图1-1“Andrdd RUNTIME”一栏所示,Android 包括了一个核心库(Core Libraries),该核心库提供了Java编程语言核心库的大多数功能。
Dalvik 虚拟机(Dalvik Virtual Machine)是一种寄存器形态的虚拟机,缩写为 DVM。Google在DVM开发时就已经设想用最少的内存来执行,并以同时可执行多个VM为前提。
上述的特性需要Linux操作系统的协助才能实现,例如程序执行的控制、多线程的支持、内存管理等。事实上,不仅Dalvik虚拟机如此,Java虚拟机也同样具有操作系统依赖性,不同的操作系统需要不同的Java虚拟机,而虚拟机会针对操作系统再进行各项调整,以便能最佳化执行。
Dalvik虚拟机是Google用于移动设备Android平台的一个重要组成部分。虚拟机可运行Java平台应用程序,这些应用程序被转换成紧凑的Dalvik可执行格式(.dex),该格式适合内存和处理器速度受限的系统。
大多数虚拟机(包括Java虚拟机)与Dalvik虚拟机不同,前者是栈机(Stack Machine),而 Dalvik 虚拟机是基于寄存器架构的。就像 CISC 与 RISC 的争论,这两种方式的相对优势是不断争论的话题,而且有时技术界限会变得模糊不清。此外,两种方法的相对优势取决于所选择的解释/编译策略。总地来说,基于栈的虚拟机必须使用指令来载入栈上的数据,或使用指令来操纵数据,因此与基于寄存器的虚拟机相比,需要的指令更多。
dx工具用于转换 Java的.class文件到.dex格式。多个类文件可包含到单个的.dex文件中。重复的、可用于多个类的字符串和其他常量在转换到.dex格式时输出到保留空间。Java字节码还可转换成可选择的、Dalvik VM 使用的指令集。一个未压缩的 .dex 文件在文件大小方面往往比从同样的.class文件压缩成的.jar文件更小。
为满足低内存要求而不断优化,Dalvik虚拟机有一些独特的、有别于其他标准虚拟机的如下特征:
● 虚拟机很小,使用的空间也小;
● Dalvik 没有 JIT 编译器;
● 常量池已被修改为只使用 32 位的索引,以简化解释器;
● 使用自己的字节码,而非 Java 字节码。
此外,Dalvik被设计用来满足可高效运行多种虚拟机实例。
1.3.5 Android 程序库
如图1-1“LIBRARIES”一栏所示,Android 包含一些 C/C++ 库,这些库能被 Android系统中不同的组件使用。它们通过 Android应用程序框架为开发者提供服务。以下是一些核心库。
● libc:系统 C 库,一个从 BSD 继承来的标准 C 系统函数库,它是专门为基于嵌入式Linux设备所定制的。
● 媒体库,基于 PacketVideo OpenCORE。该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG-4、H.264、MP3、AAC、AMR、JPG及PNG。
● Surface Manager:对显示子系统的管理,并且为多个应用程序提供 2D 和 3D 图层的无缝融合。
● LibWebCore:一个最新的 Web 浏览器引擎,支持 Android 浏览器和一个可嵌入的Web视图。
● SGL:底层的 2D 图形引擎。
● 3D libraries:基于OpenGL ES 1.0 APIs实现,该库可以使用硬件3D加速(如果可用)或者使用高度优化的3D软加速。
● FreeType:位图(Bitmap)和矢量(Vector)字体显示。
● SQLite:一个对于所有应用程序可用的、功能强大的轻量级关系型数据库引擎。
1.3.6 Android 内核
Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux 内核也同时作为硬件和软件之间的抽象层,如图1-1“LINUX KERNEL”一栏所示。1.4 Android SDK 简介
Android SDK 包含一系列 Android 应用开发工具和文档,包括调试器、库文件集、手机设备模拟器、文档、范例和开发指导。现在所支持的开发平台包括运行Linux操作系统的x86-architecture、Mac OS X 10.4.8 及其升级版本、Windows XP 和 Vista。运行 SDK 需要安装 JDK(Java Development Kit)、Apache Ant 和 Python 2.2 及其以后版本。Android 官方支持的IDE(Integrated Development Environment)是Eclipse(3.2或其升级版本)。Eclipse需要添加 ADT(Android Development Tools)插件。
2007年12月12日,第一版 Android SDK 发布。2008年6月15日,Android 官方向所有参加Android应用开发挑战大赛的开发人员发送邮件,告诉他们一个不公开的网址去下载最新版本的SDK,让他们在使用后提供改进意见。
2008年8月18日,Android SDK 0.9 beta 版本发布。这个版本包含很多升级和扩充后的API,对开发工具进行了改进,并且对Android桌面进行了重新设计。2008年9月23日, Android SDK 1.0 版本发布。这个版本解决了 Android 的主要缺陷,增加了一些功能,并继续对API进行了少许的改进。
2009年3月9日,Google 发布了 SDK 1.1 版本。这个版本在外观上进行了改进,添加了语音查询、付费软件、闹钟及免费发送Gmail邮件等功能。从这个版本开始,用户就可以登录 Android Market 购买付费软件了。
在 2009年的 4月30日,Android SDK 1.5 官方版本正式发布,它在 SDK1.1 的基础上进行了如下改进:
● 可以在摄像机模式(camcorder mode)下记录和观看视频;
● 可以利用手机设备直接上传视频到 Youtube 网站,还可以直接上传图片到 Picasa 网站;
● 在 SDK1.1 的基础上增加了软键盘自动完成输入功能;
● 可以在一定距离内自动连接到蓝牙移动通信设备上;
● 在桌面上添加了新的 widget 应用和文件夹;
● 增加了屏幕间转换的动画效果;
● 增加了复制和粘贴的功能。1.5 Android 与其他主流手机平台的比较
1.5.1 Window Mobile 平台
Windows Mobile 是 Microsoft 针对移动产品而开发的精简操作系统,如图1-2 所示。Windows Mobile 捆绑了一系列针对移动设备而开发的应用软件,这些应用软件建立在 Microsoft Win32 API 的基础上,可以运行 Windows Mobile 的设备包括 Pocket PC、Smartphone 和 Portable Media Center。该操作系统的设计初衷是尽量接近于桌面版本的Windows。图1-2 Windows Mobile 操作系统
1.5.2 Palm 平台
Palm OS 早期是由 US Robotics(其后被 3Com 收购,再独立后又改名为 Palm 公司)研制的专门用于其掌上计算机产品Palm的操作系统,如图1-3所示。图1-3 Palm 操作系统
由于此操作系统完全是为Palm产品设计和研发的,而其产品在推出时就超过了苹果公司的Newton而获得了极大的成功,Palm OS 也因此声名大噪。其后曾授权给 IBM、Sony、Handspring等厂商,使用在各自旗下产品中。
Palm OS 操作系统以简单易用为前提,运作时所需要的内存与处理器资源较小,速度也很快,但不支持多线程,因此其长远发展受到了限制。
Palm OS 版权现在由 PalmSource 公司所有,并由PalmSource开发及维护。2005年9月9日,PalmSource被日本软件开发商爱可信收购。
目前,Palm 类产品中的 Palm OS 版本大部分为 5.0 甚至更高,但市场上还未出现采用 Palm OS 6 的产品。
1.5.3 iPhone 平台
iPhone OS 或 OS X iPhone 是由苹果公司为 iPhone 开发的操作系统,如图1-4 所示。iPhone 操作系统主要是给 iPhone 和 iPod touch 使用的。就像基于 Mac OS X 操作系统一样,它也是以 Darwin 为基础的。iPhone OS 的系统架构分为 4 个层次:核心操作系统层(the Core OS layer)、核心服务层(the Core Services layer)、媒体层(the Media layer)及可轻触层(the Cocoa Touch layer)。图1-4 iPhone 操作系统
1.5.4 Symbian 平台
Symbian操作系统是Symbian公司为手机而设计的操作系统,如图1-5所示。Symbian 系统包含由 Symbian Ltd 所提供的相关函数库(libraries)、用户界面(user interface)架构和公共工具(common tools)的参考实现(reference implementation),它的前身是Psion的EPOC,并且独占式地执行于ARM处理器。图1-5 Symbian 操作系统
在2008年6月以前,Symbian被爱主信、松下、西门子、诺基亚和索尼爱立信等公司所共有。
2008年6月24日,诺基亚宣布,该公司将收购Symbian Ltd 目前尚不属于诺基亚的 52% 股份,并将会把Symbian平台完全依据Eclipse开放源代码授权条款释出。诺基亚也宣布将成立“Symbian基金会”,让各家手机厂商和软件供应商能够加入这个联盟。2008年12月2日,诺基亚宣布完成对Symbian的收购。2009年2月1日,Symbian职员正式成为诺基亚员工。
1.5.5 BlackBerry 平台
BlackBerry(黑莓)是美国市场占有率第一的智能手机,如图1-6所示,这得益于它的制造商 RIM(Research in Motion)较早地进入移动市场并且开发出适应美国市场的邮件系统。大家都知道BlackBerry的经典设计就是宽大的屏幕和便于输入的 QWERTY 键盘,所以BlackBerry一直是移动电邮的巨无霸。正因为是正统的商务机,所以它在多媒体播放方面的功能非常薄弱,也许它在未来应该着力于改善这个弱点,因为手机的多功能化是大势所趋,人们不会只满足于单一的功能。图1-6 BlackBerry 操作系统
BlackBerry 开始于1998年,RIM的品牌战略顾问认为,电子邮件接收器挤在一起的小小的标准英文黑色键盘,看起来像是草莓表面的一粒粒种子,就起了这么一个有趣的名字。应该说,Blackberry与桌面PC同步堪称完美,它可以自动把Outlook的邮件转寄到Blackberry中,不过在你用Blackberry发邮件时,它会自动地在邮件结尾加上“此邮件由Blackberry发出”字样。
BlackBerry在美国之外的影响微乎其微,中国于2008年已经在广州开始与RIM合作进行移动电邮的推广试验,不过目前看来收效甚微。由于中国对于电子邮件的依赖并不像美国人那么强,他们在电子邮件里讨论工作、安排日程,而我们则更倾向于当面交谈。可以说BlackBerry在中国的影响几乎为零,除了它那经典的外形设计。
1.5.6 Android 平台
Android操作系统,如图1-7所示,前面章节已经对Android平台作了详细的介绍,在此就不再赘述。图1-7 Android 操作系统
1.5.7 Android 与 Symbian、Windows Mobile、iPhone 等之间的比较
● Android 和 Symbian
目前包括诺基亚、三星在内的大型终端厂商都有大量采用Symbian平台的产品,同时也拥有这方面丰富的设备产品和应用产品的设计经验。在用户层面上,目前使用Symbian平台手机的用户也是最多的,因此,在未来一段时间内,Symbian仍将是中国市场上的主流。但以诺基亚为代表的Symbian队伍有两个弱点:一是开源不彻底,虽然Symbian宣布开源,但是在2010年前仍然是需要收取操作系统使用版权费用,这对中小型的手机厂商仍然是一个不小的成本;二是目前中国手机市场占有率最高的诺基亚摇身一变成为了“运营商”,通过手机预植连接诺基亚门户网站的业务程序(例如在浏览器上设置诺基亚门户为默认网页等)来提供增值业务。相对而言,Android免费对中小型手机厂商的吸引力还是很大的,而且运营商也希望通过开源免费的Android来定制自己的操作系统以达到控制终端业务的目的。
● Android 和 Windows Mobile
Windows Mobile,估计很长一段时间内都不会开源的,微软没有这么开放,还是向手机厂商收着软件版权费。Windows Mobile 终端的市场占有率不是太高,但是推出一段时间以来也吸引了不少高端手机采用。相信未来中小型的厂商还是会趋向采用Android,毕竟免费又实惠;而且微软一般也不会去买中国本地运营商的账,预植业务也是免谈了。
● Android 和 iPhone
iPhone手机的商业模式跟上面两种都不太一样,这取决于iPhone手机硬件与软件一一绑定的特性。Apple采用与运营商分成的策略,因为Apple相信iPhone手机就是个卖点。从美国的情况来看,运营商在iPhone内预植业务是可以的,但是大部分业务的获得都是通过Apple的门户提供的。iPhone虽然开放了SDK,但不能在普通PC机上使用,这对于中国的应用开发市场是个不小的障碍。
1.5.8 Android 该如何发挥优势
总的来说,Symbian 太强势、Windows Mobile 太昂贵、iPhone 太封闭,都是相比Android存在的弱点,但是Android想要成功也要做好以下3个方面。
● 3G 的机遇
Android花哨的界面如果没有快速的IP连接,显得就有点“傻”了。未来数据应用将蓬勃发展,而3G是一个不小的跨越,所以Android手机需要乘着3G的东风腾飞一下。我国3个电信运营商都获得了3G拍照,而且需要在短时间内发展大量用户,此时不推Android恐怕永远都没有机会了。
● 形成产业化
如果只有操作系统,没有好的手机和好的应用,Android也没有什么前途。因此,需要形成Android的产业联盟,其中应该有终端制造商、软件商、运营商的强势参与。
● 发展第三方业务开发
iPhone在这方面做得还是挺好的,现在已经有很多开发者在创造各种应用供用户下载了。Android也应该走这条路,不但要有运营商预植的应用,还要刺激第三方软件、内容开发商或个人开发各种各样的应用,依靠中长尾赚钱,实现运营商、软件商、内容商的共赢,形成一个强大的Android生态链。
从中国范围来看,中国移动走在Android潮流的前列,已经完成了Android的定制,还开发了不少中间件和应用,为以后的业务预植铺垫了基础。相信未来Android将在移动终端平台市场会占据重要的地位。1.6 本章小结
在这一章中,我们一起学习了什么是Android,初步了解了Android框架以及Android SDK。希望大家能够在阅读本书的同时到Android官方网站(http://www.android.com)和Android开发网站(http://developer.android.com)上和世界各地的Android爱好者一起分享自己的学习心得,通过和别人交流在学习Android过程中所遇到的问题,相互促进,一起提高,共同进步。第2章Android开发工具
Android SDK 提供了几种工具来帮助我们创建、调试和检测开发的工程。在本书中,我们不会很详细地去学习每一种工具,但是,作为一个Android开发者,我们必须要对这些工具有一个大体的了解,然后跟据每个人兴趣的不同,决定是否到网站上寻找素材,继续学习。
我们要在这章学习的内容包含如下几种开发工具:
● Dalvik 调试监控服务工具(Dalvik Debug Monitor Service);
● Android 资源打包工具(Android Asset Packaging Tool);
● Android 调试工具(Android Debug Bridge);
● SQLite 数据库;
● Traceview 工具;
● mksdcard 卡;
● dx 工具;
● activityCreator 工具。2.1 Android 模拟器(Emulator)
Android Emulator 是一个 Dalvik 虚拟机的运行工具,它可以像一台 Android 手机设备一样运行Android应用程序,使得Android应用程序不再受硬件设备的影响。更重要的是,我们可以通过使用Emulator对开发的应用程序进行简单的调试。
Emulator提供各种各样不同尺寸、不同规格的模拟设备来模拟各种款式的手机设备。使用Emulator可以进行网络连接,并且可以模拟各种各样的网络情况。当然你还可以用Emulator模拟发短信、打电话。
在ADT 插件中已经将Emulator纳入到 Eclipse中,我们可以在运行和调试Android应用时启动Emulator。如果我们不用Eclipse,也可以通过控制台telnet到Emulator上来对其进行操作。下面章节我们就来学习一些具体的操作命令。2.2 Dalvik 调试监控服务工具(DDMS,Dalvik Debug Monitor Service)
Emulator会让我们看到Application的外表是什么样子的,它具有什么样的功能。但是如果想要知道在模拟器内部究竟进行了怎样的逻辑操作,那么就要借助DDMS的帮忙了。DDMS的全称是Dalvik Debug Monitoring Service,意思是Dalvik用于调试的监控服务工具。DDMS是一个功能十分强大的调试工具,它可以监控程序的运行,查看内存中堆和栈的使用情况,监控和暂停某些运行中的线程,还可以查看Emulator的文件系统。
当 Eclipse 设置为 DDMS 模式时,DDMS 还提供 Screen Capture 抓屏工具,这样通过logcat命令可以看到Emulator中的log信息。
如果我们采用Eclipse集成开发环境,就可以直接进入DDMS模式来使用它,因为DDMS已经被集成到了Eclipse之中。如果我们不将DDMS当作Eclipse插件来使用,也可以通过控制台输入命令来启动DDMS,这样DDMS启动后会自动连接到运行中的Emulator。2.3 Android 资源打包工具(Android Asset Packaging Tool)
AAPT(Android Asset Packaging Tool)是 Android 的资源打包工具,可以通过 AAPT 工具来创建.apk文件,这些文件包含Android应用程序的二进制文件和资源文件。
Android 程序的安装文件为 APK(Android Package)格式,类似于 Symbian 操作系统中.sis文件。.apk文件其实是zip文件格式,但后缀名被修改为apk,通过UnZip解压后,可以看到 .dex 文件。dex 是 Dalvik VM Executes 的简称,即 Android Dalvik 执行程序,它是由Dalvik字节码组成的。
一个.apk文件的结构包括以下几个。
META-INF\:设有签名的apk没有这个目录,该目录下包括签名信息;
res\:存放资源文件的目录;
AndroidManifest.xml:程序全局配置文件;
classes.dex:Dalvikvm字节码;
resources.arsc:编译后的二进制资源文件。2.4 Android 调试工具(ADB,Android Debug Bridge)
ADB是基于客户端/服务器模式(C/S模式)的连接Emulator或者是真实手机设备的调试工具。概括说来,一个ADB由3部分组成:一个Emulator或是真实手机设备作为客户端,一台电脑设备作为服务器端以及客户端的应用程序如DDMS。客户端的应用程序如同连接两片水域的管道,将客户端设备与服务器端设备连接起来。使用ADB工具时,我们可以安装Android应用程序,可以使用push命令从服务器端的电脑上向Emulator或是作为客户端的手机设备上拷贝文件;也可以反过来,使用pull命令,从Emulator或是手机设备上将文件拷贝到作为服务器的计算机上。当然,更重要的是我们可以通过shell命令来访问Emulator或是真实手机设备。通过shell,可以更改log设置,查询和修改Emulator或是手机设备上的SQLite数据库。
下面我们要来进一步学习ADB的用法。以下为一些常用的操作。
● 安装、卸载应用到模拟器
adb install 如图2-1 所示。图2-1 安装应用到模拟器
adb uninstall 如图2-2 所示。图2-2 卸载应用到模拟器
● 进入设备或模拟器的 shell,如图2-3 所示
adb shell图2-3 进入设备或模拟器的 shell
通过上面的命令,就可以进入到设备或模拟器的 shell 环境中。在这个 Linux Shell 中,可以执行各种Linux的命令,另外如果只想执行一条shell命令,可以采用以下方式:
adb shell [command]
如:adb shell dmesg 会打印出内核的调试信息。
● 发布端口(如图2-4 所示)图2-4 发布端口
可以设置任意的端口号,作为主机向模拟器或设备的请求端口。如:
adb forward tcp:5555 tcp:8000
● 复制文件
可向一个设备或从一个设备中复制文件,复制一个文件或目录到设备或模拟器上。
adb push 如图2-5 所示。图2-5 向 sdcard 复制文件
如:adb push ruguodeshi.mp3 /sdcard从设备或模拟器上复制一个文件或目录。adb pull 如图2-6 所示。
如:adb pull /local/ruguodeshi.mp3图2-6 从 sdcard 复制一个文件
● 搜索模拟器 / 设备的实例
取得当前运行的模拟器/设备的实例列表及每个实例的状态。
adb devices 如图2-7 所示。图2-7 取得当前运行的模拟器 / 设备的实例的列表及每个实例的状态
● 查看 bug 报告
adb bugreport 如图2-8 所示。图2-8 查看 bug 报告
● 记录无线通信日志
一般来说,无线通信的日志非常多,在运行时没必要去记录,但我们还是可以通过命令设置记录:
adb logcat -b radio 如图2-9 所示。图2-9 记录无线通信日志
● 获取设备的序列号
adb get –serialno 如图2-10 所示。图2-10 获取设备的序列号
● 访问数据库 SQLite3
adb shell sqlite3 如图2-11 所示。图2-11 访问数据库 SQLite3
● 进入调试模式,如图2-12 所示
adb kill-server
adb start-server图2-12 进入调试模式2.5 SQLite 数据库
Android使用SQLite,是由于它是一个用于实现自包含、非服务式、零配置、事务化的SQL数据库引擎。SQLite与其他大多数SQL数据库不同的是,SQLite没有独立的服务进程。SQLite直接读写原始的磁盘文件,一个拥有多个表、索引、触发器和视图的完整SQL数据库就包含在一个独立的磁盘文件中。数据库文件的格式是跨平台的,可以在32位和64位系统之间,甚至在Big-Endian和Little-Endian两种不同的架构间自由地拷贝数据库,这一特性让SQLite成为一种流行的应用文件格式选择。
SQLite是世界上使用最广泛的SQL数据库引擎之一,被用在大量的桌面电脑以及消费电子设备中,如移动电话、掌上电脑和MP3播放器等。
SQLite具有以下一些特点。
● 无需配置:SQLite 不需要安装,直接解压可执行文件即可运行;
● 没有服务进程:SQLite 无需通过 TCP/IP 等通信协议提交 SQL 到服务端,处理后再返回结果;
● 单个数据文件:SQLite 将用户数据存于单个普通文件里面,也就是说用户只要有数据文件的读权限,就可以读取所有数据,有写权限也能改变数据;
● 数据文件可跨平台迁移:SQLite 本身是跨平台的,它的数据文件同样也是跨平台的,数据文件和平台的字节序无关,也和CPU的位数无关,直接复制数据文件就可以实现数据迁移;
● 紧凑:SQLite 的运行环境非常小,如果在编译的时候去掉不需要的功能,可以减小至170kB,非常适用于Android;
● 松散数据类型:不同于其他数据库的严格的数据类型检查,SQLite 在尝试类型转换失败以后,允许在任何表的任何列里面插入任何类型的数据(一个例外是整型的主键列里面只能存整型数据);
● 变长的数据记录:任何文本都是 VARCHAR;
● 可读性很高的源码:普通的程序员都能读懂,关键的变量和函数都有详细的注释;
● SQL 语句编译成虚拟机器语言:SQLite 把 SQL 语句预编译成一种类似机器语言的代码,程序员可以方便地打印出代码及代码的执行结果,这样对debug很有好处;
● 完全的公开:SQLite 的源码可以任意下载使用,没有任何约束和版权(一些文档和测试代码是受开源license保护的);
● SQL 语言扩展:SQLite 可以模块化地添加扩展,以增强其功能。
当然,SQLite也有一些缺点,这取决于用户的需求。SQLite不具有高度并发性和良好的存取权限控制,没有内置的函数集,不支持存储过程以及深奥的SQL语言特性(SQLite并不完全支持SQL92),不支持XML/Java扩展,不具有tera-byte或者peta-byte的可伸缩性等。所以,当需要上面列举的这些功能时,SQLite就不再适合用户了。SQLite不是企业级的RDBMS。
我们可以在 Android 控制台使用如下命令访问 Android SQLite 数据库:
$ adb -s emulator-5554 shell
# sqlite3 /data/data/com.example.google.rss.rssexample/databases/rssitems.db
SQLite version 3.3.12
Enter ".help" for instructions
.... enter commands, then quit...
此时可以在控制台输入SQL命令,如果要退出,则输入exit命令或者按CTRL+D。2.6 Traceview 工具
可以通过Traceview图形化界面的读取工具来读取Android的日志信息。下面就来学习如何具体地应用Traceview工具。
首先要做的就是生成一个包含有trace信息的日志文件。为了实现这个功能,需要在代码中引入Debug类,使用其中的start和stop方法将trace信息记录在.trace文件中。每当运行完一个Android应用程序时,我们就可以使用Traceview工具来运行新生成的.trace日志文件。
具体来说,要在Activity的onCreate()中加入Debug.startMethodTracing(“traceName”)方法,在onDestroy()中加入Debug.stopMethodTracing()方法。如下所示:
// start tracing to "/sdcard/traceName.trace"
Debug.startMethodTracing("traceName");
// ...
// stop tracing
Debug.stopMethodTracing();
如果我们用的是Emulator而不是真机,那么就意味着需要在创建.trace文件之前先为Emulator创建一张虚拟的SD卡。
创建方法如下:
$ mksdcard 1024M ./imgcd
$ emulator -sdcard ./imgcd
其次要做的就是将生成的.trace文件复制到用作服务器的计算机上。我们采用pull方法完成这件事情,具体方法如下:
Adb pull /sdcard/traceName.trace /tmp
最后要做的就是使用Traceview方法来执行.trace文件,具体方法如下:
traceview /tmp/traceName
Traceview的展示窗口包含有两组图像报表,一组是与时间信息有关的图表,另一组是应用中所使用到的类及其方法所消耗掉的时间资源,如图2-13所示。图2-13 Traceview 的展示窗口2.7 mksdcard 卡
大家注意到在上一节中讲到创建一个.trace文件的时候,如果使用的是Emulator,没有SD 卡,那么就要采用 mksdcard 方法来创建一张虚拟的 SD 卡。
具体的方法我们再重复一遍:
$ mksdcard 1024M ./imgcd
$ emulator -sdcard ./imgcd
下面我们再来具体说说如何使用mksdcard工具。
在控制台运行命令mksdcard,则会出现如下提示:
mksdcard: create a blank FAT32 image to be used with the Android emulator
usage: mksdcard [-l label]
if
if
if
我们可以看到sdcard image支持FAT32格式,其中,usage: mksdcard [-l label]
试读结束[说明:试读内容隐藏了图片]