
1.2 Android的体系结构
Android作为一个移动设备的开发平台,其软件层次结构分为操作系统(OS)、中间件(Middle-Ware)和应用程序(Application),如图1-1所示。中间件包括应用程序框架(Application Framework)、各种库(Libraries)和Android运行环境(Run-time),简单说明如下。

图 1-1
1.2.1 应用程序(Application)
Android的应用程序通常涉及用户界面和用户的交互,是用户能够直接接触的部分。Android通常将一系列核心应用程序包一起发布,包括email客户端、SMS程序、日历、地图、浏览器、联系人管理程序等。Android平台下的所用应用程序都使用Java语言编写,开发人员也可以使用应用程序框架的API开发自己的程序,显示出Android巨大的应用潜力。
1.2.2 应用程序框架
应用程序框架(Application Framework)设计简化了组件的重用:任何一个应用程序都可以发布它的功能,并且任何其他的应用程序都可以使用这些功能模块(应遵循框架的安全性限制)。同样地,应用程序重用机制使用户可以方便地替换程序组件。
每个应用程序可能用到的应用框架列举如下。
(1)丰富而又可扩展的视图(View):用于构建应用程序,包括列表(list)、网格(grid)、文本框(text boxe)、按钮(button)等,以及可嵌入的Web浏览器。
(2)内容提供器(Context Provider):使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享自己的数据。
(3)资源管理器(Resource Manager):提供非代码资源的访问,如本地字符串、图形和布局文件(layout file)。
(4)通知管理器(Notification Manager):使得应用程序可以在状态栏中显示自定义的提示信息。
(5)活动管理器(Activity Manager):用来管理应用程序生命周期,并提供常用的导航返回功能。
在Android应用中,每个应用程序一般由多个页面组成,每个页面对应的xml文件对应一个Activity。因此可以说,Android的应用程序是由多个Activity的交互构成的。
1.2.3 库(Libraries)和Android运行环境(Run-time)
Android系统中包含一些C/C++库,能被不同的组件使用。它们通过Android应用程序框架为开发者提供服务。一些核心库简述如下。
(1)系统C库:一个BSD继承来的标准C系统函数库(libc),为基于embedded Linux的设备定制。
(2)媒体库:基于PacketVideo OpenCORE,支持多种常用的音频、视频格式回返和录 制,同时支持静态图像文件。编码格式包括MPEG4、H.264、MP3、AAC、AMR、JPG和PNG。
(3)Surface Manager:管理显示子系统,并且为多个应用程序提供2D和3D图层的无缝融合。
(4)LibWebCore:一个最新的Web浏览器引擎,支持Android浏览器和一个可嵌入的Web视图。
(5)SGL:底层的2D图形引擎。
(6)3D Libraries:基于OpenGL ES1.0API实现,可以使用硬件3D加速(如果可用),或者使用高度优化的3D软加速。
(7)FreeType:位图(bitmap)和矢量(vector)字体显示。
(8)SQLite:一个对于所有应用程序可用,且功能强劲的轻型关系数据库引擎。
Android还有一个核心库,提供Java编程语言核心库的大多数功能。
每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备,可以同时、高效地运行多个虚拟系统。Dalvik虚拟机执行 Dalvik可执行文件(.dex),该格式的文件针对小内存使用做了优化。同时,虚拟机基于寄存器,所有的类都经由Java编译器编译,然后通过SDK中的dx工具转换成.dex格式,由虚拟机执行。
1.2.4 操作系统(OS)
Dalvik虚拟机依赖于Linux内核的一些功能,比如线程机制和底层内存管理机制。Android的核心系统服务依赖于Linux 2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核同时作为硬件和软件栈之间的抽象层。