2024年2月23日发(作者:夔笑笑)
Android平台分析综述
Android平台分析综述
摘要:本文通过分析Android平台框架,详细论述了Android平台三种开发模式,给出了针对Android平台框架及其相关模块的分析方法,并以项目为例,讨论了我们在Android平台上的开发流程了及其改进方案。
关键字:Android, 框架分析 开发模式 Marvell平台
1 引言
对于移动终端设备开发商而言,Android平台的出现既是机遇也是挑战。如何在最短的时间内搭建和部署Android平台、如何开发高效的应用程序、如何高效的进行项目管理等问题均显得尤为突出。
为了能够更好地解决上述问题,本文首先对Android平台的由来和功能做了简要的介绍,通过对Android平台框架的介绍,以期能够对Android有一个全面的认识。在此基础之上,本文从软件的角度提出了Android平台分析方法及其开发模式。最后,本文结合项目,简要介绍了Marvell平台的开发流程。
2 Android平台简介
2.1 Android的由来
2005年7月,Google并购了成立仅22个月的高科技企业Android公司,展开了短信、手机检索、定位等业务,同时基于Linux的Android平台也进入了开发阶段。
2007年11月05日,以Google为主导,由几十个手机相关企业建立了开放手机联盟(OHA,Open
Handset Alliance)宣布成立,并宣布开发基于Linux2.6内核的开源手机系统平台——Android。该平台由操作系统、中间件、用户界面和应用软件组成。它采用软件堆层(Software Stack,又名软件叠层)的架构,主要分为三部分。底层以Linux内核工作为基础,由C语言开发,只提供基本功能;中间层包括函数库Library和虚拟机Virtual Machine,由C++开发。最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自行开发,以Java作为编写程序的一部分。不存在任何以往阻碍移动产业创新的专有权障碍,号称是首个为移动终端打造的真正开放和完整的移动软件。
目前,OHA的成员主要包括电信运营商(包括中国移动、中国电信、中国联通在内的13家)、手机厂商(包括华为、中兴在内的20家)、芯片公司(包括Marvell、高通在内的20家)、软件公司(如Google等16家)和商业化公司(如播思等10家)等五大类,共79个成员。Google通过与联盟成员结成深层次的合作伙伴关系,并希望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。
2.2 Android的特性及其优势
Android主要有如下特性:
应用程序框架 支持组件的重用与替换;
Dalvik虚拟机 专门为移动设备做了优化;
内部集成浏览器 该浏览器基于开源的WebKit引擎;
优化的图形库,包括:2D和3D图形库,3D图形库基于OpenGL ES 1.0 (硬件加速可选);
SQLite 用作结构化的数据存储;
多媒体支持:包括常见的音频、视频和静态印象文件格式(如 MPEG4, H.264, MP3, AAC,
1
Android平台分析综述
AMR, JPG, PNG, GIF);
GSM、CDMA电话(依赖于硬件);
蓝牙Bluetooth, EDGE, 3G, and WiFi(依赖于硬件);
照相机,GPS,指南针,和加速度计(依赖于硬件);
丰富的开发环境:包括设备模拟器,调试工具,内存及性能分析图表,和Eclipse集成开发环境插件
Android作为一个智能手机的平台,其技术上的优势主要包含以下一些方面[1]:
全开放智能移动电话平台;
多硬件平台的支持;
核心技术完整、统一;
完善的SDK和文档;
完善的辅助开发工具。
2.3 Android的版本
自2009年2月9日,发布Android1.1版本以来,Android已经发布了多个版本更新,这些更新主要是修复了前一版本的bug,并增加了一些新的特性。通常,每一次版本发布,除了给每一代Android操作系统命名一个数字编号外,还有一个以甜食命名的代号,并有着A、B、C、D、E„„这样的首字母排序。目前已知的包括1.5版 Cupcake(纸杯蛋糕),1.6版Donut(甜甜圈)、2.0/2.1版Eclair(法式奶油夹心甜点)、2.2版Froyo(冻酸奶)以及下一代2.3版Gingerbread(姜饼)。表 1给出了Android各个版本的主要特性。
表 1 Android各版本的主要特性
版本号、发布日期及Linux版本
版本号:1.1
发布日期:2009.2.9
特性 代表机型
闹钟、API 示例、浏览器、计算器、摄像头、联系人、开发工具包、拨号应用、电子邮件、地图 (包含街景)、
信息服务、音乐、图片、设置
2008年9月23日在美国,谷歌联合HTC和T-Mobile联合发布了史上第一台Android手机,即: T-Mobile G1,其采用的是Android1.0版本
HTC在MWC2009大会上发布了HTC Magic,民间俗称G2;
2009年5月,HTC发布HTC
Hero,采用了HTC Sense 的UI
HTC Tattoo(G4);
联想乐Phone
版本号:1.5 用户界面得到了极大的改良,并且增添了以下功能:
代号:Cupcake 支持拍摄和回放视频并支持上传视频到
发布日期:YouTube 以及 Picasa;
2009.4.30
支持蓝牙A2DP和AVRCP,并支持自动蓝牙连接
Linux版本:支持拷贝/粘帖,增加新的软(虚拟)键盘;
2.6.27
增加新的主屏widgets,支持动态界面切换;
版本号:1.6
代号:Donut
发布日期:2009.9.15
Linux版本:2.6.29
主要的更新如下:
Android 应用市场集成;
照相、摄像以及浏览, 多选/删除功能;
手势搜索;
语音搜索应用集成,极大提升了语音阅读功能,支持文字转语音系统(TXT-2-speech);
对非标准分辨率有了更好的支持;
支持CDMA网络;
版本号:2.0/2.1 其主要更新如下:
代号:Eclair 优化硬件速度;
2
索尼爱立信X10;
摩托罗拉Milestone(XT702,
Android平台分析综述
发布日期:分别于2009.12.3和2010.1.12
Linux版本:2.6.29
支持更多的屏幕分辨率;
增加新的浏览器UI并支持HTML5;
新的联系人列表;
优化Google Maps 3.1.2
支持Microsoft Exchange;
支持多点触摸;
优化了虚拟键盘;
支持蓝牙2.1;
支持活动墙纸
Droid);
Google自有品牌的Nexus
One(G5)
版本号:2.2
代号:Froyo
(Frozen
Yogurt)
发布日期:2010.5.20
Linux版本:2.6.32
主要的更新: Google Nexus One(G5);
HTC Desire
综合Android OS速度、内存及其性能优化;
JIT的实现,大幅度提升了应用程序的速度;
大量 Exchange 支持改进,支持 Exchange
2010,包括远程数据抹除,自动发现服务,完整的日程表支持,全局联系人列表查找。
蓝牙语音拨号和共享联系人;
增加数据连接使能选项;
支持多键盘语言;
支持浏览器的文件上传功能,支持GIF;
支持将应用程序安装在可扩展的存储器上(如SD卡);
支持Adobe Flash 10.1 ;
最多支持 8 个设备连接的移动热点功能
已经确认的新特性:
支持WebM视频回放;
提高复制、粘贴功能;
提高社群网络特征;
未经确认的新特性:
支持Android Market音乐存储;
重新设计的UI;
支持WXGA(1366 x 768);
支持视频电话
支持WebP图像文件;
支持Google TV
版本号:2.3
代号:Gingerbread
发布日期:近期发布
Linux版本:2.6.33或.34
版本号:3.0 此前曾传言Android 3.0新系统对硬件有了要求,
代号:最低配置1GHz处理器、512MB RAM、3.5英寸屏Honeycomb
幕。现已被证实,该传闻有误。
发布日期:2011年上半年
版本号:?4.0
代号:?Ice
Cream
发布时间:?2011年年中
3 Android平台架构
Android平台体系结构由5个部分组成,由下至上分别为:Linux内核层;C/C++函数库;Android 3
Android平台分析综述
运行时库;应用层框架;Android应用程序,如图 1所示。
图 1 Android体系结构
(1)Linux内核层
Android基于Linux2.6内核,提供核心系统服务,这些服务包括安全机制、内存管理、进程管理、网络堆栈以及一系列硬件驱动。Linux内核扮演的是硬件层和系统其他层次之间的一个抽象层的概念。需要注意的是,这个内核操作系统并非类GNU/Linux的,所以其系统库、系统初始化和编程接口都和标准的Linux系统有所不同的。它没有采用虚拟内存文件系统,而是采用YAFFS2文件系统。
(2)Android运行时库
Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。
每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中 的 "dx" 工具转化成.dex格式由虚拟机执行。一般编译完成后的应用程序名为.apk文件,它是压缩的.dex文件。Dalvik虚拟机依赖于Linux内核的一些功能,比如线程机制和底层内存管理机制。更多的细节请参考文献[2]。
(3)C/C++函数库
Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。以下是一些核心库:
系统 C 库:一个从 BSD 继承来的标准 C 系统函数库( libc ),它是专门为基于 embedded
linux 的设备定制的。
媒体库:基于 PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。
Surface Manager:对显示子系统的管理,并且为多个应用程序提供了2D和3D图层的无缝融合。
LibWebCore:一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视 4
Android平台分析综述
图。
SGL:底层的2D图形引擎
3D libraries:基于OpenGL ES 1.0 APIs实现;该库可以使用硬件 3D加速(如果可用)或者使用高度优化的3D软加速。
FreeType:位图(bitmap)和矢量(vector)字体显示。
SQLite:一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。
(4)应用框架层
在应用框架层,Android开发人员可以跟那些核心应用一样,拥有访问框架的所有APIs。该应用框架的设计简化了组件的重用;任何一个应用程序都可以发布它的功能模块,并且任何其它的应用程序都可以使用其所发布的功能块(必须遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。更多的信息可以参考文献[3]。
隐藏在每个应用后面的是一系列的服务和系统, 其中包括;
丰富而又可扩展的视图(Views):可以用来构建应用程序,它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons),甚至可嵌入的web浏览器。
内容提供器(Content Providers):使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据。
资源管理器(Resource Manager):提供非代码资源的访问,如本地字符串、图形、和布局文件(layout files)。
通知管理器(Notification Manager):使得应用程序可以在状态栏中显示自定义的提示信息。
活动管理器(Activity Manager):用来管理应用程序生命周期并提供常用的导航回退功能。
Adroid的应用框架是一个值得深入研究的课题,要想了解更多的知识可以参考文献[4]。
(5)应用程序
Android自身包含了一系列核心应用程序,包括email客户端、短消息程序、日历、地图、浏览器、,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。
要开发自己的Android应用程序,除了参考Android官方的SDK文档之外,还可以参考文献[5]和文献[6]。
4 Android平台开发与分析
4.1 开发模式
移动电话(手机)作为一种消费类电子产品,走进普通民众的生活已经有20年左右的历史了。移动电话的开发经历了以下几个模式[1]:
传统移动电话的开发;
半开放式移动电话的开发;
全开发式移动电话的开发;
从移动电话开发的历史来看,传统的开发模式一直是一种主要的形式,其开发模式及商业模式一般只有一种,即:厂商制作移动电话出售。其特点是:开发出来的移动电话是一个封闭的系统,它与其他类型的产品没有太大的差别。用户只能使用移动电话厂商提供的固定功能,而不能根据需求开发和使用个性化的功能。
随着用户对移动电话系统的自定义需求的增加,移动电话系统的开发走向了开放模式,其事实上是一种半开放式的移动电话开发,它把移动电话的开发过程分成了两个阶段:
厂商制作移动电话出售;
第三方开发移动电话应用。
在这种半开放式的移动电话开发中,厂商依然依靠制造移动电话出售作为主要的盈利模式,但是增加了第三方开发移动电话程序的机会。如:iPhone可以开发第三方应用程序,并可以在AppStore 5
Android平台分析综述
进行交易,支持让用户自己下载和安装程序。
在上述开放模式中,第三方应用的接口是开放的,但是移动电话系统本身的开发并不是开放的,其实质是一种半开放的开发模式。Android的出现,构建了一种新型的开发模式,即:全开放的移动电话开发模式。它不但可以使用第三方应用,而且其系统平台自身也是完全开放的。
Google的Android平台系统,同时也是一个完整的生态系统,它包含了三个有机的成分:
Android源码工程(Android Open Source Project,/ );
Android开发者(Android Developer,/ );
Android市场(Android Market,/market )
其三者的关系如图 1所示。
图 2 Android源码、开发者和市场三者的关系
Android源码工程包含了Android系统的全部源代码,用于开发移动电话系统;Android开发者包含了Android应用层的接口和开发文档,提供给Android应用程序的开发者;Android市场是Google为Android的程序交易提供的场所。三者相互依存,无论是系统软件的开发、还是应用程序的开发以及应用程序的交易,都是完全开放的。
4.2 开发工作的类型
Android平台系统的体积非常的庞大。仅从代码量来说,由图 3可以看出,Android平台系统包[7]含300万行XML、280万行C代码,210万行Java代码及175万行C++代码。其总文件数达5.6万个,总代码行数打1214万行之多。因此,不同的开发者在开发过程中并不需要掌握整个平台的每个层次的开发,只需要进行某个部分的开发。从功能上来区分,Android平台的开发由下至上,可以分成3种类型:
Android平台系统移植;
Android系统框架开发;
Android应用程序开发。
Android平台系统的移植主要涉及Linux中的相关设备驱动程序的开发和Android本地框架中的硬件抽象层。
Android平台自身也需要完善和增加新的功能,这种开发涉及Android平台系统的各个层次,主要涉及本地库和应用框架层。比如:当系统需要某些功能时,为了给Java层的应用程序提供调用的接口,需要从底层的C/C++本地库开发、JNI的封装到上层Java类的封装等的整体开发。
Android的应用程序开发是指基于Android平台提供的系统接口(API),开发应用程序。此类开发一般可以基于Android SDK进行。
6
Android平台分析综述
图 3 Android代码行统计图
4.3 Android平台分析方法
Android系统代码多,而且复杂,即便是研究系统中的某个模块,也往往涉及多个层次的内容。如果在研究某个模块是,一开始就从源码分析入手,一味的随代码的控制流前行,则很容易陷入代码的谜团,当走到半途中的时候,往往不知道下一步是如何走下去的。而如果能站在设计者的角度,思考一下设计者的意图,则可能会有更大的收获。正如苏轼的诗中所描述的“横看成岭侧成峰,远近高低各不同。不识庐山真面目,只缘身在此山中”。
因此,在进行研究分析时,从设计者的意图出发,从抽象的甚至是哲学的高度考虑,从最简单的系统原型开始,从设计猜想开始,而不是一开始就从代码分析展开。首先理解Android整体的运行框架、主干流程、系统原型,之后再用源代码分析充实之。当然此处的设计者意图并不是真正的Android设计者意图,而是要尽量以Android设计者意图去思考。
要理解设计者意图,就需要抽象。我们需要在哲学意义空间中去考虑系统的描述,即系统在本质上要表达什么。在逻辑空间上去考虑系统基本构成和动态结构。从现实到虚拟对象的映射去理解系统对象的组成,在从数据流的角度分析数据的产生者和消费者之间作用关系,从控制流的角度去分析对象之间的交互关系,从函数调用去分析具体的层次关系。
在系统设计上,原型是最能表达哲学空间和逻辑空间中系统本质的东西,原型是事物本质的第一层体现。任何复杂的系统都一个简洁的系统原型,都有它简洁的意义。系统原型是设计者意图的第一 7
Android平台分析综述
体现,所以需要从几个方向上去提炼系统原型:
(1)从系统本质和基本原理出发
(2)从分析系统数据流和控制流分析出发。
从设计者意图出发,得出系统原型,提取到大的逻辑结构和系统构成是第一步。之后可以从设计者的角度考虑系统猜想系统设计,为什么要这样设计,为什么要有这些构成。这样的基本原型是什么?系统的限制是什么,应用场景有哪些,有些设计的引进还是系统收敛性而为之呢。我们还可以从代码痕迹上去分析,这些概念是如何的得来的?从一定的抽象和高度去理解这些问题,遵循系统原型出发之原则,在深入分析代码的时候,就不容易陷入细节中。我们就可以随时跳出来想,这些代码在整体上载表达一个什么概念,在描绘一个什么逻辑,他要构成一个虚拟层吗?他是在管理这个硬件吗?他在 虚拟这个对象吗?他在构建管理机构?还是在构建一个对象管理?空间管理,为了快速引入了什么样的复杂算法,实际上的原型算法应该是什么样的?
只有深入到这个抽象层次,才能很好的把握住系统的每一条线,每一个对象的意义。只用从原型出发,才能把握住这个系统的本质所在,在干什么?他要表达什么?设计者为什么要这样想?最终极的想法是什么?这样,代码分析就变得简单明了,读代码就变成了是在印证猜想,修正方向。
5 Marvell平台简介及其开发流程
在项目中,采用的是Marvell公司的首款TD-SCDMA单芯片解决方案, 图 4给出了该方案的框图。其CPU型号是PXA920,它是基于Marvell原有的经过广泛应用验证的PXA9系列三核架构(代号为Tavor)演变而来的。该处理器目前已经支持中国移动OMS系统(即OPhone平台),以及业界目前所有主流的开放式操作系统。Marvell PXA920采用了一款高性能的兼容ARM指令集的SheevaTM专用处理器,并且内部集成了基于Release7版本(TD-SCDMA,TD-HSDPA,TD-HSUPA)的TD-SCDMA基带处理器以及经过中国移动商业验证的EDGE调制解调器。
图 4 Marvell Pantheon 910和920通信平台
从软件的角度,在该Marvell平台上开发Android平台手机,需要涉及如下方面的工作:
8
Android平台分析综述
软件源码版本的准备工作:Marvell会不定期的将包含启动代码、Linux内核、及针对Marvell平台特有的本地库、应用程序等,作为一个大的软件包,发布到其网站上,同时,该软件包中还包含了要从Android源码网站上下载代码的xml描述文件,和相应的补丁文件。因此,我们除了从Marvell网站上下载软件包外,另外一个准备工作就是要依据包中的xml文件,从Android源码网站下载所需要的源码包。然后,依据一定的步骤,将这两个包合并成为我们所需要的软件源码;
BSP及Linux Kernel的移植:Marvell提供的软件包是针对其自己的DKB开发板能正常运行,由于我们自己设计的硬件与其DKB板存在一些差异性,如:LCD、某些GPIO的使用等。因此,必须移植相关的BSP和Linux kernel 才能够在我们的硬件上正常工作;
新增设备的驱动开发及其相应的框架代码的开发;
应用程序的开发;
解决Marvell版本中所存在的bug及优化整个系统;
平台工具的使用及相关工具的二次开发。
6 总结
Android系统已经成了一个新的潮流,一个开发标准。这个系统庞大而复杂,同时也带来了大量的新名词,如:Activity、Manifest、Intent、Service、Binder、Dalvik虚拟机等。本文从宏观的角度对Android系统做了简要的介绍,以期把握住Android的朝移动互联和多媒体应用的发展趋势。
通过对Android平台架构的简要介绍,详细论述了Android的开发模式,从而区分出Android平台上的开发类型,为Android平台开发的团队建设和分工提供了参考依据,同时提出了Android平台的分析方法。在本文的最后,简要介绍了Marvell平台及其开发流程。
由于自身的知识所限,以及对Android平台的相关资料的掌握有限,文中存在的缺陷也在所难免。希望各位同仁能够提出宝贵的意见和建议。
参考文献
[1] 韩 超,梁 泉. Android系统原理及开发要点详解. 北京:电子工业出版社,2010.1
[2] 程本中. Android:Dalvik VM Internals.
[3] 孟岩. Android组件模型评析. 程序员,2008.01
[4] 高煥堂. 應用框架原理于程式設計36技. MISOO团队,2008.4
[5] J.F. DiMarzio. Android: A Programmer’s Guide. McGraw-Hill. 2008.9
[6] Chris Haseman. Android Essentials. Apress. 2008.7
[7] (23 May 2010). "How many lines of code does it take to create the Android OS?" .
Retrieved 2010-06-03
9
2024年2月23日发(作者:夔笑笑)
Android平台分析综述
Android平台分析综述
摘要:本文通过分析Android平台框架,详细论述了Android平台三种开发模式,给出了针对Android平台框架及其相关模块的分析方法,并以项目为例,讨论了我们在Android平台上的开发流程了及其改进方案。
关键字:Android, 框架分析 开发模式 Marvell平台
1 引言
对于移动终端设备开发商而言,Android平台的出现既是机遇也是挑战。如何在最短的时间内搭建和部署Android平台、如何开发高效的应用程序、如何高效的进行项目管理等问题均显得尤为突出。
为了能够更好地解决上述问题,本文首先对Android平台的由来和功能做了简要的介绍,通过对Android平台框架的介绍,以期能够对Android有一个全面的认识。在此基础之上,本文从软件的角度提出了Android平台分析方法及其开发模式。最后,本文结合项目,简要介绍了Marvell平台的开发流程。
2 Android平台简介
2.1 Android的由来
2005年7月,Google并购了成立仅22个月的高科技企业Android公司,展开了短信、手机检索、定位等业务,同时基于Linux的Android平台也进入了开发阶段。
2007年11月05日,以Google为主导,由几十个手机相关企业建立了开放手机联盟(OHA,Open
Handset Alliance)宣布成立,并宣布开发基于Linux2.6内核的开源手机系统平台——Android。该平台由操作系统、中间件、用户界面和应用软件组成。它采用软件堆层(Software Stack,又名软件叠层)的架构,主要分为三部分。底层以Linux内核工作为基础,由C语言开发,只提供基本功能;中间层包括函数库Library和虚拟机Virtual Machine,由C++开发。最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自行开发,以Java作为编写程序的一部分。不存在任何以往阻碍移动产业创新的专有权障碍,号称是首个为移动终端打造的真正开放和完整的移动软件。
目前,OHA的成员主要包括电信运营商(包括中国移动、中国电信、中国联通在内的13家)、手机厂商(包括华为、中兴在内的20家)、芯片公司(包括Marvell、高通在内的20家)、软件公司(如Google等16家)和商业化公司(如播思等10家)等五大类,共79个成员。Google通过与联盟成员结成深层次的合作伙伴关系,并希望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。
2.2 Android的特性及其优势
Android主要有如下特性:
应用程序框架 支持组件的重用与替换;
Dalvik虚拟机 专门为移动设备做了优化;
内部集成浏览器 该浏览器基于开源的WebKit引擎;
优化的图形库,包括:2D和3D图形库,3D图形库基于OpenGL ES 1.0 (硬件加速可选);
SQLite 用作结构化的数据存储;
多媒体支持:包括常见的音频、视频和静态印象文件格式(如 MPEG4, H.264, MP3, AAC,
1
Android平台分析综述
AMR, JPG, PNG, GIF);
GSM、CDMA电话(依赖于硬件);
蓝牙Bluetooth, EDGE, 3G, and WiFi(依赖于硬件);
照相机,GPS,指南针,和加速度计(依赖于硬件);
丰富的开发环境:包括设备模拟器,调试工具,内存及性能分析图表,和Eclipse集成开发环境插件
Android作为一个智能手机的平台,其技术上的优势主要包含以下一些方面[1]:
全开放智能移动电话平台;
多硬件平台的支持;
核心技术完整、统一;
完善的SDK和文档;
完善的辅助开发工具。
2.3 Android的版本
自2009年2月9日,发布Android1.1版本以来,Android已经发布了多个版本更新,这些更新主要是修复了前一版本的bug,并增加了一些新的特性。通常,每一次版本发布,除了给每一代Android操作系统命名一个数字编号外,还有一个以甜食命名的代号,并有着A、B、C、D、E„„这样的首字母排序。目前已知的包括1.5版 Cupcake(纸杯蛋糕),1.6版Donut(甜甜圈)、2.0/2.1版Eclair(法式奶油夹心甜点)、2.2版Froyo(冻酸奶)以及下一代2.3版Gingerbread(姜饼)。表 1给出了Android各个版本的主要特性。
表 1 Android各版本的主要特性
版本号、发布日期及Linux版本
版本号:1.1
发布日期:2009.2.9
特性 代表机型
闹钟、API 示例、浏览器、计算器、摄像头、联系人、开发工具包、拨号应用、电子邮件、地图 (包含街景)、
信息服务、音乐、图片、设置
2008年9月23日在美国,谷歌联合HTC和T-Mobile联合发布了史上第一台Android手机,即: T-Mobile G1,其采用的是Android1.0版本
HTC在MWC2009大会上发布了HTC Magic,民间俗称G2;
2009年5月,HTC发布HTC
Hero,采用了HTC Sense 的UI
HTC Tattoo(G4);
联想乐Phone
版本号:1.5 用户界面得到了极大的改良,并且增添了以下功能:
代号:Cupcake 支持拍摄和回放视频并支持上传视频到
发布日期:YouTube 以及 Picasa;
2009.4.30
支持蓝牙A2DP和AVRCP,并支持自动蓝牙连接
Linux版本:支持拷贝/粘帖,增加新的软(虚拟)键盘;
2.6.27
增加新的主屏widgets,支持动态界面切换;
版本号:1.6
代号:Donut
发布日期:2009.9.15
Linux版本:2.6.29
主要的更新如下:
Android 应用市场集成;
照相、摄像以及浏览, 多选/删除功能;
手势搜索;
语音搜索应用集成,极大提升了语音阅读功能,支持文字转语音系统(TXT-2-speech);
对非标准分辨率有了更好的支持;
支持CDMA网络;
版本号:2.0/2.1 其主要更新如下:
代号:Eclair 优化硬件速度;
2
索尼爱立信X10;
摩托罗拉Milestone(XT702,
Android平台分析综述
发布日期:分别于2009.12.3和2010.1.12
Linux版本:2.6.29
支持更多的屏幕分辨率;
增加新的浏览器UI并支持HTML5;
新的联系人列表;
优化Google Maps 3.1.2
支持Microsoft Exchange;
支持多点触摸;
优化了虚拟键盘;
支持蓝牙2.1;
支持活动墙纸
Droid);
Google自有品牌的Nexus
One(G5)
版本号:2.2
代号:Froyo
(Frozen
Yogurt)
发布日期:2010.5.20
Linux版本:2.6.32
主要的更新: Google Nexus One(G5);
HTC Desire
综合Android OS速度、内存及其性能优化;
JIT的实现,大幅度提升了应用程序的速度;
大量 Exchange 支持改进,支持 Exchange
2010,包括远程数据抹除,自动发现服务,完整的日程表支持,全局联系人列表查找。
蓝牙语音拨号和共享联系人;
增加数据连接使能选项;
支持多键盘语言;
支持浏览器的文件上传功能,支持GIF;
支持将应用程序安装在可扩展的存储器上(如SD卡);
支持Adobe Flash 10.1 ;
最多支持 8 个设备连接的移动热点功能
已经确认的新特性:
支持WebM视频回放;
提高复制、粘贴功能;
提高社群网络特征;
未经确认的新特性:
支持Android Market音乐存储;
重新设计的UI;
支持WXGA(1366 x 768);
支持视频电话
支持WebP图像文件;
支持Google TV
版本号:2.3
代号:Gingerbread
发布日期:近期发布
Linux版本:2.6.33或.34
版本号:3.0 此前曾传言Android 3.0新系统对硬件有了要求,
代号:最低配置1GHz处理器、512MB RAM、3.5英寸屏Honeycomb
幕。现已被证实,该传闻有误。
发布日期:2011年上半年
版本号:?4.0
代号:?Ice
Cream
发布时间:?2011年年中
3 Android平台架构
Android平台体系结构由5个部分组成,由下至上分别为:Linux内核层;C/C++函数库;Android 3
Android平台分析综述
运行时库;应用层框架;Android应用程序,如图 1所示。
图 1 Android体系结构
(1)Linux内核层
Android基于Linux2.6内核,提供核心系统服务,这些服务包括安全机制、内存管理、进程管理、网络堆栈以及一系列硬件驱动。Linux内核扮演的是硬件层和系统其他层次之间的一个抽象层的概念。需要注意的是,这个内核操作系统并非类GNU/Linux的,所以其系统库、系统初始化和编程接口都和标准的Linux系统有所不同的。它没有采用虚拟内存文件系统,而是采用YAFFS2文件系统。
(2)Android运行时库
Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。
每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中 的 "dx" 工具转化成.dex格式由虚拟机执行。一般编译完成后的应用程序名为.apk文件,它是压缩的.dex文件。Dalvik虚拟机依赖于Linux内核的一些功能,比如线程机制和底层内存管理机制。更多的细节请参考文献[2]。
(3)C/C++函数库
Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。以下是一些核心库:
系统 C 库:一个从 BSD 继承来的标准 C 系统函数库( libc ),它是专门为基于 embedded
linux 的设备定制的。
媒体库:基于 PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。
Surface Manager:对显示子系统的管理,并且为多个应用程序提供了2D和3D图层的无缝融合。
LibWebCore:一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视 4
Android平台分析综述
图。
SGL:底层的2D图形引擎
3D libraries:基于OpenGL ES 1.0 APIs实现;该库可以使用硬件 3D加速(如果可用)或者使用高度优化的3D软加速。
FreeType:位图(bitmap)和矢量(vector)字体显示。
SQLite:一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。
(4)应用框架层
在应用框架层,Android开发人员可以跟那些核心应用一样,拥有访问框架的所有APIs。该应用框架的设计简化了组件的重用;任何一个应用程序都可以发布它的功能模块,并且任何其它的应用程序都可以使用其所发布的功能块(必须遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。更多的信息可以参考文献[3]。
隐藏在每个应用后面的是一系列的服务和系统, 其中包括;
丰富而又可扩展的视图(Views):可以用来构建应用程序,它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons),甚至可嵌入的web浏览器。
内容提供器(Content Providers):使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据。
资源管理器(Resource Manager):提供非代码资源的访问,如本地字符串、图形、和布局文件(layout files)。
通知管理器(Notification Manager):使得应用程序可以在状态栏中显示自定义的提示信息。
活动管理器(Activity Manager):用来管理应用程序生命周期并提供常用的导航回退功能。
Adroid的应用框架是一个值得深入研究的课题,要想了解更多的知识可以参考文献[4]。
(5)应用程序
Android自身包含了一系列核心应用程序,包括email客户端、短消息程序、日历、地图、浏览器、,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。
要开发自己的Android应用程序,除了参考Android官方的SDK文档之外,还可以参考文献[5]和文献[6]。
4 Android平台开发与分析
4.1 开发模式
移动电话(手机)作为一种消费类电子产品,走进普通民众的生活已经有20年左右的历史了。移动电话的开发经历了以下几个模式[1]:
传统移动电话的开发;
半开放式移动电话的开发;
全开发式移动电话的开发;
从移动电话开发的历史来看,传统的开发模式一直是一种主要的形式,其开发模式及商业模式一般只有一种,即:厂商制作移动电话出售。其特点是:开发出来的移动电话是一个封闭的系统,它与其他类型的产品没有太大的差别。用户只能使用移动电话厂商提供的固定功能,而不能根据需求开发和使用个性化的功能。
随着用户对移动电话系统的自定义需求的增加,移动电话系统的开发走向了开放模式,其事实上是一种半开放式的移动电话开发,它把移动电话的开发过程分成了两个阶段:
厂商制作移动电话出售;
第三方开发移动电话应用。
在这种半开放式的移动电话开发中,厂商依然依靠制造移动电话出售作为主要的盈利模式,但是增加了第三方开发移动电话程序的机会。如:iPhone可以开发第三方应用程序,并可以在AppStore 5
Android平台分析综述
进行交易,支持让用户自己下载和安装程序。
在上述开放模式中,第三方应用的接口是开放的,但是移动电话系统本身的开发并不是开放的,其实质是一种半开放的开发模式。Android的出现,构建了一种新型的开发模式,即:全开放的移动电话开发模式。它不但可以使用第三方应用,而且其系统平台自身也是完全开放的。
Google的Android平台系统,同时也是一个完整的生态系统,它包含了三个有机的成分:
Android源码工程(Android Open Source Project,/ );
Android开发者(Android Developer,/ );
Android市场(Android Market,/market )
其三者的关系如图 1所示。
图 2 Android源码、开发者和市场三者的关系
Android源码工程包含了Android系统的全部源代码,用于开发移动电话系统;Android开发者包含了Android应用层的接口和开发文档,提供给Android应用程序的开发者;Android市场是Google为Android的程序交易提供的场所。三者相互依存,无论是系统软件的开发、还是应用程序的开发以及应用程序的交易,都是完全开放的。
4.2 开发工作的类型
Android平台系统的体积非常的庞大。仅从代码量来说,由图 3可以看出,Android平台系统包[7]含300万行XML、280万行C代码,210万行Java代码及175万行C++代码。其总文件数达5.6万个,总代码行数打1214万行之多。因此,不同的开发者在开发过程中并不需要掌握整个平台的每个层次的开发,只需要进行某个部分的开发。从功能上来区分,Android平台的开发由下至上,可以分成3种类型:
Android平台系统移植;
Android系统框架开发;
Android应用程序开发。
Android平台系统的移植主要涉及Linux中的相关设备驱动程序的开发和Android本地框架中的硬件抽象层。
Android平台自身也需要完善和增加新的功能,这种开发涉及Android平台系统的各个层次,主要涉及本地库和应用框架层。比如:当系统需要某些功能时,为了给Java层的应用程序提供调用的接口,需要从底层的C/C++本地库开发、JNI的封装到上层Java类的封装等的整体开发。
Android的应用程序开发是指基于Android平台提供的系统接口(API),开发应用程序。此类开发一般可以基于Android SDK进行。
6
Android平台分析综述
图 3 Android代码行统计图
4.3 Android平台分析方法
Android系统代码多,而且复杂,即便是研究系统中的某个模块,也往往涉及多个层次的内容。如果在研究某个模块是,一开始就从源码分析入手,一味的随代码的控制流前行,则很容易陷入代码的谜团,当走到半途中的时候,往往不知道下一步是如何走下去的。而如果能站在设计者的角度,思考一下设计者的意图,则可能会有更大的收获。正如苏轼的诗中所描述的“横看成岭侧成峰,远近高低各不同。不识庐山真面目,只缘身在此山中”。
因此,在进行研究分析时,从设计者的意图出发,从抽象的甚至是哲学的高度考虑,从最简单的系统原型开始,从设计猜想开始,而不是一开始就从代码分析展开。首先理解Android整体的运行框架、主干流程、系统原型,之后再用源代码分析充实之。当然此处的设计者意图并不是真正的Android设计者意图,而是要尽量以Android设计者意图去思考。
要理解设计者意图,就需要抽象。我们需要在哲学意义空间中去考虑系统的描述,即系统在本质上要表达什么。在逻辑空间上去考虑系统基本构成和动态结构。从现实到虚拟对象的映射去理解系统对象的组成,在从数据流的角度分析数据的产生者和消费者之间作用关系,从控制流的角度去分析对象之间的交互关系,从函数调用去分析具体的层次关系。
在系统设计上,原型是最能表达哲学空间和逻辑空间中系统本质的东西,原型是事物本质的第一层体现。任何复杂的系统都一个简洁的系统原型,都有它简洁的意义。系统原型是设计者意图的第一 7
Android平台分析综述
体现,所以需要从几个方向上去提炼系统原型:
(1)从系统本质和基本原理出发
(2)从分析系统数据流和控制流分析出发。
从设计者意图出发,得出系统原型,提取到大的逻辑结构和系统构成是第一步。之后可以从设计者的角度考虑系统猜想系统设计,为什么要这样设计,为什么要有这些构成。这样的基本原型是什么?系统的限制是什么,应用场景有哪些,有些设计的引进还是系统收敛性而为之呢。我们还可以从代码痕迹上去分析,这些概念是如何的得来的?从一定的抽象和高度去理解这些问题,遵循系统原型出发之原则,在深入分析代码的时候,就不容易陷入细节中。我们就可以随时跳出来想,这些代码在整体上载表达一个什么概念,在描绘一个什么逻辑,他要构成一个虚拟层吗?他是在管理这个硬件吗?他在 虚拟这个对象吗?他在构建管理机构?还是在构建一个对象管理?空间管理,为了快速引入了什么样的复杂算法,实际上的原型算法应该是什么样的?
只有深入到这个抽象层次,才能很好的把握住系统的每一条线,每一个对象的意义。只用从原型出发,才能把握住这个系统的本质所在,在干什么?他要表达什么?设计者为什么要这样想?最终极的想法是什么?这样,代码分析就变得简单明了,读代码就变成了是在印证猜想,修正方向。
5 Marvell平台简介及其开发流程
在项目中,采用的是Marvell公司的首款TD-SCDMA单芯片解决方案, 图 4给出了该方案的框图。其CPU型号是PXA920,它是基于Marvell原有的经过广泛应用验证的PXA9系列三核架构(代号为Tavor)演变而来的。该处理器目前已经支持中国移动OMS系统(即OPhone平台),以及业界目前所有主流的开放式操作系统。Marvell PXA920采用了一款高性能的兼容ARM指令集的SheevaTM专用处理器,并且内部集成了基于Release7版本(TD-SCDMA,TD-HSDPA,TD-HSUPA)的TD-SCDMA基带处理器以及经过中国移动商业验证的EDGE调制解调器。
图 4 Marvell Pantheon 910和920通信平台
从软件的角度,在该Marvell平台上开发Android平台手机,需要涉及如下方面的工作:
8
Android平台分析综述
软件源码版本的准备工作:Marvell会不定期的将包含启动代码、Linux内核、及针对Marvell平台特有的本地库、应用程序等,作为一个大的软件包,发布到其网站上,同时,该软件包中还包含了要从Android源码网站上下载代码的xml描述文件,和相应的补丁文件。因此,我们除了从Marvell网站上下载软件包外,另外一个准备工作就是要依据包中的xml文件,从Android源码网站下载所需要的源码包。然后,依据一定的步骤,将这两个包合并成为我们所需要的软件源码;
BSP及Linux Kernel的移植:Marvell提供的软件包是针对其自己的DKB开发板能正常运行,由于我们自己设计的硬件与其DKB板存在一些差异性,如:LCD、某些GPIO的使用等。因此,必须移植相关的BSP和Linux kernel 才能够在我们的硬件上正常工作;
新增设备的驱动开发及其相应的框架代码的开发;
应用程序的开发;
解决Marvell版本中所存在的bug及优化整个系统;
平台工具的使用及相关工具的二次开发。
6 总结
Android系统已经成了一个新的潮流,一个开发标准。这个系统庞大而复杂,同时也带来了大量的新名词,如:Activity、Manifest、Intent、Service、Binder、Dalvik虚拟机等。本文从宏观的角度对Android系统做了简要的介绍,以期把握住Android的朝移动互联和多媒体应用的发展趋势。
通过对Android平台架构的简要介绍,详细论述了Android的开发模式,从而区分出Android平台上的开发类型,为Android平台开发的团队建设和分工提供了参考依据,同时提出了Android平台的分析方法。在本文的最后,简要介绍了Marvell平台及其开发流程。
由于自身的知识所限,以及对Android平台的相关资料的掌握有限,文中存在的缺陷也在所难免。希望各位同仁能够提出宝贵的意见和建议。
参考文献
[1] 韩 超,梁 泉. Android系统原理及开发要点详解. 北京:电子工业出版社,2010.1
[2] 程本中. Android:Dalvik VM Internals.
[3] 孟岩. Android组件模型评析. 程序员,2008.01
[4] 高煥堂. 應用框架原理于程式設計36技. MISOO团队,2008.4
[5] J.F. DiMarzio. Android: A Programmer’s Guide. McGraw-Hill. 2008.9
[6] Chris Haseman. Android Essentials. Apress. 2008.7
[7] (23 May 2010). "How many lines of code does it take to create the Android OS?" .
Retrieved 2010-06-03
9