Android系统框架学习
Android系统框架
下图为一张Google官方提供的经典分层架构图,从下往上依次分为Linux内核层、硬件抽象层HAL、系统运行库层、应用程序框架层以及应用程序层这5层架构,其中每一层都包含大量的子模块或子系统。
Linux内核层
Android的底层是基于Linux操作系统的。从严格意义上来讲,它属于Linux操作系统的一个变种。Android选择在Linux内核的基础上来搭建自己的运行平台有几个好处。首先,避开了与硬件直接打交道。Linux经过多年的发展,这方面工作正是它的强项,而且Linux也是开源的,Android没必要去做重复的工作。其次,基于Linux系统驱动开发可扩展性很强。这对嵌入式系统而言非常重要,因为每款产品在硬件上或多或少都会有差异,如果驱动开发不能做到高度可扩展性和易用性,那么Android系统的移植工作将是永无止境的噩梦。
硬件抽象层(Hardware Abstract Layer,HAL)
大家可能有这样的疑问,既然Linux内核是专职和硬件打交道的,为什么又多出一个硬件抽象层呢?其实HAL之前是并没有的,它的第一次亮相要追溯到2008年的Google I/O大会上。它是对硬件设备的具体实现加以抽象,鉴于许多硬件设备厂商不希望公开其设备驱动的源代码,如果能将android的应用框架层与linux系统内核的设备驱动隔离,使应用程序框架的开发尽量独立于具体的驱动程序,则android将减少对Linux内核的依赖。HAL由此而生,它是对Linux内核驱动程序进行的封装,将硬件抽象化,屏蔽掉了底层的实现细节。
系统运行库层
这一层中包含了支撑整个系统正常运行的基础库,由系统类库和Android运行时组成。由于这些库多数由C/C++实现,因此也被一些开发人员称为“C库层”,以区别应用程序框架层。
- 系统类库
系统类库大部分由C/C++编写,提供的功能通过Android应用程序框架来调用。
名称 |
简介 |
Surface Manager |
管理应用显示,另外也对2D和3D图形提供支持 |
Media Framework |
基于PacketVideo的OpenCORE的多媒体库,支持多种常见音视频格式的录制和播放 |
SQLite |
本地小型关系数据库,如平时用数据库用到 |
OpenGL |
基于OpenGL ES 1.0API标准实现的3D跨平台图形库 |
FreeType |
用于显示位图和矢量字体 |
WebKit |
Web浏览器的软件引擎 |
SGL |
基于2D图形引擎 |
Libc(bionic ibc) |
C函数库bionic libc,更适合基于嵌入式Linux的移动设备 |
SSL |
安全套接层,为网络通信提供安全及数据完整性的一种安全协议,如https请求需认证 |
几个常用且比较重要的C/C++程序库所在的目录如图:
- Android运行时(Android Runtime)
每个应用都在其自己的进程中运行,都有自己的虚拟机实例。ART通过执行DEX文件可在设备运行多个虚拟机,DEX文件是一种专为Android设计的字节码格式文件,经过优化,使用内存很少。ART主要功能包括:预先(AOT)和即时(JIT)编译,优化的垃圾回收(GC),以及调试相关的支持。
应用框架层(Application Framework)
与系统运行库层被称为“C库层”相对应,应用程序架构层往往被冠以“Java库层”的称号。这是因为框架层所提供的组件一般都用Java语音编写而成,它们一方面为上层应用提供了API接口,另一方面也囊括了不少系统级服务进程的实现,是与Android应用程序开发者关系最直接的一层。
应用程序框架层提供开发Android应用程序所需的一系列类库,高度封装直接调用。应用框架层的主要实现代码在frameworks/base和frameworks/av目录下,其中frameworks/base目录结构如图:
应用层(Applications)
系统内置的应用程序以及非系统级的应用程序都属于应用层,负责与用户进行直接交互,通常都是用Java进行开发的。包括设备系统自带的工具,日历,音乐,浏览器,图片查看等应用,还有开发者开发应用程序。
源码根目录中的packages目录对应着系统应用层,目录结构图:
本文地址:https://blog.csdn.net/haofeng_ma/article/details/114319516