Android 是一款开源的基于 Linux 的软件堆栈,专为各种设备和形式因素而创建。图 1 显示了 Android 平台的主要组件。
Linux 内核
Android 平台的基础是 Linux 内核。例如,Android 运行时 (ART) 依赖于 Linux 内核提供底层功能,例如线程和低级内存管理。
使用 Linux 内核可以让 Android 利用 关键安全功能,并让设备制造商为众所周知的内核开发硬件驱动程序。
硬件抽象层 (HAL)
The 硬件抽象层 (HAL) 提供标准接口,将设备硬件功能公开给更高级别的 Java API 框架。HAL 由多个库模块组成,每个模块都实现特定类型硬件组件的接口,例如 相机 或 蓝牙 模块。当框架 API 调用访问设备硬件时,Android 系统会加载该硬件组件的库模块。
Android 运行时
对于运行 Android 5.0(API 级别 21)或更高版本的设备,每个应用都在自己的进程中运行,并且拥有 Android 运行时 (ART) 的独立实例。ART 被编写为通过执行 Dalvik 可执行格式 (DEX) 文件,在低内存设备上运行多个虚拟机,DEX 文件是一种专门为 Android 设计的字节码格式,针对最小内存占用量进行了优化。构建工具(如 d8
)将 Java 源代码编译为 DEX 字节码,字节码可以在 Android 平台上运行。
ART 的主要功能包括以下内容
- 提前 (AOT) 和即时 (JIT) 编译
- 优化的垃圾回收 (GC)
- 在 Android 9(API 级别 28)及更高版本上,转换 应用软件包的 DEX 文件以生成更紧凑的机器代码
- 更好的调试支持,包括专用的采样分析器、详细的诊断异常和崩溃报告,以及设置断点以监视特定字段的功能
在 Android 5.0(API 级别 21)之前,Dalvik 是 Android 运行时。如果您的应用在 ART 上运行良好,那么它也可以在 Dalvik 上运行,但反过来可能不成立。
Android 还包括一组核心运行时库,这些库提供了 Java 编程语言的大部分功能,包括一些 Java 8 语言功能,供 Java API 框架使用。
原生 C/C++ 库
许多核心 Android 系统组件和服务(例如 ART 和 HAL)都是使用需要用 C 和 C++ 编写的原生库的原生代码构建的。Android 平台提供 Java 框架 API,将其中一些原生库的功能公开给应用。例如,您可以通过 Android 框架的 Java OpenGL API 访问 OpenGL ES,以在您的应用中添加对绘制和操作 2D 和 3D 图形的功能的支持。
如果您正在开发需要 C 或 C++ 代码的应用,可以使用 Android NDK 直接从原生代码访问一些 原生平台库。
Java API 框架
您可以通过用 Java 语言编写的 API 访问 Android 操作系统的全部功能集。这些 API 构成了构建 Android 应用所需的构建块,通过简化对核心模块化系统组件和服务的重用,包括以下内容
- 丰富的可扩展 视图系统,可用于构建应用的 UI,包括列表、网格、文本框、按钮,甚至嵌入式 Web 浏览器
- A 资源管理器,提供对非代码资源的访问,例如本地化字符串、图形和布局文件
- A 通知管理器,使所有应用都能在状态栏中显示自定义警报
- A 活动管理器,管理应用的生命周期并提供通用的 导航后退堆栈
- 内容提供程序,使应用能够访问其他应用(如联系人应用)的数据,或共享自身数据
开发者可以完全访问 Android 系统应用使用的相同 框架 API。
系统应用
Android 附带了一组用于电子邮件、短信、日历、互联网浏览、联系人等的核心应用。与平台捆绑在一起的应用在用户选择安装的应用中没有特殊地位。因此,第三方应用可以成为用户的默认 Web 浏览器、短信收发器,甚至默认键盘。某些情况除外,例如系统的设置应用。
系统应用程序既可以作为用户的应用程序使用,也可以提供开发者从其应用程序访问的关键功能。例如,如果您希望您的应用程序传递短信,您无需自行构建此功能。您可以改为调用已安装的任何短信应用程序来向您指定的收件人发送消息。