Android framework开发 第二篇:初识Android系统之AOSP

3,690 阅读4分钟

AOSP架构

AOSP 的软件堆栈包含以下层: image.png

1.AOSP 软件堆栈架构。

以下是图 1 中使用的术语的定义列表:

  • 安卓应用

    仅使用 Android API 创建的应用程序。 Google Play 商店广泛用于查找和下载 Android 应用程序,但还有许多其他选择。在某些情况下,设备制造商可能希望预装 Android 应用程序以支持设备的核心功能。如果您有兴趣开发 Android 应用程序,请参阅developers.android.com

  • 特权应用

    结合使用 Android 和系统 API 创建的应用程序。这些应用程序必须作为特权应用程序预安装在设备上。

  • 设备制造商应用

    使用 Android API、系统 API 和直接访问 Android 框架实现的组合创建的应用程序。由于设备厂商可能会直接访问Android框架内不稳定的API,这些应用必须预装在设备上,并且只有在设备的系统软件更新时才能更新。

  • 系统接口

    系统 API 表示仅供合作伙伴和 OEM 用于包含在捆绑应用程序中的 Android API。这些 API 在源代码中被标记为@SystemApi。

  • 安卓接口

    Android API 是供第三方 Android 应用程序开发人员公开使用的 API。有关 Android API 的信息,请参阅Android API 参考

  • 安卓框架

    一组 Java 类、接口和其他构建应用程序的预编译代码。框架的某些部分可通过使用 Android API 公开访问。框架的其他部分只能通过使用系统 API 提供给 OEM。 Android 框架代码在应用进程中运行。

  • 系统服务

    系统服务是模块化的、集中的组件,例如system_server 、SurfaceFlinger 和 MediaService。 Android 框架 API 公开的功能与系统服务通信以访问底层硬件。

  • Android 运行时 (ART)

    AOSP提供的Java运行环境。 ART 将应用程序的字节码转换为特定于处理器的指令,这些指令由设备的运行时环境执行。

  • 硬件抽象层 (HAL)

    HAL 是一个抽象层,具有供硬件供应商实现的标准接口。 HAL 允许 Android 不了解较低级别的驱动程序实现。使用 HAL 可以让您在不影响或修改更高级别系统的情况下实现功能。有关详细信息,请参阅HAL 概述

  • 本机守护进程和库

    该层中的本地守护进程包括init 、 healthd 、 logdstoraged 。这些守护进程直接与内核或其他接口交互,不依赖于基于用户空间的 HAL 实现。

    该层中的本机库包括libc 、 liblog 、 libutils 、 libbinderlibselinux 。这些本机库直接与内核或其他接口交互,不依赖于基于用户空间的 HAL 实现。

  • 核心

    内核是任何操作系统的核心部分,并与设备上的底层硬件进行对话。在可能的情况下,AOSP 内核被拆分为与硬件无关的模块和特定于供应商的模块。有关 AOSP 内核组件的描述(包括定义),请参阅内核概述

AOSP架构 从细分层去看AOSP

image.png

系统架构和运行机制

image.png

* 这里说明一下 硬件抽象层(HAL)

HAL(Hardware Abstract Layer)硬件抽象层,是 Google 开发的 Android 系统上层应用对底层硬件操作屏蔽的一个层次结构,简单来说就是,上层应用不需要关心底层硬件是如何工作的,只需要调用底层提供的统一接口即可。

其实,Android 系统完全可以没有 HAL 层,访问硬件可以通过调用 Linux 内核的标准函数来实现,但是,如何访问 Linux 内核就涉及到了技术专利和商业机密,厂商不想公开源代码,只愿提供二进制代码。而 Linux 内核采用了 GPL 协议,任何人都可以获取或者修改其源代码,因此 Google 在 Android 系统架构中增加了一个 HAL 层,不想公开的代码可以放在这个位置。

另外,HAL 提供标准界面,向更高级别的 Java API 框架显示设备硬件功能。 HAL 包含多个库模块,其中每个模块都为特定类型的硬件组件实现一个界面,例如,相机或蓝牙模块。当框架 API 要求访问设备硬件时,Android 系统将为该硬件组件加载库模块。

GPL:GNU(操作系统)通用公共许可证,GPL 授权有以下特点:任何软件挂上 GPL 授权之后,即为自由软件,任何人可以获取、修改其源代码,经过修改后的源代码也要公开。

严格来说,Linux 只是一个操作系统内核,大部分 Linux 发行版都是由操作系统内核加上 GNU 的软件或者工具形成的完整的操作系统,也就是 GNU/Linux。GNU/Linux 是一种 Unix Like 操作系统。