【Android】系统构架
作者:邹峰立,微博:zrunker,邮箱:zrunker@yahoo.com,微信公众号:书客创作,个人平台:www.ibooker.cc。
![](https://img.haomeiwen.com/i3480018/f1141c546076e596..jpg)
身为一个Android开发者,如果对Android系统构架一点也不了解,怎么也说不过去。作为第一章节,我就取之大概,给大家提供基础性的讲解。
有人说Android系统架构一共四层,但是也有人说Android系统架构一共五层,这两种说法都没有错。Android的四层架构由高到底分别是:Android应用层,Android应用框架层,Android系统运行层和Linux内核层。而Android的五层架构,只是在Android系统运行层和Linux内核层之间多了一层硬件抽象层(HAL),HAL并没有在Android官方系统架构图中标明。
![](https://img.haomeiwen.com/i3480018/472159659b3eb591..jpg)
所谓硬件抽象层(Hardware Abstract Layer,HAL)是对硬件设备的实现加以抽象,隐藏Android底层的硬件接口细节。通俗点说,HAL将Android的应用框架层与Linux系统内核的设备驱动隔离,使应用程序框架的开发尽量独立于具体的驱动程序,减少对Linux内核的依赖。
Android应用层
能与用户进行最直接的交互都能称之为Android应用层,虽然这句话说的并不是很贴切,但是很容易让人理解。例如:email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等都属于应用层程序,一般都是使用Java进行编写。
Android应用框架层
Android应用框架层为开发人员提供一系列API,这些API可以被应用程序进行调用,简化了组件的重用。
下面是这一层所提供的主要模块。
名称 | 功能 |
---|---|
Activity Mananger(活动管理器) | 管理各个应用程序生命周期并提供常用的导航回退功能,为所有程序的窗口提供交互的接口 |
Window Manager(窗口管理器) | 对所有开启的窗口程序进行管理 |
Notification Manager(通知管理器) | 使应用程序可以在状态栏中显示自定义的客户提示信息 |
Package Manager(包管理器) | 对应用程序进行管理,提供的功能诸如安装应用程序,卸载应用程序,查询相关权限信息等 |
Resource Manager(资源管理器) | 提供各种非代码资源供应用程序使用,如本地化字符串,图片,音频等 |
Location Manager(位置管理器) | 提供位置服务 |
Telephony Manager(电话管理器) | 管理所有的移动设备功能 |
Content Provider(内容提供器) | 提供一个应用程序访问另一个应用程序数据的功能,或者实现应用程序之间的数据共享 |
View System(视图系统) | 创建应用程序的基本组件,包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons),还有可嵌入的web浏览器 |
XMPP服务 | 是Google在线即时交流软件中一个通用的进程,提供后台推送服务 |
Android系统运行层
Android系统运行层分为两部分,分别是系统类库和Android运行时。
1、系统类库
系统类库大部分由C/C++编写,能被Android系统中不同组件所使用,并通过Android应用程序框架为开发者所使用。主要的系统类库及说明如下表:
名称 | 说明 | |
---|---|---|
Surface Manager | 执行多个应用程序时,管理子系统的显示,另外也对2D和3D图形提供支持 | |
Media Framework | 基于PacketVideoOpenCore的多媒体库,支持多种常用的音频和视频格式的录制和回放,所支持的编码格式包括MPEG4,MP3,H264,AAC,ARM | |
SQLite | 本地小型关系数据库,Android提供了一些新的SQLite数据库API,以替代传统的耗费资源的JDBC API | |
OpenGL | ES | 基于OpenGL ES 1.0API标准实现的3D跨平台图形库 |
FreeType | 用于显示位图和矢量字体 | |
WebKit | Web浏览器的软件引擎 | |
SGL | 底层的2D图形引擎 | |
Libc(bionic l ibc) | 继承自BSD的C函数库bionic libc,更适合基于嵌入式Linux的移动设备 | |
SSL | 安全套接层,是为网络通信提供安全及数据完整性的一种安全协议 |
除了以上类库之外,还有一个类库也相当重要,Android NDK(Native Development Kit),即Android原生库。NDK为开发者提供了直接使用Android系统资源,并采用C或C++语言编写程序的接口。
2、Android运行时
Android运行时包含核心库和Dalvik虚拟机(5.0系统之后,Dalvik虚拟机被ART取代)两部分。
核心库提供了JAVA编程语言核心库的大多数功能,并提供Android的核心API,如android.os,android.net,android.media等。
Dalvik虚拟机并不是Java虚拟机(JVM),它们是有区别的。
- Dalvik虚拟机是基于寄存器,而JVM基于栈。
- 每一个Dalvik应用都是一个独立的Linux进程,都拥有一个独立的Dalvik虚拟机实例。简单点说,每开启一个Java程序,就有一个Dalvik虚拟机实例。
- Dalvik虚拟机从DEX(Dalvik Executable)格式的文件中读取指令与数据,进行解释运行。DEX文件由传统的,编译产生的CLASS文件,经dx工具软件处理后生成。同时,Dalvik的DEX文件还可以进一步优化,提高运行性能。通常,OEM的应用程序可以在系统编译后,直接生成优化文件(.ODEX)。
Dalvik已经很不错了,为什么还会被ART取代呢?
ART的机制与Dalvik不同。在Dalvik环境下,应用每次运行的时候,字节码都需要通过即时编译器转换为机器码,这会拖慢应用的运行效率。而在ART环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用,这个过程叫做预编译(AOT,Ahead-Of-Time)。所以ART环境下,应用的启动和执行都会变得更快。
Linux内核层
Android的核心系统服务基于Linux内核,借助Linux内核服务实现硬件设备驱动,进程和内存管理,网络协议栈,电源管理,无线通信等核心功能。Android4.0版本之前基于Linux2.6系列内核,4.0及之后的版本使用更新的Linux3.X内核,并且两个开源项目开始有了互通。
结语:在Android实际开发当中,Application应用层操作最为之多,但是同样可以找到其他层次相关的东西,如SQLite,WebKit等。所以了解每一层是什么?有什么作用?还是很有必要的。
![](https://img.haomeiwen.com/i3480018/f4f2c10395845836..jpg)