您的位置:首页 > 运维架构 > 网站架构

Android架构及相关分析

2009-09-15 16:22 197 查看
Google提出Android手机软件平台后,使手机软件的标准化、低价化等议题受到比过往更高的关注,到底Android是否有能力打破多年以来的手机软件门户之见?此不仅要审视其策略,其软件平台技术表现更不能忽视……

Google发表名为Android的软件平台,破除发表前的臆测,认为Google会以gPhone之名发表自有手机,同时所有信息、网络产业者都高度关注,Android发表后将会对手机市场兴起新的波澜。

有关Android的用意及策略已有太多人观察与分析,Android期望手机软件架构能标准化、低价化,如此有助于推行Google的软件及网络服务。所以,本文就不再对策略及影响等做讨论,完全就技术本质的角度来了解Android。

严格来说,Android属于信息技术(Information Technology;IT)领域,而且是IT领域中的软件技术、软件工程,与电子工程(EE)有段距离,不过手机在硬件设计之外也无法回避软件方面的设计,因此仍有必要对其进行研究、探析。

架构



Android本身是一套软件堆叠(Software Stack),或称为「软件叠层架构」,叠层主要分成三层:操作系统、中介软件(Middleware,中国内地方面称为:中间件)、应用程序。

若更进一步了解,操作系统用的是嵌入式Linux,应用程序方面则只提供主要常用的几种应用程序,不可能各形各色的应用程序都以Android之名进行开发,否则就失去「以开放性的软件平台吸引广大软件业者、程序设计师开发出支持Android平台的应用程序」的用意。而想开发可在Android平台执行的应用程序,也必须用Java程序语言撰写才行。

接着是中介软件,凡是介于操作系统与应用程序间的,多概称为中介软件,Android的中介软件可再细分出两层,底层为函式库(Library)及虚拟机器(Virtual Machine;VM),上层为应用程序框架(Application Framework)。

特点

架构是骨,而展现出来的功效特点则为血肉,Android虽然才刚起步,但已经具有如下的功效特点,未来随着发展则会增入更多的特点:

◆应用程序框架-框架内已经具备多种基础软件组件,应用程序可直接呼用这些组件的功效服务,节省应用程序的开发心力及时间,同时程序的再用性、移植性也较高。

◆Dalvik虚拟机器-Android内不是使用标准的Java虚拟机器(Java Virtual Machine;JVM),而是使用独特的Dalvik虚拟机器,关于此以下将再进行深入的说明。

◆整合(网页)浏览器-网页浏览器就是所谓的「主要、常用的应用程序」,Android内建的浏览器是用WebKit的浏览引擎为基础所开发成的,WebKit是一个开放原码专案,许多浏览器也都是用WebKit引擎所开发成,如Apple的Safari、Nokia S60手机内的浏览器(Web Browser for S60)等。

◆最佳化的绘图能力-绘图分为2D与3D,2D方面Android是用一套特有的函式库,而3D则是使用OpenGL ES 1.0(OpenGL for Embedded Systems)规范的函式库。

◆SQLite资料库-SQLite是一套开放原码的关连式资料库,其特点在于轻量性(仅500KB左右的容量),适合手持式装置运用,此外桌上型运算的应用程序也有使用,如OpenOffice.org 2.0版之后就有内建SQLite。

◆媒体支持能力-Android支持多种音讯、静态视讯、动态视讯格式,如MPEG-4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等。

◆GSM通话能力-GSM手机的通话能力其实必须在硬件电路层次实现,软件层次无法实现,只是Android平台要求必须要有GSM通话能力,此项功效特点与其说是特点,不如说是订立出最低的硬件要求规范。

◆蓝牙(Bluetooth)、EDGE、3G、以及Wi-Fi-这些通讯能力一样属于硬件层次的功效要求。

◆摄影机(Camera)、GPS定位、罗盘、加速度传感器-这些同样属于硬件层次的功效,Android主要是在软件层面提供支持,如硬件抽象层、应用程序界面等。

◆丰富的开发环境-Android平台强调已备有完善的程序开发环境,其开发环境包括装置模拟器(Emulator)、除错工具、程序执行所耗用存储器、效能等评估功能,另还有一个可用于Eclipse IDE的外挂程序(Plug-in)。

应用程序、应用程序框架

