一文了解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)
ActivityManagerWindowManagerPackageManagerNotificationManagerLocationManager
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:容器类,可包含其他ViewLayout:各种布局管理器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 内核能够适应各种不同的应用场景,从嵌入式设备到大型服务器都可以很好地支持。同时,其开源特性也使得它能够持续改进和发展,保持技术的先进性和创新性。