天天看点

Android系统框架学习

Android系统框架

         下图为一张Google官方提供的经典分层架构图,从下往上依次分为Linux内核层、硬件抽象层HAL、系统运行库层、应用程序框架层以及应用程序层这5层架构,其中每一层都包含大量的子模块或子系统。

Android系统框架学习

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运行时(Android Runtime)

每个应用都在其自己的进程中运行,都有自己的虚拟机实例。ART通过执行DEX文件可在设备运行多个虚拟机,DEX文件是一种专为Android设计的字节码格式文件,经过优化,使用内存很少。ART主要功能包括:预先(AOT)和即时(JIT)编译,优化的垃圾回收(GC),以及调试相关的支持。

应用框架层(Application Framework)

         与系统运行库层被称为“C库层”相对应,应用程序架构层往往被冠以“Java库层”的称号。这是因为框架层所提供的组件一般都用Java语音编写而成,它们一方面为上层应用提供了API接口,另一方面也囊括了不少系统级服务进程的实现,是与Android应用程序开发者关系最直接的一层。

应用程序框架层提供开发Android应用程序所需的一系列类库,高度封装直接调用。应用框架层的主要实现代码在frameworks/base和frameworks/av目录下,其中frameworks/base目录结构如图:

Android系统框架学习

应用层(Applications)

系统内置的应用程序以及非系统级的应用程序都属于应用层,负责与用户进行直接交互,通常都是用Java进行开发的。包括设备系统自带的工具,日历,音乐,浏览器,图片查看等应用,还有开发者开发应用程序。

源码根目录中的packages目录对应着系统应用层,目录结构图:

Android系统框架学习

继续阅读