Skip to content

Android - 架构

Android 操作系统是一个复杂的软件组件栈 (stack)。这个栈可以大致分为五个主要部分,通常以层 (layers) 的形式可视化。理解这个架构对于开发健壮高效的 Android 应用至关重要。

Android 架构的主要层,从底部到顶部,分别是:

  1. Linux Kernel (Linux 内核)
  2. Hardware Abstraction Layer (HAL) (硬件抽象层)
  3. Native C/C++ Libraries (本地 C/C++ 库) 和 Android Runtime (ART) (Android 运行时)
  4. Java API Framework (Application Framework) (Java API 框架 / 应用框架)
  5. System Apps (系统应用) 和 User Applications (用户应用)

Android 平台的基础是 Linux Kernel。Android 是基于 Linux 内核的长期支持 (LTS) 版本构建的,并针对移动设备进行了特定的增强。内核负责以下方面:

  • Hardware Drivers (硬件驱动): 管理低层设备硬件,如显示、相机、Wi-Fi、蓝牙、USB、音频和键盘。
  • Process Management (进程管理): 处理应用程序进程,分配资源并确保隔离。
  • Memory Management (内存管理): 管理系统 RAM 和虚拟内存。
  • Networking Stack (网络栈): 提供 TCP/IP 网络能力。
  • Security (安全): 强制执行安全措施,如基于用户的权限和应用程序的沙箱隔离 (sandboxing)。

内核在设备硬件和软件栈的其余部分之间提供了一个抽象层。

2. Hardware Abstraction Layer (HAL) (硬件抽象层)

Section titled “2. Hardware Abstraction Layer (HAL) (硬件抽象层)”

Hardware Abstraction Layer (HAL) 提供了一个标准接口,将设备硬件能力暴露给更高层的 Java API 框架。HAL 由多个库模块 (library modules) 组成,每个模块都为特定类型的硬件组件(如相机或蓝牙模块)实现一个接口。

当框架 API 调用访问设备硬件时,Android 系统会加载该硬件组件的库模块。这使得 Android 不关心低层驱动的具体实现,从而提高了在不同硬件配置上的可移植性。

3. Native C/C++ Libraries (本地 C/C++ 库) 和 Android Runtime (ART) (Android 运行时)

Section titled “3. Native C/C++ Libraries (本地 C/C++ 库) 和 Android Runtime (ART) (Android 运行时)”

这一层位于 HAL 和 Linux Kernel 之上,为 Android 系统提供核心功能。它由两个主要的子组件组成:

许多核心 Android 系统组件和服务都是由需要本地库 (native libraries) 的本地代码 (C 和 C++) 构建的。这些库通过 Java API 框架暴露给开发者。主要的本地库包括:

  • Bionic (libc): 一个针对 Android 优化的定制 C 库。
  • Media Frameworks (媒体框架): 像 MediaCodec、Stagefright (较旧) 和 libav 这样的库,用于播放和录制各种音频和视频格式。
  • SurfaceFlinger: 管理显示,并将多个应用程序的图形缓冲区 (graphic buffers) 合成到屏幕上。
  • Skia: 一个用于绘制 UI 元素的 2D 图形渲染引擎。
  • OpenGL ES 和 Vulkan: 用于高性能 2D 和 3D 图形渲染的 API。
  • SQLite: 一个轻量级关系型数据库引擎,用于本地数据存储。
  • WebKit/Blink: 支持 WebView 的 Web 渲染引擎。
  • SSL/TLS (例如,BoringSSL): 用于安全网络通信。

