一文了解AOSP是什么?
AOSP基本信息
基本定义
AOSP是Android Open Source Project的缩写,这是一个由Google维护的完全免费和开放的操作系统开发项目。它是Android系统的核心基础,提供了构建移动操作系统所需的基本组件。
主要特点
- 完全开源:源代码可以自由获取和修改
- 基于Linux内核:使用修改版的Linux内核和其他开源软件
- 主要面向触屏设备:设计优化适配触摸屏设备
AOSP与商业Android的区别
- AOSP是纯净版Android系统,不包含Google服务和专有应用
- 商业版Android包含了额外的Google移动服务(GMS)和各种专有组件
- 大多数手机制造商会基于AOSP开发自己的定制Android版本
开发相关
- 支持多种编程语言:包括Java、C++和C语言
- 提供完整的开发文档和指南
- 定期发布安全更新和新版
最新发展
截至2024年9月,Android 15已经发布到AOSP,带来了许多新特性:
- 改进的应用开发工具
- 增强的排版功能
- 国际化支持优化
- 系统性能提升
使用场景
AOSP主要应用于:
- 定制Android系统开发
- 设备制造商的系统定制
- 第三方ROM开发(如LineageOS)
- 研究和学习Android系统架构
AOSP主要组件
系统层次结构-(从底层到顶层):
A. Linux内核层
- 设备驱动程序
- 电源管理
- 安全系统
- 内存管理
- 进程管理
B. 硬件抽象层(HAL)
- 提供标准接口
- 连接高层框架与底层硬件
- 包含各种硬件模块的接口实现
C. 原生系统库
- libc(C库)
- SQLite数据库
- OpenGL ES(图形库)
- Media Framework(多媒体框架)
- WebKit(浏览器引擎)
D. Android Runtime
- ART(Android Runtime)或Dalvik虚拟机
- 核心库
- 即时编译器
框架层组件:
A. 系统服务(System Services)
- ActivityManager
- WindowManager
- PackageManager
- NotificationManager
- LocationManager
B. Java API框架
- View System(视图系统)
- Resource Manager(资源管理器)
- Content Providers(内容提供者)
- Notification Manager(通知管理器)
应用层组件:
A. 系统应用
- 基础应用程序
- 预装应用
- 核心功能应用
- 模块化组件(Project Mainline):
A. 可更新的系统组件
- 安全模块
- 隐私模块
- 媒体编解码器
- 网络组件
- 开发者API
重要目录结构:
AOSP根目录
├── build/ # 编译系统
├── bionic/ # 精简版C库
├── frameworks/ # 框架层代码
├── system/ # 底层文件系统
├── packages/ # 应用程序包
├── vendor/ # 厂商专有文件
└── device/ # 设备相关配置
安全架构组件:
- SELinux安全策略
- 权限管理系统
- 应用沙箱
- 加密系统
- 验证启动
核心特性:
- 模块化设计
- 开放源代码
- 可定制性强
- 支持多种硬件平台
- 定期安全更新
Android Runtime (ART)
ART是Android操作系统中的应用程序运行时环境,它在Android系统架构中扮演着关键角色。深入了解ART的特性、功能和它与前身Dalvik的区别。
ART的定义和演进:
Android Runtime (ART) 是Android操作系统中用于执行应用程序的运行时环境。它取代了早期版本中使用的Dalvik虚拟机,从Android 5.0 (Lollipop) 开始成为默认的运行时环境。ART负责将应用程序的字节码转换为本地指令,然后由设备的运行时环境执行这些指令。
ART的主要特性:
a) 预先编译(Ahead-of-Time Compilation,AOT):ART在应用安装时就将字节码编译成机器码,而不是在运行时才进行编译。这显著提高了应用的执行速度。
b) 改进的垃圾回收:ART具有更高效的垃圾回收机制,减少了应用暂停时间,提高了性能。
c) 增强的调试支持:ART提供了更好的调试功能,有助于开发者更容易地找出和修复问题。
d) 优化的异常和垃圾回收追踪:这有助于提高应用的性能和稳定性。
ART vs Dalvik:
- 编译方式:Dalvik使用即时编译(JIT),而ART主要使用预先编译(AOT)。
- 性能:由于预先编译,ART通常能提供更好的性能和更快的应用启动速度。
- 存储空间:ART需要更多的存储空间来存储预编译的代码。
- 兼容性:如果应用在ART上运行良好,它通常也能在Dalvik上运行,但反之则不一定成立。
ART的工作原理:
当安装一个应用时,ART会将Dalvik字节码(.dex文件)编译成本地机器码。这个过程叫做"dex2oat",它取代了Dalvik中的"dexopt"过程。在运行时,应用可以直接执行这些本地指令,而不需要额外的解释或编译步骤。
编译机制:
a) AOT(Ahead-of-Time)预先编译:
- 在应用安装时,将DEX文件转换为本地机器码
- 使用dex2oat工具进行编译优化
- 生成的本地代码存储在/data/dalvik-cache目录中
- 减少运行时开销,提高执行效率
b) JIT(Just-in-Time)即时编译:
- 识别频繁执行的代码片段(热点代码)
- 在运行时动态编译这些代码
- 结合配置文件导向优化(PGO)
- 平衡启动时间和性能优化
内存管理:
a) 垃圾回收机制:
- 采用并发垃圾回收器
- 支持内存压缩
- 减少应用暂停时间
- 更高效的内存分配和回收策略
b) 堆内存优化:
- 改进的对象分配
- 更好的内存碎片处理
- 优化的堆内存布局
- 支持大对象空间管理
执行优化:
a) 代码优化:
- 方法内联
- 循环优化
- 死代码消除
- 常量传播和折叠
b) 运行时优化:
- 改进的异常处理
- 优化的线程调度
- 更高效的方法调用
- 更好的类型检查消除
类加载和执行:
a) 类加载过程:
- 验证类文件格式
- 准备类数据结构
- 解析符号引用
- 初始化静态字段
b) 执行流程:
- 直接执行本地机器码
- 减少解释执行开销
- 支持动态链接
- 提供调试和监控能力
- 性能改进:
a) 启动优化:
- 减少应用冷启动时间
- 优化类加载顺序
- 提前加载关键组件
b) 运行时性能:
- 更低的内存占用
- 更好的电池效率
- 更流畅的用户体验
- 更稳定的长期性能
ART的架构:
ART的架构包括以下主要组件:
- 编译器:负责将DEX字节码转换为本地机器码。
- 垃圾回收器:管理内存分配和回收。
- 运行时:执行编译后的代码并提供运行时支持。
- 类加载器:负责加载应用所需的类。
ART的未来发展:
Google持续优化ART,以提供更好的性能、更低的内存使用和更长的电池寿命。未来的版本可能会引入更多的优化技术,如更智能的编译策略和更高效的内存管理。
System Apps(系统应用层)
核心系统应用
a) 设置应用(Settings)
- 提供系统级配置界面
- 管理设备各项功能开关
- 控制应用权限和通知
- 处理网络、显示、声音等设置
- 提供系统更新和安全选项
b) 包安装器(Package Installer)
- 处理应用的安装、更新和卸载
- 验证应用签名和权限
- 管理应用版本和兼容性
- 执行安装前的安全检查
c) 系统界面(SystemUI)
- 管理状态栏和导航栏
- 处理系统通知和快速设置
- 提供系统级UI交互
- 显示系统状态信息
基础功能应用
a) 电话应用
- 管理通话功能
- 维护通话记录
- 提供紧急呼叫服务
- 支持通讯录集成
b) 短信应用
- 处理短信和彩信
- 管理消息会话
- 提供垃圾信息过滤
- 支持消息备份恢复
c) 相机应用
- 提供拍照和录像功能
- 支持基本图像处理
- 管理相机参数设置
- 集成AR和AI功能
用户服务应用
a) 联系人
- 管理通讯录信息
- 支持多账户同步
- 提供联系人分组
- 处理联系人导入导出
b) 日历
- 管理日程和提醒
- 支持多账户日历同步
- 提供农历和节假日信息
- 处理重复事件逻辑
c) 时钟
- 提供闹钟功能
- 支持世界时钟显示
- 包含计时器和秒表
- 管理系统时间设置
- 系统工具
a) 文件管理器
- 浏览文件系统
- 管理存储空间
- 支持文件操作
- 提供文件分享功能
b) 下载管理器
- 处理系统下载任务
- 支持断点续传
- 管理下载队列
- 监控下载进度和状态
c) 备份还原
- 系统设置备份
- 应用数据备份
- 用户数据迁移
- 系统恢复功能
重要特点
a) 系统权限
- 具有特殊系统权限
- 可访问底层API
- 运行在系统进程
- 享有高优先级
b) 预装特性
- 出厂预装
- 难以卸载
- 自动更新
- 系统级整合
c) 安全机制
- 系统签名保护
- 特权操作控制
- 安全存储访问
- 隐私数据保护
Java API Framework(应用框架层)
视图系统(View System)
- 提供UI构建的基础组件
- View:所有UI组件的基类
- ViewGroup:容器类,可包含其他View
- Layout:各种布局管理器
- Widget:预制UI控件
- 处理用户交互
- 触摸事件处理
- 手势识别
- 动画效果
- 视图切换
资源管理器(Resource Manager)
- 管理应用资源
- 布局文件(XML)
- 字符串资源
- 图片和多媒体
- 主题和样式
- 支持特性
- 国际化(多语言)
- 屏幕适配
- 主题切换
- 运行时资源访问
活动管理器(Activity Manager)
- 管理应用组件生命周期
- onCreate():创建初始化
- onStart():可见未交互
- onResume():可见可交互
- onPause():失去焦点
- onStop():不可见
- onDestroy():销毁
- 处理应用导航和任务
- 任务栈管理
- Intent系统
- 进程管理
- 应用切换
窗口管理器(Window Manager)
- 窗口类型管理
- 应用窗口
- 系统窗口
- 子窗口
- 窗口控制功能
- 布局参数设置
- Z轴排序
- 焦点管理
- 输入事件分发
内容提供者(Content Provider)
- 数据操作接口
- CRUD操作
- 跨应用数据共享
- 权限控制
- URI寻址
- 系统内容提供者
- 联系人数据
- 日历数据
- 媒体库
- 通话记录
包管理器(Package Manager)
- 应用程序管理
- 安装和卸载
- 权限管理
- 版本控制
- 签名验证
- 应用信息查询
- 包信息
- 组件信息
- 权限信息
- 服务信息
通知管理器(Notification Manager)
- 通知类型支持
- 标准通知
- 进度通知
- 自定义通知
- 前台服务通知
- 通知功能特性
- 通知渠道
- 重要性级别
- 用户交互
- 自定义样式
电话管理器(Telephony Manager)
- 通讯功能管理
- 通话控制
- 短信处理
- SIM卡管理
- 网络状态监控
- 设备信息获取
- 设备识别码
- 运营商信息
- 信号强度
- 通话状态
位置管理器(Location Manager)
- 定位方式支持
- GPS定位
- 网络定位
- 被动定位
- 地理编码
- 位置服务功能
- 位置更新
- 地理围栏
- 位置权限
- 省电模式
这些框架组件共同构成了Android应用开发的基础,为开发者提供了丰富的API接口。每个组件都专注于特定的功能领域,通过良好的封装和抽象,使得应用开发更加高效和规范。
Native Libraries(原生库层)
概述
- Native Libraries 是 Android 系统中的重要组成部分,主要由 C/C++ 编写
- 它们为上层的 Java API 框架提供必要的底层支持
- 可以直接与 Linux 内核进行交互,提供高效的系统服务
主要组件
a) Surface Manager(表面管理器)
- 负责管理显示子系统
- 处理多个应用窗口的显示合成
- 确保界面显示的流畅性
b) OpenGL ES
- 提供 2D 和 3D 图形处理能力
- 支持硬件加速的图形处理
- 为游戏和图形应用提供强大支持
c) Media Framework(媒体框架)
- 处理各种音频和视频格式
- 提供媒体编解码功能
- 支持图片处理和转换
d) SQLite
- 轻量级关系型数据库
- 为应用提供结构化数据存储
- 支持复杂的数据查询和管理
e) WebKit
- 提供网页浏览核心引擎
- 支持 HTML 内容的解析和渲染
- 为浏览器和 WebView 提供支持
f) SSL
- 提供安全通信支持
- 实现数据加密和解密
- 保护网络传输安全
g) libc
- 标准 C 库实现
- 提供基本的系统调用接口
- 负责内存管理等基础功能
特点
a) 高性能
- 可以直接访问硬件资源
- 执行效率高
- 适合处理计算密集型任务
b) 跨平台
- 通过 JNI 接口与 Java 层交互
- 支持使用 NDK 进行开发
- 具有良好的可移植性
c) 安全性
- 实现系统级的权限控制
- 提供内存保护机制
- 确保进程间的隔离
Native Libraries 层是 Android 系统性能和功能的重要保障,它通过底层的 C/C++ 实现提供了高效的系统服务,同时通过良好的接口设计,使得上层应用能够方便地使用这些功能。
Hardware Abstraction Layer(硬件抽象层)
基本概念
a) 定义
- HAL 是 Android 系统中的一个标准接口层
- 负责封装底层硬件驱动程序的具体实现
- 作为硬件和高层软件之间的桥梁
b) 作用
- 有效隔离不同硬件设备的差异性
- 为上层提供统一的硬件访问接口
- 简化硬件驱动程序的开发过程
主要模块
a) 显示模块
- 负责设备屏幕的显示功能
- 处理图形渲染相关操作
- 控制显示分辨率和刷新率
b) 音频模块
- 管理声音的播放和录制
- 处理音频数据的采集
- 实现各种音效处理功能
c) 相机模块
- 控制图像的采集过程
- 管理视频的录制功能
- 提供相机参数的调节接口
d) 传感器模块
- 处理加速度传感器数据
- 管理陀螺仪信息
- 控制地磁感应器
- 处理环境光感应等功能
e) 无线模块
- 管理 WiFi 连接和控制
- 处理蓝牙通信功能
- 控制 NFC 近场通信
f) 存储模块
- 管理设备内部存储
- 控制外部存储访问
- 提供存储空间管理
实现机制
a) 模块化设计
- 采用独立的模块结构
- 实现可插拔的架构设计
- 保持模块间的松耦合
b) 接口规范
- 定义标准的 HAL 接口
- 确保版本间的兼容性
- 维护接口的稳定性
c) 驱动适配
- 对接具体的硬件驱动
- 实现设备适配功能
- 保证硬件兼容性
特点优势
a) 跨平台特性
- 实现硬件无关性
- 提供设备兼容能力
- 支持平台间的移植
b) 可维护性
- 便于模块化管理
- 支持独立更新维护
- 实现错误隔离机制
c) 安全性
- 实现严格的权限控制
- 限制直接硬件访问
- 提供系统保护机制
HAL 层在 Android 系统中扮演着至关重要的角色,它不仅使得 Android 能够运行在各种不同的硬件平台上,还为硬件厂商提供了标准的开发接口。通过 HAL 的抽象,上层应用开发者可以专注于功能实现,而不必过多关注底层硬件的具体细节。同时,HAL 的模块化设计也使得系统的维护和升级变得更加容易和灵活。
Linux Kernel(Linux内核层)
核心组件
a) 进程管理
- 负责进程的创建、调度和终止
- 管理进程间通信(IPC)机制
- 处理线程的创建和管理
- 实现进程同步和互斥机制
b) 内存管理
- 管理物理内存的分配和回收
- 实现虚拟内存机制
- 处理页面置换算法
- 管理内存映射和共享内存
c) 文件系统
- 提供 VFS(虚拟文件系统)抽象层
- 实现各种文件系统操作接口
- 管理文件系统缓存
- 处理磁盘存储管理
d) 网络协议栈
- 实现 TCP/IP 协议族
- 管理网络设备驱动程序
- 提供网络过滤功能
- 处理网络数据包的收发
e) 设备驱动
- 管理字符设备(如终端、串口)
- 控制块设备(如硬盘、USB存储)
- 处理网络设备
- 提供统一的设备驱动模型
系统特性
a) 多任务支持
- 实现抢占式调度机制
- 支持实时任务调度
- 管理进程优先级
- 实现系统负载均衡
b) 内存保护
- 实现地址空间隔离
- 控制内存访问权限
- 提供内存屏障机制
- 处理缺页异常
c) 安全机制
- 管理用户权限和访问控制
- 集成 SELinux 安全框架
- 控制系统调用访问
- 实现资源访问限制
内核功能
a) 系统调用
- 提供进程控制接口
- 实现文件操作功能
- 支持设备控制操作
- 维护系统信息
b) 中断处理
- 处理硬件中断请求
- 管理软件中断
- 维护中断向量表
- 执行中断处理程序
c) 同步机制
- 提供信号量机制
- 实现互斥锁
- 支持自旋锁
- 提供读写锁机制
扩展特性
a) 模块化支持
- 支持动态加载内核模块
- 管理模块间依赖关系
- 实现设备热插拔
- 控制模块版本兼容性
b) 调试功能
- 提供内核调试工具
- 支持性能分析功能
- 实现系统日志机制
- 提供故障诊断能力
c) 虚拟化支持
- 集成 KVM 虚拟化
- 提供容器技术支持
- 支持硬件虚拟化
- 实现资源隔离机制
Linux 内核是整个操作系统的核心,它直接管理计算机的硬件资源,为上层应用程序提供了稳定、高效的运行环境。通过模块化设计和丰富的功能特性,Linux 内核能够适应各种不同的应用场景,从嵌入式设备到大型服务器都可以很好地支持。同时,其开源特性也使得它能够持续改进和发展,保持技术的先进性和创新性。