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