Android 架构基本知识
1.2 Android 的系统架构
系统构架图中可以看到从上到依次是应用层(Applications)、应用框架层(Application
Framework)、 系统运行库层(Lib 和 Runtime)、 Linux 内核层(linux kernel)
1.2.1 Android 内核
Linux 内核版本 2.6
位于硬件和软件堆之间的抽象层
核心服务:安全机制、内存管理、进程管理、网络、硬件驱动。
Android 依赖 Linux 内核 2.6 来提供核心服务,比如进程管理、网络协议栈、硬件驱动。在这
里,Linux 内核作为硬件层和系统软件栈层之间的一个抽象层。这个操作系统并非类 GNU/Linux 的,
因为其系统库,系统初始化和编程接口都和标准的 Linux 系统是有所不同的。
从 Google 目前 release 的 Linux 系统来看,其没有虚拟内存文件系统,系统所用的是 yaffs2
文件系统,具体的映像也都位于 SDK 安装目录下。通过 emulator -console 命令,我们可以在 host
终端下得到一个简单的可以控制 Android 的 shell,这个系统包含了一个 Toolbox,提供一些基本
的命令工具,集中在/sbin,/system/sbin,/system/bin 中,但是很简陋,命令种类也很少。若有时
间和必要我会作个介绍。
既然采用的 linux 系统,就有必要介绍一下主要驱动(如图中所示):
显示驱动(Display Driver)
键盘驱动(KeyBoard Driver)
Flash 内存驱动(Flash Memory Driver)
照相机驱动(Camera Driver)
音频驱动(Audio Driver)
蓝牙驱动(Bluetooth Driver)
Wifi 驱动
Binder IPC 驱动
Power Management (电源管理)等等。
1.2.2 程序库和运行库(Lib 和 Runtime)
程序库(lib):
Android 包含一些 C/C++库、媒体库、数据库引擎库等等,,这些库能被 Android 系统中不同
的组件使用,通过 Android 应用程序框架为开发者提供服务,以下是包括的一些核心库:
· 系统 C 库 - C 语言标准库,系统最底层的库,C 库通过 Linux 系统来调用,一个从 BSD 继承来
的标准 C 系统函数库( libc ), 它是专门为基于 embedded linux 的设备定制的。
· 媒体库 - 基于 PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时
支持静态图像文件。编码格式包括 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。
· Surface Manager - 对显示子系统的管理,并且为多个应用程序提 供了 2D 和 3D 图层的无缝
融合。
· LibWebCore - 一个最新的 web 浏览器引擎用,支持 Android 浏览器和一个可嵌入的 web 视图。
· SGL - 底层的 2D 图形引擎
· 3D libraries - 基于 OpenGL ES 1.0 APIs 实现;该库可以使用硬件 3D 加速(如果可用)或
者使用高度优化的 3D 软加速。
· FreeType -位图(bitmap)和矢量(vector)字体显示。
·WebKit/LibWebCore -一个最新的 web 浏览器引擎,支持 Android 浏览器和一个可嵌入的 web 视
图。
· SQLite - 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。
Google 使用 Apache 的 Harmony 类库,Harmony 某些方面速度快于 Sun 的 VM。Runtime 在 Dalvik
Java VM 上,Dalvik 采用简练、高效的 byte code 格式运行,它能够在低资耗和没有应用相互干扰
的情况下并行执行多个应用。
Android 运行库(Runtime):
Android 包括了一个核心库(Core Libraries),该核心库提供了 JAVA 编程语言核心库的大多
数功能。
Dalvik 虚拟机(DVM,Dalvik Virtual Machine)是一种寄存器形态的虚拟机。Google 在
开发时就已经设想用最少的内存来执行,以及同时可执行多个 VM 为前提 。