Android系统架构

一、Android系统架构

1.1 概述

Google在Android 8版本时开展了 Treble 计划,对Android系统进行了重新架构,将安卓系统框架与Vendor层解耦,力求彻底解决安卓碎片化的问题,这是安卓系统架构最大的变化。

Android 8前后两者区别在于Android 8 之后的系统架构多了一层硬件抽象层(HAL)。,其目的是将物理硬件与操作系统分离,使开发人员可以更加方便地编写硬件驱动程序,并且能够在各种不同地硬件平台之间进行移植。

以下是官方给出的Android 8系统之后地分层架构图,总共分为5层,从下往上依次分为Linux内核、硬件抽象层(HAL)、原生 Native 库和 Android Runtime、Java API 框架以及应用层,其中每一层都包含大量的子模块或子系统。

1.2 Linux内核

Android系统的底层基础是Linux内核层,其主要职责是管理硬件资源和进程控制。其中包括了设备驱动程序、内存管理、网络协议栈等。这些功能为上层的应用程序提供了稳定的基础服务。

其中,设备驱动程序是Linux内核非常重要的一部分,它负责与硬件进行交互,包括摄像头、显示器、WiFi、蓝牙等。通过调用设备驱动程序,Android系统才能完成与硬件设备的通信和操作。

1.3 硬件抽象层(HAL)

HAL是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化。HAL定义了一系列标准接口和抽象类,这些接口和抽象类描述了许多硬件设备的通用行为和属性。每个HAL模块都对应一个硬件设备类型,例如相机、蓝牙等。当Android系统需要使用某个硬件设备时,它会根据设备类型选择合适的HAL模块,然后调用该模块提供的API来访问设备。

1.4 原生 C/C++ 库

Native C/C++ 层是指使用 C 和 C++ 语言编写的代码,通常被称为本地层。在 Android 应用程序中,本地层主要用于访问底层系统资源,例如文件系统、网络协议栈和硬件接口等。本地层还可以提供与 Java 代码的互操作性,使得 Android 应用程序能够充分利用本地代码的优势,例如高效的内存管理和快速的算法执行速度。

在 Android 架构中,本地层主要负责以下几个方面的任务:

  1. 提供与硬件交互的接口:本地层可以实现与硬件设备的交互,例如相机、音频和传感器等。这些设备通常需要直接访问底层系统资源,因此需要使用本地层的功能来访问它们。

  2. 实现高性能算法:以 C 和 C++ 语言编写的代码通常比 Java 代码更具有高性能和高效率。当需要处理大量数据或进行复杂计算时,本地层可以提供更好的性能。例如,图像处理和音频处理等应用程序通常会使用本地库来提高性能。

  3. 跨平台移植支持:由于 C 和 C++ 语言是跨平台的,因此本地层可以轻松地在不同的操作系统和处理器架构之间进行移植。这样可以使得应用程序更具有可移植性,同时也可以充分利用各种不同硬件平台的优势。

以下是该库的一些API:

  • WebKit:一套网页浏览器的软件引擎。
  • OpenMAX AL:用于实现音频或视频播放功能,包括控制音频输出设备、读取音频文件、解码音频流、生成音频输出等。
  • Libc:从BSD继承来的标准C系统函数库,专门为基于嵌入式linux的设备定制。
  • Media Framework:多媒体库,支持多种常用的音频、视频格式录制和回放。
  • OpenGL ES:3D绘图函数库。

1.5 Android Runtime

Android Runtime又可以分为ART虚拟机和核心库两部分。

核心库

核心库是一组基础类库,提供 Java API 框架所使用的 Java 编程语言中的大部分功能,包括了专门为 Android 开发的基于 Java 的程序库,这样开发者可以使用Java语言来编写Android应用。以下是一些常用的库:

  • android.app:提供应用程序模型的访问,是所有 Android 应用程序的基石。
  • android.content:方便应用程序之间,应用程序组件之间的内容访问,发布,消息传递。
  • android.database:用于访问内容提供者发布的数据,包含 SQLite 数据库管理类。
  • android.os:提供应用程序访问标注操作系统服务的能力,包括消息,系统服务和进程间通信。
  • android.text:在设备显示上渲染和操作文本。
  • android.view:应用程序用户界面的基础构建块。
  • android.widget:丰富的预置用户界面组件集合,包括按钮,标签,列表,布局管理,单选按钮等。
  • android.webkit:一系列类的集合,允许为应用程序提供内建的 Web 浏览能力。

ART虚拟机

ART 虚拟机是 Android 5.0 及以上版本中默认使用的虚拟机,代替了Android 5.0以下版本中使用的Dalvik虚拟机。它用于将应用程序代码翻译成可在 Android 设备上运行的机器语言。

它与旧版 Dalvik 虚拟机相比具有更好的性能和稳定性。与 Dalvik 相比,ART 的主要优势是 Ahead-of-time (AOT)编译技术,可以在应用程序安装时预先编译代码(编译成ELF可执行文件),以提高应用程序的启动时间和性能。

当用户打开一个应用程序时,ART 会在后台使用 AOT 编译器将应用程序的 Dex 字节码转换成本地机器代码,并存储在设备的存储空间中。这样,在下次打开应用程序时,就可以直接加载已经编译好的代码,避免了解释执行的过程,从而提高了应用程序的运行速度和响应时间。

此外,ART 还支持 Just-In-Time( JIT)编译技术,可以在应用程序运行过程中对频繁执行的代码进行实时编译,进一步提高应用程序的执行效率。

1.6 Java API 框架

Java API 框架层提供了许多API接口,方便开发人员开发各种应用程序。这些API包括了:

  • Content Provider:用于应用程序之间共享数据。
  • View System:控制UI界面的渲染和交互。
  • Activity Manager:管理各个Activity和Task的组件,使得用户可以在不同的Activity之间进行切换。
  • Location Manager:提供地理位置及定位功能服务。
  • Package Manager:管理所有安装在Android系统中的应用程序。
  • Notification Manager:可让所有应用在状态栏中显示自定义提醒。
  • Resource Manager:用于访问非代码资源,例如本地化的字符串、图形和布局文件。
  • Telephony Manager:管理所有的移动设备功能。
  • Window Manager:管理所有的窗口程序。

1.7 系统应用

最后一个层次是系统应用层,这是用户直接面对的部分,也是Android系统最重要的一部分。系统应用层包括了通讯录、短信、电话、相机、浏览器等各种常见应用程序。每个应用程序都可以通过调用上面几个层次提供的API接口,来完成自己的任务。

二、总结

以上只是静态分析了Android系统架构,虽然可以了解Android架构地层次和功能,但不足以了解Android整个系统运行时各层次之间的信息传递和交互,即不能真正看穿Android的运行机理,故还需进一步学习。


参考:

平台架构 | Android 开发者 | Android Developers (google.cn)

Android Runtime (ART) 和 Dalvik | Android 开源项目 | Android Open Source Project (google.cn)

Android 操作系统架构开篇 - Gityuan博客 | 袁辉辉的技术博客

Android技术架构演进与未来_Gityuan的博客-CSDN博客

Android系统架构及其相关模块说明

Dalvik 和 ART 有什么区别?深扒 Android 虚拟机发展史,真相却出乎意料! - 知乎 (zhihu.com)


Android系统架构
http://example.com/2023/07/04/Android安全/Android系统架构/
作者
gla2xy
发布于
2023年7月4日
许可协议