Android移动开发入门与进阶(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-04 19:06:45

点击下载

作者:张利国,龚海平等

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Android移动开发入门与进阶

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 is a simple integer, it specifies a size in bytes

if is an integer followed by 'K', it specifies a size in KiB

if is an integer followed by 'M', it specifies a size in MiB

我们可以看到sdcard image支持FAT32格式,其中,usage: mksdcard [-l label] 是主要的参数,size为指定容量大小,

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载