Android | Android 系统架构

  • 参考: Android Developers
  • (https://developer.android.google.cn/)

平台架构

Android 是基于 Linux 的开源软件栈,下图为官网给出的 Android 平台主要组件。

Android | Android 系统架构_第1张图片

Android 平台从上(直接与用户交互)到下(直接与硬件交互)包含:

  • 系统应用层 (System Apps)
  • Java API 框架 (Java API Framework)
  • 原生 C/C++ 库 (Native C/C++ Libraries)
  • Android 运行时 (ART, Android Runtime)
  • 硬件抽象层 (HAL, Hardware Abstraction Layer)
  • Linux 内核层 (Linux Kernel)

应用层

系统内置的应用程序以及非系统级的应用程序(即用户安装的程序)都属于应用层,负责与用户进行交互。常见的系统应用包括日历、短信、邮件、默认浏览器、联系人、默认键盘等,这些系统应用与

Java API 框架

为开发人员提供开发应用所需要的 API,开发人员可以通过以 Java 语言编写的 API 使用 Android OS 的整个功能集,可以简化应用开发流程。包括以下组件及服务:

  • 活动管理器 Activity Manager:管理各个 Activity 的生命周期,以及页面导航跳转功能等 Activity 相关操作。
  • 位置管理器 Location Manager:向应用程序提供地理位置及定位功能服务。
  • 包管理器 Package Manager:管理所有安装在 Android OS 中的应用程序。
  • 通知管理器 Notification Manager:向应用程序提供状态栏信息提示的功能。
  • 资源管理器 Resource Manager:管理应用程序使用的非代码资源,如本地文本、图片、布局文件、颜色文件等。
  • 电话管理器 Telephone Manager:管理所有的移动设备功能。
  • 窗口管理器 Window Manager:管理所有已开启的窗口程序。
  • 内容提供器 Content Provider:向应用程序提供不同 App 之间的数据共享服务。
  • 视图系统 View System:构建应用程序的基本组件。

原生 C/C++ 库

许多核心的 Android 系统组件及服务构建自原生代码,需要 C 与 C++ 编写的原生库依赖。如果需要 C 或 C++ 依赖,可以使用 Android NDK 直接从原生代码访问某些原生平台库。 一些常用的库如下所示:

  • OpenGL ES:3D 绘图函数库。
  • SGL:底层的 2D 图形渲染引擎。
  • OpenMAX AL:开放媒体加速库,提供统一的接口,用于加速嵌入式和移动设备上多媒体应用程序中音频、视频和图像的捕获、呈现等操作任务。
  • Libs:从 BSD 继承的标准C系统函数库,专门为基于 嵌入式Linux 的设备制定。
  • Media Framework:多媒体库,支持多种常用音视频格式的常用操作。
  • SQLite:轻量级关系型数据库引擎。
  • SSL:安全套阶层,为网络通信提供安全及数据完整性的安全协议。
  • WebkitWeb 浏览器引擎,为 Android OSWebView 提供支持。

Android 运行时

对于运行 Android 5.0(API 21) 及更高版本的设备中,每个应用都在其自己的进程中运行,并拥有自己的 Android Runtime(ART) 实例。ART 通过执行 DEX(Delvik Executable) 文件在有限的内存中运行多个虚拟机,DEX 文件是一种专门为 Android 设计的字节码格式。在开发时,通过工具链将 Java 源代码编译为 DEX 字节码,使其可以在 Android OS 上运行。

对于 Android 5.0(API 21) 之前的版本中,DalvikAndroid Runtime

ART 的部分主要功能有:

  • 预编译(AOT, Ahead of Time)与即时编译(JIT, Just in Time
  • 垃圾回收(GC)
  • 调试支持

Android 还包含一套核心运行时库,可提供 Java API 框架所使用的 Java 编程语言中的大部分功能。

硬件抽象层

位于 Linux 内核与硬件电路之间的接口层,目的在于将硬件接口抽象化,隐藏特定平台的硬件接口细节。由于 Linux 采用了 GPL 协议,源代码是开放且可供修改的,如果硬件提供厂商不希望公开这部分,可以将其放在 HAL 中。HAL 包含多个库模块,其中每个模块都实现了特定类型硬件组件的接口,当框架 API 调用访问设备引硬件时,Android OS 就会加载该硬件组件的库模块。
对于开发来说,HAL 很好的屏蔽了软硬件的兼容问题,软件与硬件由于 HAL 的存在变得无关。对于测试来说,软件与硬件的测试也可以并行执行,即通过 HAL 来单独控制硬件,或通过 HAL 对软件部分提供虚拟的硬件接口。

Linux 内核层 (Linux Kernel)

Android 平台的基础是 Linux 内核,在此基础上添加了部分 Android 专用的驱动,例如 ART 依靠 Linux 内核来执行底层功能,包括线程和低层内存管理。Linux 内核向 Android 提供了安全组件、内存管理、进程管理、网络协议、驱动模型等功能,并允许设备制造商为已发布的内核提供硬件驱动程序。

你可能感兴趣的:(Android,android,系统架构)