如前所述,Android会内建一些常用的应用程序,且前面已提到一个:网页浏览器,但除了网页浏览器外还有:电子信件收发的用户端程序、简讯收发程序、日历/行事历、地图、联系簿/通讯录等。

不过,应用程序不是Android的重点,即便有应用程序也以基础性、示范性用意为多,另外操作系统也不是重点,重点集中在中介软件层方面,即是应用程序框架、函式库、应用程序执行环境等。

先说明应用程序框架,Android本身已在框架中提供许多软件组件,不过这并不表示所有的应用程序一定要呼用(Call,呼叫、呼用,中国内地方面称为:调用)Android所提供的组件,程序设计师在开发Android平台所用的应用程序时,也可以顺带开发新的软件组件,并将该软件组件放入Android的应用程序框架中。

如此,除了原撰写的应用程序可以呼用该软件组件(或称:应用程序界面,API)外,也可以让其它的应用程序来呼用该组件。另外,新增、新撰写的软件组件并不一定要是新的功效,也可以用来取代或暂代Android原有就具备的软件组件。

虽然新组件可以取代或暂代旧组件,但不是所有的组件都可以取代,例如安全(Security)方面的功能,就强迫只能用Android平台现有组件,不能被替换成软件公司、程序设计师自己开发的。此外,软件组件替换,不仅可由应用程序来决定,也允许使用者自行决定。

框架内的软件功效组件

若更进一步了解,Android在应用程序框架中的软件组件主要有10个,如Activity Manager(活动管理员)、Window Manager(视窗管理员)、Resource Manager(资源管理员)等,在此无法详述每个组件的功效,因此以下挑数个重点组件来说明。

举例来说,Content Providers(内容管理员)负责应用程序与应用程序间的资料存取传递,例如某一个应用程序可以去存取通讯录应用程序内的联系人资料。或者呼用Resource Manager可存取的非程序码资源,例如:当地性设定(该地货币、语言、时间格式)、图象...等。

再者,应用程序若呼用Notification Manager(通知管理员),则可以在状态列(Status Bar)的地方设计出应用程序自有的警示(Alert)讯息。至于Activity Manager则提供应用程序的生命周期管理。

函式库

应用程序框架是贴近于应用程序的软件组件服务,而更底层则是Android的函式库,以下列出并说明主要的核心函式库:

◆System C函式库(System C Library)-Android具有一套以BSD衍生方式所打造成的「标准C语言系统函式库,libc」,然后再针对嵌入式Linux装置的需求进行若干调校。

◆媒体函式库(Media Libraries)-Android的媒体函式库是以PacketVideo公司的OpenCORE为基础所发展成,该函式库可以播放、录制多种普遍常见的影音格式。

◆外观管理员(Surface Manager)-在同时执行多个应用程序时,外观管理员会负责管理「显示」与「存取操作」间的对应、互动,另外也负责将「2D绘图」与「3D绘图」进行显示上的合成、叠合动作。

◆LibWebCore-一套网页浏览器的软件引擎,即是前述WebKit的一部份,该引擎的功效不仅可供Android内建的网页浏览器所呼用,也可以提供具内嵌性网页呈现效果。

◆SGL-Android在2D绘图方面的绘图引擎。

◆3D函式库(3D libraries)-Android是依据OpenGL ES 1.0 API标准来实做其3D绘图函式库,该函式库可以用软件方式执行也可以用硬件加速方式执行,其中「3D软件光栅处理」方面已进行高度最佳化(中国内地方面称为:优化)。

◆FreeType-提供点阵字、矢量字的描绘显示。

◆SQLite-如前所述,SQLite是一套轻量性的资料库引擎,可供其它应用程序呼用。

Android的执行环境

老实说,Android虽然用Java程序语言来开发、撰写应用程序,但却不使用Java Runtime来执行Java程序,而是用Android自有的Android Runtime来执行。而Android Runtime内有两个重要组件,一是Core Libraries(核心函式库),另一则是Dalvik Virtual Machine(Dalvik虚拟机器)。

首先是核心函式库,核心函式库里头已经包含了绝大多数Java程序语言所需要呼用的功效函式,接着每一个Android应用程序都会以自属的行程(Process,中国内地方面称为:进程)来执行,而且Android不是用一个Dalvik虚拟机器来同时执行多个Android应用程序,而是每个Android应用程序都用一个自属的Dalvik虚拟机器来执行。

