第一章 Android 系统架构.md
1.1 Android 系统架构
-
应用层 (System Apps)
系统内置的应用程序,负责与用户直接交互,通常使用 Java (Kotlin) 开发 。
-
应用框架层 (Java API Framework)
为开发人员提供了开发应用程序需要的 API,我们平常开发 APP 都使用这一层提供的 API 。这一层是使用 Java 编写的,以下是主要组件:
名称 功能描述 Activity Manager 管理各个 Activity 的生命周期以及回退等功能 Location Manager 提供地理位置及定位功能服务 Package Manager 管理所有安装在 Android 系统中的应用程序 Notification Manager 使得应用程序可以在状态栏中显示自定义的通知 Resource Manager 提供应用程序使用的各种非代码资源 Telephony Manager 管理所有的移动设备功能 Window Manager 管理所有开启的窗口程序 Content Provider 使得不同应用程序之间可以共享数据 View System 构建应用程序的基本组件 -
系统运行库层 (Native)
分为两部分:
-
C/C++ 程序库
名称 功能描述 OpenGL ES 3D 绘图函数库 Libc 从 BSD 继承来的标准 C 系统函数库,专门为嵌入式 Linux 设备定制 Media Framework 多媒体库,支持多种常用音频、视频格式录制和回放 SQLite 轻量级的关系型数据库引擎 SGL 底层 2D 图形渲染引擎 SSL 安全套接层 FreeType 可移植的字体引擎,提供统一的接口来访问多种字体格式文件 -
Android 运行时库
运行时库分为 核心库 (Core Libraries) 与 ART (Android 5.0 之后,Dalvik 虚拟机被 ART 虚拟机取代)。核心库提供了 Java 语音核心库的绝大多数功能,而 Dalvik 是专门为移动设备设计的虚拟机,其允许在一定内存内运行多个虚拟机的实例,进而运行多个 Java 程序。每个 实例 都运行在不同的 Linux 进程中 。
Dalvik 每次运行时,字节码都需要通过即时编译器 (Just In Time, JIT) 转换为机器码,而 ART 在安装应用程序时会进行一次预编译 (Ahead Of Time, AOT) ,先将机器码储存在本地,大大提升了运行效率 。
-
-
硬件抽象层 (HAL)
HAL 位于 操作系统内核与硬件电路之间,是接口层。其目的是将硬件抽象化,保护硬件厂商的知识产权,同时使操作系统具有可移植性。
-
Linux 内核层 (Linux Kernel)
基于 Linux 内核,添加了部分 Android 专用的驱动。系统的安全性、内存管理、进程管理、网络协议栈和驱动模型等都基于该内核。
1.2 Android 系统源码目录
在线阅读网站:http://androidxref.com/
下载源码教程:下载源代码 | Android 开源项目 | Android Open Source Project (google.cn)
Android 源码根目录 | 描述 |
---|---|
art | 全新 ART 运行环境 |
bioic | 系统 C 库 |
bootable | 启动引导相关代码 |
build | 存放系统编译规则 及 generic 等基础开发包配置 |
cts | Android 兼容性测试套件标准 |
dalvik | Dalvik 虚拟机 |
developers | 开发者目录 |
development | 与应用程序开发相关 |
device | 设备相关配置 |
docs | 参考文档目录 |
external | 开源模组相关文件 |
frameworks | 应用程序框架,Android 系统核心部分,由 Java 和 C++ 编写 |
hardware | 主要是硬件抽象层的代码 |
libcore | 核心库相关文件 |
libnativehelper | 动态库,实现 JNI 库的基础 |
out | 编译完成后代码在此目录输出 |
pdk | Plug Development Kit 的缩写,本地开发套件 |
platform_testing | 平台测试 |
prebuilts | X86 和 ARM 架构下预编译的一些资源 |
sdk | SDK 和 模拟器 |
packages | 应用程序包 |
system | 底层文件系统库、应用和组件 |
toolchain | 工具链文件 |
tools | 工具文件 |
makefile | 全局 Makefile 文件 |
1.2.2 应用层部分
应用层位于最上层,开发者开发的应用程序以及系统内置的应用程序都在此层,源码根目录中 packages 目录对应着系统应用层,它的目录结构如下:
packages 目录 | 描述 |
---|---|
apps | 核心应用层 |
experimental | 第三方应用程序 |
inputmethods | 输入法目录 |
providers | 内容提供者目录 |
screensavers | 屏幕保护 |
services | 通信服务 |
wallpapapers | 壁纸 |
1.2.3 应用框架层部分
该层主要实现代码位于 frameworks/base 和 frameworks/av 目录下,其中 frameworks/base 结构如下:
frameworks/base 目录 | 描述 | frameworks/base 目录 | 描述 |
---|---|---|---|
api | 定义 API | cmds | 重要命令:am, app_proce 等 |
core | 核心库 | data | 字体和声音等数据文件 |
docs | 文档 | graphics | 图形图像 |
include | 头文件 | keystore | 数据签名证书 |
libs | 库 | location | 地理位置 |
media | 多媒体 | native | 本地 |
nfc-extras | NFC | obex | 蓝牙传输 |
opengl | 2D/3D API | packages | 设置、TTS、VPN |
sax | xml 解析器 | services | 系统服务 |
telephony | 电话通信管理 | test-runner | 测试工具 |
tests | 测试 | tools | 工具 |
vr | VR | wifi | Wifi |
1.2.4 C/C++ 程序库部分
系统运行库层 (Native) 中 C/C++ 程序库类型繁多,功能强大,位于多个目录中,这里只给出几个常用且比较重要的目录
目录位置 | 描述 |
---|---|
bionic | Google 开发的系统 C 库,以 BSD 许可开源 |
frameworks/av/media | 系统媒体库 |
frameworks/native/opengl | 第三方图形渲染库 |
frameworks/native/services/surfaceflinger | 图形显示库,负责图形的渲染、叠加和绘制 |
external/sqlite | SQLite 的 C++ 实现 |
此外,其它层的代码在跟目录中有给出 。