主要使用 Kotlin 或 Java 编写的 Android 应用程序在 Android Runtime (ART) 上运行。ART 在 Android 5.0 (Lollipop) 中取代了旧的 Dalvik Virtual Machine (DVM)。ART 的主要特性包括:

  • Ahead-Of-Time (AOT) Compilation (预先编译): 在应用安装时将应用字节码 (Dalvik Executable - DEX 文件) 编译成本地机器码 (native machine code),提高了运行时性能 (runtime performance) 和电池续航 (battery life)。
  • Just-In-Time (JIT) Compilation (即时编译): 通过在运行时进一步优化频繁执行的代码路径来补充 AOT。
  • Optimized Garbage Collection (GC) (优化垃圾回收): 比 Dalvik 更高效的内存管理 (memory management)。
  • Improved Debugging Support (改进的调试支持): 更好的诊断 (diagnostics) 和性能分析能力。

每个 Android 应用都在自己的进程 (process) 中运行,拥有自己的 ART 实例 (instance),确保了应用的隔离 (isolation) 和稳定性。ART 及其核心库提供了执行应用代码和管理系统资源 (system resources) 的运行时环境 (runtime environment)。

4. Java API Framework (Application Framework) (Java API 框架 / 应用框架)

Section titled “4. Java API Framework (Application Framework) (Java API 框架 / 应用框架)”

这一层提供了开发者用来构建 Android 应用程序的高级 Java (和 Kotlin 可调用) API。它包含一组丰富的类和服务,抽象了底层层的复杂性。应用框架 (Application Framework) 的关键组件包括:

  • Activity Manager (Activity 管理器): 管理 Activity 的生命周期 (lifecycle) 和 Activity 栈 (activity stack) (返回栈 - back stack)。
  • View System (视图系统): 为创建用户界面提供基础 UI 构建块 (UI building blocks) (Views 和 ViewGroups)。这包括按钮 (buttons)、列表 (lists)、文本字段 (text fields) 和布局管理器 (layout managers) 等控件 (widgets)。现代 UI 开发还使用 Jetpack Compose,这是一个用 Kotlin 构建的声明式 UI 工具包。
  • Notification Manager (通知管理器): 允许应用向用户显示自定义警报和通知 (notification)。
  • Resource Manager (资源管理器): 提供对非代码资源 (non-code resources) 的访问,如字符串 (strings)、布局 (layouts)、可绘制资源 (drawables) 和其他资产文件 (assets)。
  • Content Providers (内容提供器): 使应用程序能够以结构化和安全的方式与其他应用程序共享数据。
  • Package Manager (包管理器): 管理已安装应用 (installed applications) 及其元数据 (metadata)。
  • Telephony Manager (电话管理器): 提供对电话服务 (telephony services) (通话、短信) 的访问。
  • Location Manager (位置管理器): 提供对位置服务 (location services) (GPS, 基于网络的定位) 的访问。
  • WindowManager (窗口管理器): 管理窗口 (windows) 及其在屏幕上的显示 (display)。

开发者主要与这个框架交互,利用 Android Jetpack 库,这是一套库、工具和指南,旨在帮助开发者遵循最佳实践 (best practices),减少样板代码 (boilerplate code),并编写在不同 Android 版本和设备上都能一致工作的代码。Jetpack 组件通常提供比基础框架类更强大或更简单的 API (例如,用于数据库的 Room,用于 UI 相关数据的 ViewModel,用于应用导航的 Navigation)。

5. System Apps (系统应用) 和 User Applications (用户应用)

Section titled “5. System Apps (系统应用) 和 User Applications (用户应用)”

顶层是应用程序本身。这包括:

  • System Apps (系统应用): 提供核心设备功能的预装应用程序,例如电话拨号器、联系人、浏览器、电子邮件客户端、相机和设置应用。
  • User Applications (用户应用): 用户从 Google Play Store 或其他来源安装的应用程序。这些是开发者使用 Android SDK 和 Java API 框架创建的应用。

所有应用程序,无论是系统应用还是用户安装的应用,都利用 Android 架构较低层提供的服务和 API。这种分层架构促进了模块化 (modularity)、安全 (security),并允许在各种硬件上形成丰富的应用程序生态系统。