我认为学习任何一个技术,应该先统筹了解各个模块的大致功能,本课主要是来梳理架构与一些源码记录。
1 Android系统架构
目前有5层,从上到下是应用层,应用框架层,系统运行库层,硬件抽象层,内科层。
1.1 应用层
系统内置的一些应用以及一些非系统的应用,都属于这一层,比如内置的相机以及第三方相机(轻颜相机)。一般都是用Java或者Kotlin开发。
1.2 应用框架层
该层也是由java编写的,是为了应用层开发而提供的接口层,一般叫做 java Framework层 ,这一层提供了一些组件,如下所示。
名称 | 功能描述 |
---|
Activity Manager(活动管理器) | 管理应用程序的生命周期,以及导航,回退等功能。 |
Location Manager(位置管理器) | 提供地理位置与定位功能。 |
Package Manager(包管理器) | 管理所有已经安装的APP。 |
Notification Manager(通知管理器) | 管理消息的组件,比如通知栏提示信息。 |
Resource Manager(资源管理器) | 提供静态资源,图片,字符串,颜色等。 |
Telephone Manager(电话管理器) | 你的电话,短信等功能。 |
Window Manager(窗口管理器) | 管理所有开启的窗口程序。 |
Content Provider(内容提供者) | 在不同APP之间共享数据。 |
View System(视图系统) | 构建APP UI的基本组件。 |
1.3 系统运行库层
这一部分也叫做Native层,大体分为两部分,C/C++程序库与Android运行库。下面将分别列一些常见的库。
1.3.1 C/C++程序库
名称 | 功能 |
---|
OpenGL ES | 3D绘图函数库 |
Libc | 为嵌入式Linux设备定制的标准C函数库 |
Media Framework | 多媒体库,各种格式的音频,视频等 |
SQLite | 轻关系型数据库 |
SGL | 底层2D图形渲染引擎 |
SSL | 安全套接字层,为网络提供安全等 |
FreeType | 字体引擎,提供了统一的接口访问多种字体文件 |
1.3.2 Android运行时库
运行库分为 核心库 与 ART(android5之前是Dalvik)。
核心库提供了Java语言核心库的大多数功能。
ART是专门为移动设别定制的虚拟机(特殊的JVM),每个APP启动后都有一个ART,这样可以避免一个应用崩溃不至于整个系统崩溃。之前的Dalvik启动APP的时候都要编译成机器码,在ART中,应用安装的时候就会进行一次编译,并且保存到本地,提高了运行效率。
1.4 硬件抽象层
HAL 层,在硬件与软件之间,提供了一个接口来操作硬件,隐藏了真正的硬件接口,这样既保护了版权,又提供了多平台可移植性。
1.5 内核层
kernel层,android的核心服务都基于Linux内核,并添加了一些Android的专用驱动。比如安全性,内存管理,网络协议等等。
2 Android系统源码目录
本章主要介绍每个目录的大概作用,具体如各表。
2.1 整体结构
源码根目录 | 描述 |
---|
art | ART运行环境 |
bilnic | 系统C库 |
bootable | 启动引导相关代码 |
build | 系统编译规则与基础开发包配置 |
cts | 兼容性测试套件标准 |
dalvik | Dalvik虚拟机 |
developers | 开发者目录 |
development | 与APP开发相关 |
device | 设备相关配置 |
docs | 参考文档目录 |
external | 开源模组文件 |
Frameworks | 应用程序框架,分了两部分,1.3 章节有讲 |
hardware | 硬件抽象层代码 |
libcore | 核心库相关文件 |
libnativehelper | 动态库,实现JNI库(java native)基础 |
out | 存放编译后的代码 |
pdk | 本地开发套件 |
platform_testing | 平台测试 |
prebuilts | X86和ARM架构下预编译的一些资源 |
sdk | sdk和模拟器 |
packages | 应用程序包 |
system | 底层文件系统库,应用与组件 |
toolchain | 工具链文件 |
tools | 工具文件 |
makefile | 全局文件,定义编译规则 |
接下来,我们分析上面的packages包
2.2 应用层部分
不过多赘述了,直接上表格
packages目录 | 描述 |
---|
apps | 核心应用程序 |
experimental | 第三方应用程序 |
inputmethods | 输入法目录 |
providers | 内容提供者目录 |
screensavers | 屏幕保护 |
services | 通信服务 |
wallpapers | 壁纸 |
这个包就对应的系统的应用层。
2.3 应用框架层部分
这是个核心部分,一要向上提供接口,另一方面与下层衔接。这一层的代码主要在framework/base和framework/av,其中base目录如下所示。
base目录 | 描述 | 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 | 系统服务 |
telephone | 电话通信管理 | test-runnner | 测试工具相关 |
tests | 测试相关 | tools | 工具 |
vr | 与VR相关 | wifi | 无线网络 |
2.4 C/C++程序库部分
这个里面的文件很多,并且并不都在一个目录中,下面列出一些重要的目录。
目录位置 | 描述 |
---|
bionic | 谷歌开发的系统C库,以BSD形式开源 |
framework/av/media | 系统媒体库 |
framework/native/opengl | 第三方图形渲染库 |
framework/native/services/surfacefinger | 图形显示库,负责图形渲染,叠加,绘制等。 |
external/sqlite | 轻量级关系型数据库 |
Android运行时库的代码在art目录中,硬件抽象层的代码在hardware文件中,这两部分一般是手机厂商改动最大的部分,根据采用的硬件不同,会有不同的实现。
3 总结
本章算是基础中的额基础,希望本文章在你日后学习中能够联想到一些东西,融会贯通!