更简单说,专属于每一个Android应用程序的Dalvik虚拟机器等于是一个执行个体(Instance)。事实上Dalvik虚拟机器本身在开发时,就已经是以「能够同时执行多个虚拟机器」的设想来撰写。因此:即便同时开设与执行多组VM个体,在硬件资源的运用上与执行流畅性上也都能维持一定的水平表现。

进一步探析Dalvik虚拟机器

接下来我们要更仔细讨论Dalvik虚拟机器,甚至从最起头开始谈。

Dalvik虚拟机器是一种暂存器型态的虚拟机器,最初是由Dan Bornstein所发创,另外也有一些Google的工程师参与撰写。Dalvik在撰写开发时就已经设想用最少的存储器资源来执行,以及前述的「同时可执行多个VM个体」。

不过,上述的特性需要Linux操作系统的协助才能实现,例如行程间的隔离、执行绪(中国内地方面称为:线绪)的支持、低阶存储器(中国内地方面称为:内存)管理等。事实上不仅Dalvik虚拟机器如此,Java虚拟机器也一样有操作系统相依性,不同的操作系统需要不同的Java虚拟机器,各虚拟机器会针对其支持的操作系统再进行各项调整,以便能最佳化执行。

Dalvik虚拟机器有许多地方是参考Java虚拟机器设计,Dalvik虚拟机器所执行的中介码并非是Java虚拟机器所执行的Java Bytecode,同时也不直接执行Java的类别档(Java Class File),而是执行一种特有的档案格式,称为.dex,Java的类别档要先透过一套叫dx的编译工具(功效上等同于Java编译器)转换成.dex档后,才能让Dalvik虚拟机器执行。

值得一提的是:Dan Bornstein为何将这套虚拟机器软件取名为Dalvik?Dalvik其实是指冰岛北方Eyjafjörður峡湾中的一个钓鱼村落,Dan Bornstein的祖先曾在该村落生活过。

操作系统

Android平台的操作系统用的是Linux,其核心版本为2.6版,Android所用的Linux核心,其包含的功效包括:安全(Security)、存储器管理(Memory Management)、行程管理(Process Management)、网络堆叠(Network Stack,中国内地方面称为:网络堆栈)、驱动程序模型(Driver Model)等,另外也在前述的软件堆叠与硬件间建立起一个抽象层(Abstraction Layer)。

建构高度开放、高效能运行平台

最后,笔者整个检视了Android平台,此平台的设计很合乎Google过往以来的风格,Google讲究功效单纯但功效必须相当强悍,Google的查找引擎即是如此,查找页面永远就是一个文字输入栏,但查找结果相当精准、丰富。同样的,Android平台与今日一般智能型手机的软件平台相比,其功效丰富性并不如一般智能型手机,甚至只要32MB的存储器用量就能够执行。

很明显的,Google Android的重点在于最低硬件使用量、最开放标准的软件架构及平台、及让手机内各项基础软件的总花费成本能降至最低,所追求的是最小但也最一致的共通点。

一旦手机有了最小的一致共通点,Google的网络服务及软件就能大幅发挥,Google除了Internet服务外也力推各种轻量性软件,由于轻量特性,所以其软件可以快速移转到Android手机上执行,并与其Internet服务相呼应。

当然,Android不仅对Google有利,对应用程序开发商、手机消费者、手机服务营运商...等,也同样呈现利多,一旦Android成为极广泛通行的手机软件平台,应用程序业者就可以有新的软件销售舞台,且依据Apache v2授权方式,即便应用程序业者以Android平台为基础撰写程序,其程序的原始程序码也不用公开,保证其商业权益。

另Android更有助于降低手机软件成本,现有智能型手机内的各类软件都要收费,如操作系统、文件阅读器、媒体播放器...等,而Android也具备这些基本功能,重点是分毫不取,如此,将带给持续收取手机随附软件授权费的业者降价压力。

不过,即便降价也很难因应压力,软件业者相互间有门户之见,而Android的另一项特点是软件平台的标准化,虽然各软件业者多少也发展出自有的手机软件平台,但多半还是要付费,且标准号召性不如Android。

既然手机软件成本降低,消费者就可以买到更便宜的手机,而手机通讯服务的营运商(如:远传电信、中华电信等)自然也能提供更低廉的绑约方案,所以Android对手机基础软件业者的伤害最大,但却对绝大多数人有利。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cuijpus/archive/2008/06/19/2567250.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: