1.2 Android系统架构解析
本节将讨论Android的系统架构。Android系统架构和其他操作系统一样,采用了分层的架构。共分为4个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux核心层,Android的体系结构,如图1-6所示。
图1-6 Android体系结构
下面将对这4层进行详细的分析和介绍。
1.应用层
应用是用Java语言编写的运行在虚拟机上的程序,即图中最上层的蓝色部分,如图1-7所示。其实,Google最开始时就在Android系统中捆绑了一些核心应用,比如E-mail客户端、SMS短消息程序、日历、地图、浏览器、联系人管理程序等,如图1-7所示。
图1-7 应用层
2.应用框架层
这一层是编写Google发布的核心应用时所使用的API框架,开发人员同样可以使用这些框架来开发自己的应用,这样便简化了程序开发的架构设计,但是必须遵守其框架的开发原则,如图1-8所示。
图1-8 应用框架层
从图1-8可以看出,Android提供了如下一些组件。
(1)丰富而又可扩展的视图(Views):可以用来构建应用程序,它包括列表(lists)、网格(grids)、文本框(text boxes)、按钮(buttons),甚至可嵌入的Web浏览器。
(2)内容提供器(Content Providers):它可以让一个应用访问另一个应用的数据(如联系人数据库),或共享它们自己的数据。
(3)资源管理器(Resource Manager):提供非代码资源的访问,如本地字符串、图形、布局文件(layout files)。
(4)通知管理器(Notification Manager):应用可以在状态栏中显示自定义的提示信息。
(5)活动管理器(Activity Manager):用来管理应用程序生命周期并提供常用的导航退回功能。
(6)窗口管理器(Window Manager):管理所有的窗口程序。
(7)包管理器(Package Manager):Android系统内的程序管理。
3.系统运行库(C/C++库以及Android运行库)层
当我们使用Android应用框架时,Android系统会通过一些C/C++库来支持对我们使用的各个组件,使其能更好地为开发者服务。下面是一些核心的库及其功能,如图1-9所示。
图1-9 系统运行库层
从图中可以看出,系统运行库层可以分成两部分,分别是系统核心库和Android运行时,具体介绍如下。
系统核心库:系统核心库是应用程序框架的支撑,是连接应用程序框架层与Linux内核层的重要纽带。其主要分为如下几个。
● Surface Manager:执行多个应用程序时候,负责管理显示与存取操作间的互动,另外也负责2D绘图与3D绘图进行显示合成。
● Media Framework:多媒体库,基于PacketVideo OpenCore;支持多种常用的音频、视频格式录制和回放,编码格式包括MPEG4.MP3.H.264.AAC、ARM。
●SQLite:型的关系型数据库引擎。
●OpenGL|ES:根据OpenGL ES 1.0API标准实现的3D绘图函数库。
●FreeType:提供点阵字与向量字的描绘与显示。
●WebKit:一套网页浏览器的软件引擎。
●7SGL:底层的2D图形渲染引擎。
●SSL:在Andorid上通信过程中实现握手。
●Libc:从BSD继承来的标准C系统函数库,专门为基于embedded linux的设备定制。
Android运行时:Android应用程序时采用Java语言编写,程序在Android运行时中执行,其运行时分为核心库和Dalvik虚拟机两部分。
● 核心库:核心库提供了Java语言API中的大多数功能,同时也包含了Android的一些核心API,如android.os、android.net、android.media等。
● Dalvik虚拟机:Android程序不同于J2me程序,每个Android应用程序都有一个专有的进程,并且不是多个程序运行在一个虚拟机中,而是每个Android程序都有一个Dalivik虚拟机的实例,并在该实例中执行。Dalvik虚拟机是一种基于寄存器的Java虚拟机,而不是传统的基于栈的虚拟机,并进行了内存资源使用的优化以及支持多个虚拟机的特点。需要注意的是,不同于J2me,Android程序在虚拟机中执行的并非编译后的字节码,而是通过转换工具dx将Java字节码转成dex格式的中间码。
4.Linux内核(Linux Kernel)层
Android运行在Linux kernel 2.6之上,但是把Linux内受GNU协议约束的部分做了取代,这样在Android的程序可以用于商业目的。
Linux内核是硬件和软件层之间的抽象层,如图1-10所示。
图1-10 Linux内核层
Android的核心系统服务基于Linux 2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于该内核。Linux内核同时也作为硬件和软件栈之间的抽象层。Android更多的是需要一些与移动设备相关的驱动程序,主要的驱动如下所示。
● 显示驱动(Display Driver):基于Linux的帧缓冲(Frame Buffer)驱动。
● 盘驱动(KeyBoard Driver):作为输入设备的键盘驱动。
● Flash内存驱动(Flash Memory Driver):基于MTD的Flash驱动程序。
● 照相机驱动(Camera Driver):常用的基于Linux的v4l2(Video for Linux)驱动。
● 音频驱动(Audio Driver):常用的基于ALSA(Advanced Linux Sound Architecture)的高级Linux声音体系驱动。
● 蓝牙驱动(Bluetooth Driver):基于IEEE 802.15.1标准的无线传输技术。WiFi驱动:基于IEEE 802.11标准的驱动程序。
● Binder IPC驱动:Android的一个特殊的驱动程序,具有单独的设备节点,提供进程间通信的功能。
● Power Management(电源管理):比如电池电量等。