- 参考: Android Developers
- (https://developer.android.google.cn/)
平台架构
Android 是基于 Linux 的开源软件栈,下图为官网给出的 Android 平台主要组件。
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
:安全套阶层,为网络通信提供安全及数据完整性的安全协议。Webkit
:Web
浏览器引擎,为Android OS
与WebView
提供支持。
Android 运行时
对于运行 Android 5.0(API 21)
及更高版本的设备中,每个应用都在其自己的进程中运行,并拥有自己的 Android Runtime(ART)
实例。ART 通过执行 DEX(Delvik Executable)
文件在有限的内存中运行多个虚拟机,DEX
文件是一种专门为 Android
设计的字节码格式。在开发时,通过工具链将 Java
源代码编译为 DEX
字节码,使其可以在 Android OS
上运行。
对于 Android 5.0(API 21)
之前的版本中,Dalvik
是 Android 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
提供了安全组件、内存管理、进程管理、网络协议、驱动模型等功能,并允许设备制造商为已发布的内核提供硬件驱动程序。