这篇文章上次修改于 1467 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

名词解释

内核(Kernel):管理硬件资源,向应用程序提供所需的硬件资源。

系统调用:是内核提供的应用程序与内核的沟通桥梁。

POSIX(Portable Operating System Interface of UNIX):是操作系统提供的应用程序与操作系统的沟通桥梁。它是统一的标准许多系统都支持。

C 标准库:因为操作系统的使用的库通常是用 C 语言提供的。所以 C 标准库是封装了很多方便我们系统或应用程序开发的函数,当然其中也包含对 系统调用 的封装。

守护进程:他是在系统里运行的后台任务,此类程序会被以进程的形式初始化。不会接受用户的直接操作。

ELF 文件:(Executable and Linkable Format)是一种用于可执行文件、目标文件、共享库和核心转储的标准文件格式。目前常见的 Linux、 Android 可执行文件、共享库(.so)、目标文件( .o)以及 Core Dump 文件均为此格式。

Android 官方网站的 Android 系统结构图

2020-07-12T13:36:45.png

首先最底层是内核

内核主要作用是管理硬件,也要保障安全等功能。所以其中包含硬件的驱动,以及硬件的工作方式和模型。比如:给 CPU 定义出进程,线程等任务调度的工作逻辑。内存的工作方式等。

HAL 安卓独有的一层

提供了一层标准的 API ,这样底层硬件如何变化上层将不再关心。这一层相当于充当适配的一层,隔离开上下层的变化。

Native C/C++ 库层

其中各种第三方库的 ELF 可执行文件,包含守护进程,C 标准库,空的 Android 应用进程。

Android 引入了很多功能的 ELF 可执行文件,然后通过守护进程的方式运行起来。比如 Wi-Fi 功能的可执行文件,蓝牙的可执行文件等等,最后都是以守护进程的方式在后台运行的。

这一层干的事比较多可以分为二层,首先这第一层提供的 C 标准库和 Android 系统需要用到的很多 Linux 和独有的守护进程和各种第三方库的 ELF 可执行文件。比如系统可能需要联网功能的守护进程,通信守护进程,GPS 守护进程,声音守护进程等等,这里可以根据系统功能进行精简或添加。

Android 用了很多第三方的库和手段来保持 Android 系统正常和稳定的运行和应用的可执行性,到这一层为止基本上 Google 已经提供了一套没有 UI 环境的低功耗版 Linux 系统的方案,使其可以运行在各种微型或小型设备上。
基本的低功耗 Linux 系统已经有了,剩下的就可以根据自己的想法来定义系统生态和玩法了。

Android 的玩法是想使用 Java 语言作为应用开发语言,所以 Android 需要提供一套 JVM 虚拟机和一些基础服务。所以 Android 又垒了第二层 Android 使用原生代码实现了 Android 的运行时(Android Runtime)。

Android Runtime 中包含了 Android 应用程序运行的基本库、基础服务和一台 JVM 虚拟机来运行 Java。

Java 库

Google 的玩法是在该层通过 Java 语言编写了 Android OS 的系统的基础功能的 API 、服务和各项可视化的系统功能。比如为了统一应用开发标准,定义基本的 Android 应用运行逻辑,抽象出了四大组件供开发者快速开发。以及系统运行的各项基础服务,底层的通信,GPS,摄像头等等守护进程的 Java 封装。然后在之上又做了一些系统级的应用界面。

应用层

使用 SDK 和 C 标准库开发的应用,每个应用其实都是一个或多个 Android Runtime 的实例进程,把 Java 的代码在虚拟机中运行。

个人理解的 Android 操作系统

Android 操作系统架构图

官方 Android 源码结构图

2020-12-07T13:21:57.png