1.2 Android的体系结构
英文版Android体系结构如图1-1所示,中文版Android体系结构如图1-2所示。
图1-1 英文版Android体系结构
图1-2 中文版Android体系结构
由图1-1和图1-2可以明显地看出,Android体系结构由5部分组成,分别是Linux Kernel、Android Runtime、Libraries、Application Framework、Applications。
(1)Linux Kernel(Linux内核)。Android基于Linux 2.6提供核心系统服务,例如安全管理、内存管理、进程管理、网络堆栈、驱动模型等。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。
(2)Android Runtime(Android运行时)。Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android应用程序都是Dalvik虚拟器中的实例,运行在它们自己的进程中。Dalvik虚拟器设计成在一个设备中可以高效地运行多个虚拟器。Dalvik虚拟器可执行文件格式是dex, dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。
大多数虚拟器包括JVM都是基于栈的,而Dalvik虚拟器则是基于寄存器的,Dalvik虚拟器依赖于Linux内核提供基本功能,例如线程和底层内存管理。
(3)Libraries(核心库)。Android包含一个C/C++库的集合,供Android系统的各个控件使用。这些功能通过Android的应用程序框架(Application Framework)提供给开发者。下面列出了一些核心库:
①系统C库:标准C系统库(libc)的BSD衍生,基于嵌入式Linux设备。
②媒体库:基于PacketVideo的OpenCORE。这些库支持播放和录制许多流行的音频和视频格式以及静态图像文件,包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG等。
③界面管理:管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层。
④LibWebCore:新式的Web浏览器引擎,驱动Android浏览器和内嵌的Web视图。
⑤SGL:基本的2D图形引擎。
⑥3D库:基于OpenGL ES 1.0 APIs的实现,库使用硬件3D加速或包含高度优化的3D软件光栅。
⑦FreeType:位图和矢量字体渲染。
⑧SQLite:所有应用程序都可以使用的强大而轻量级的关系数据库引擎。
(4)Application Framework(应用程序框架)。通过提供开放的开发平台,Android使开发者能够编写极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等。
开发者可以完全使用核心应用程序所使用的框架APIs。应用程序的体系结构旨在简化控件的重用,任何应用程序都能发布它的功能且任何其他应用程序可以使用这些功能,但需要服从框架执行的安全限制。
所有的应用程序其实是一组服务和系统,主要包括:
①视图(View):丰富的、可扩展的视图集合,可用于构建一个应用程序,包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器。
②内容提供者(ContentProviders):使应用程序能访问其他应用程序的数据,或共享自己的数据。
③资源管理器(Resource Manager):提供访问非代码资源,如本地化字符串、图形和布局文件等。
④通知管理器(Notification Manager):使所有的应用程序能够在状态栏显示自定义警告。
⑤活动管理器(Activity Manager):管理应用程序生命周期,提供通用的导航回退功能。
(5)Applications(应用程序)。Android装配一个核心应用程序集合,包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置。所有应用程序都是用Java语言编写的。
由以上分析可知,Android的架构是分层的,分工很明确。Android本身是一套“软件堆叠(Software Stack)”,或称为“软件叠层架构”,叠层主要分成三层:操作系统、中间件和应用程序。