欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

Android系统框架学习

程序员文章站 2022-06-22 23:46:44
Android系统框架 下图为一张Google官方提供的经典分层架构图,从下往上依次分为Linux内核层、硬件抽象层HAL、系统运行库层、应用程序框架层以及应用程序层这5层架构,其中每一层都包含大量的子模块或子系统。 Linux内核层 Android的底层是基于Linux操作系统的。从严格意义上来讲,它属于Linux操作系统的一个变种。Android选择在Linux内核的基础上来搭建自己的运行平台有几个好处。首先,避开了与硬件直接打交道。Li......

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系统框架学习

 

 

本文地址:https://blog.csdn.net/haofeng_ma/article/details/114319516