1.3 Android系统架构
图1.1是Android操作系统的架构,架构包括4层,由上到下依次是应用程序层、应用程序框架层、核心类库和Linux内核。其中,核心类库中包含系统库及Android运行环境。
图1.1 Android操作系统的架构
1.3.1 应用程序层
Android装配了一个核心应用程序集合,包括E-mail客户端、SMS短消息程序、日历、地图、浏览器、联系人管理程序和其他程序,所有应用程序都是用Java编程语言编写的。用户开发的Android应用程序和Android的核心应用程序是同一层次的,它们都是基于Android的系统API构建的。
1.3.2 应用程序框架层
应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布它的功能且任何其他应用程序都可以使用这些功能(需要服从框架执行的安全限制),这一机制允许用户替换组件。开发者完全可以访问核心应用程序所使用的API框架。通过提供开放的开发平台,Android使开发者能够编制极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等。
所有的应用程序都是由一系列的服务和系统组成的,主要包括以下几种:
• 视图(Views)。这里的视图指的是丰富的、可扩展的视图集合,可用于构建一个应用程序,包括列表(Lists)、网格(Grids)、文本框(TextBoxes)、按钮(Buttons),甚至是内嵌的Web浏览器。
• 内容管理器(Content Providers)。内容管理器使得应用程序可以访问另一个应用程序的数据(如联系人数据库)或者共享自己的数据。
• 资源管理器(Resource Manager)。资源管理器提供访问非代码资源,如本地字符串、图形和分层文件(layout files)。
• 通知管理器(Notification Manager)。通知管理器使得所有的应用程序都能够在状态栏显示通知信息。
• 活动管理器(Activity Manager)。在大多数情况下,每个Android应用程序都运行在自己的Linux进程中。当应用程序的某些代码需要运行时,这个进程就被创建并一直运行下去,直到系统认为该进程不再有用为止,然后系统将回收该进程占用的内存以便分配给其他的应用程序。活动管理器管理应用程序生命周期,并且提供通用的导航回退功能。
1.3.3 系统库
Android本地框架是由C/C++实现的,包含C/C++库,以供Android系统的各个组件使用。这些功能通过Android的应用程序框架为开发者提供服务。
这里只介绍C/C++库中的一些核心库:
• 系统C库。标准C系统库(libc)的BSD衍生,调整为基于嵌入式Linux设备。
• 媒体库。基于PacketVideo的OpenCORE,这些库支持播放和录制许多流行的音频和视频格式,以及静态图像文件,包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG。
• 界面管理。管理访问显示子系统,并且为多个应用程序提供2D和3D图层的无缝融合。
• LibWebCore。新式的Web浏览器引擎,支持Android浏览器和内嵌的Web视图。
• SGL。一个内置的2D图形引擎。
• 3D库。基于OpenGL ES 1.0 APIs实现,该库可以使用硬件3D加速或包含高度优化的3D软件光栅。
• FreeType。位图和矢量字体显示渲染。
• SQLite。SQLite是一个所有应用程序都可以使用的强大且轻量级的关系数据库引擎。
1.3.4 Android运行环境
Android包含一个核心库的集合,该核心库提供了Java编程语言核心库的大多数功能。几乎每一个Android应用程序都在自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。
Dalvik是Google公司自己设计的用于Android平台的Java虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为.dex(Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux进程执行。Dalvik虚拟机依赖Linux内核提供基本功能,如线程和底层内存管理。
1.3.5 Linux内核
Android基于Linux提供核心系统服务,例如安全、内存管理、进程管理、网络堆栈、驱动模型。除了标准的Linux内核外,Android还增加了内核的驱动程序,如Binder(IPC)驱动、显示驱动、输入设备驱动、音频系统驱动、摄像头驱动、WiFi驱动、蓝牙驱动、电源管理。
Linux内核也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。分层的好处就是使用下层提供的服务为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化时,不会影响到上层,可以说是高内聚、低耦合。