04-05-00 《深入理解Android内核设计思想》读书总结
04-05-00 《深入理解Android内核设计思想》读书总结(更新至 Android 16)
全书概览
《深入理解Android内核设计思想》是一本深入剖析Android系统底层架构和内核机制的专业技术书籍。本书从系统架构、启动流程、输入输出、多媒体到电源管理,全方位讲解Android系统的核心设计思想和实现原理。与应用层开发不同,本书聚焦于Framework层和HAL层,帮助读者理解Android系统是如何运作的。
Android 16 更新说明:本文档已更新至 Android 16(API 36,代号 “Baklava”),涵盖 GKI 2.0、AIDL HAL 全面替代 HIDL、Bazel 构建系统、DRM/KMS 显示标准、Linux 6.6 LTS 内核参考等最新架构变化。
全书结构:
- 基础篇(1-4章):系统概述、源码编译、内核移植、启动过程
- 核心子系统篇(5-8章):输入系统、显示系统、音频系统、传感器系统
- 系统服务篇(9-10章):电源管理、通信系统
核心价值:
- 理解Android系统架构和设计原理
- 掌握Android各子系统的工作机制
- 提升系统级问题排查和解决能力
- 为Android Framework开发和ROM定制打下基础
适合读者:
- Android高级/资深工程师
- Framework开发者
- ROM定制工程师
- 对Android底层原理感兴趣的开发者
第一部分:Android系统基础
1. Android系统概述
Android系统架构(5层):
应用层(Applications)
↓
应用框架层(Application Framework)
↓
系统运行库层(Libraries + Android Runtime)
↓
硬件抽象层(HAL - Hardware Abstraction Layer)
↓
Linux内核层(Linux Kernel)
各层详解:
1. Linux内核层:
- 基于Linux内核(Android最底层),Android 16 参考 Linux 6.6 LTS 内核
- 提供核心系统服务:进程管理、内存管理、设备驱动、网络协议栈
- 驱动程序:Display Driver、Camera Driver、Audio Driver、Binder Driver等
- Android对Linux内核的增强:
- Binder IPC机制
- Low Memory Killer(低内存杀手)→ Android 16 演进为 PSI(Pressure Stall Information)+ LMKD
- Ashmem(匿名共享内存)→ 已改用 memfd
- Alarm Driver(定时器驱动)
- Logger(日志系统)
- Android 16 重要变化 — GKI 2.0(Generic Kernel Image):
- GKI 2.0 已全面成熟,内核与 Android 版本完全解耦
- KMI(Kernel Module Interface)版本化:
v5.10、v5.15、v6.1、v6.6 - 通用内核镜像(GKI)由 Google 统一构建,厂商只需提供 out-of-tree 模块
- 内核升级不再绑定 Android 版本,OEM 可独立更新内核补丁
- KMI 符号列表(kmi_symbol_list)确保 ABI 兼容性
2. 硬件抽象层(HAL):
- 将硬件驱动模块化,隔离Linux内核
- 采用用户空间驱动而非内核空间驱动
- 优势:规避GPL协议、提高系统稳定性、便于移植
- Android 16 重要变化 — AIDL HAL 全面取代 HIDL:
- 所有子系统 HAL 已全面迁移至 AIDL(Android Interface Definition Language)
- HIDL 已被废弃,不再支持新设备使用
- AIDL HAL 优势:更简洁的接口定义、原生支持版本管理、与 Java/Kotlin 生态统一
- 关键 AIDL HAL:Audio HAL V4、Sensor HAL、Camera HAL、Graphics HAL、Thermal HAL、Health HAL
- 主要HAL模块:Audio HAL(AIDL V4)、Camera HAL(AIDL)、Sensors HAL(AIDL)、Graphics HAL(AIDL)
3. 系统运行库层:
- 原生C/C++库:libc(bionic)、SQLite、OpenGL ES、Vulkan、Media Framework
- Android Runtime(ART):
- 取代Dalvik虚拟机(Android 5.0+)
- 混合编译模式:AOT(Ahead-Of-Time)+ JIT(Just-In-Time)+ Profile-Guided Optimization
- Android 16 进一步优化:增量编译、后台 Dex2oat、启动速度提升
- 优势:启动更快、运行更流畅、内存占用更少
- APEX(Android Pony EXpress)模块:
- Android 16 中 APEX 模块已达 30+ 个核心模块可独立更新
- 包括 ART、Network Stack、Media Provider、Conscrypt 等
- 通过 Mainline 项目实现系统模块独立于系统升级
4. 应用框架层:
- 提供开发Android应用所需的API
- 核心服务:
- ActivityManagerService(AMS):Activity生命周期管理
- PackageManagerService(PMS):应用安装、卸载、查询
- WindowManagerService(WMS):窗口管理
- InputManagerService(IMS):输入事件分发
- PowerManagerService:电源管理
5. 应用层:
- 所有用户安装的应用
- 系统自带应用:Phone、Contacts、Messaging、Settings
核心设计思想:
- 分层架构:各层职责清晰,便于维护和扩展
- HAL层:硬件抽象,提高可移植性
- Binder IPC:高效的进程间通信机制
- 组件化:四大组件(Activity、Service、BroadcastReceiver、ContentProvider)
2. Android源码下载及编译
源码规模(Android 16):
- AOSP 代码总量:约 120M+ 行代码
- 仓库数量:约 1700+ 个 Git 仓库
- 下载大小:完整源码约 100+ GB
源码目录结构:
android/
├── art/ # ART虚拟机
├── bionic/ # Android C库(替代glibc)
├── bootable/ # 启动引导相关
├── build/ # 编译系统
│ ├── make/ # Make构建系统(传统)
│ └── soong/ # Soong构建系统(Android.bp)
├── development/ # 开发工具
├── device/ # 设备相关配置
├── external/ # 第三方开源项目
├── frameworks/ # 核心框架代码
│ ├── base/ # 基础框架(重要!)
│ ├── native/ # Native层框架
│ ├── av/ # 音视频框架
│ └── hw/interfaces/ # 硬件接口定义(AIDL HAL)
├── hardware/ # HAL层实现
│ ├── interfaces/ # AIDL HAL 接口定义
│ └── google/ # Google Pixel 相关 HAL
├── kernel/ # Linux内核(GKI)
├── packages/ # 应用程序
├── system/ # 系统核心
│ ├── core/ # init、adbd、sh等
│ ├── vold/ # 存储管理
│ └── libhidl/ # HIDL 运行时(兼容层)
├── vendor/ # 厂商定制
└── external/bazel/ # Bazel 构建系统(新增并存)
编译系统演进:
- Make(传统):Android.mk,基于GNU Make,逐步淘汰中
- Soong(主力):Android.bp,基于 Ninja,当前主要构建系统
- Bazel(新增并存):Android 16 引入 Bazel 构建系统,与 Soong 并存
- 优势:增量编译更快、更好的缓存支持、与 Google 内部构建统一
- 当前处于过渡阶段,Soong + Bazel 双轨并行
编译流程:
- 设置环境:source build/envsetup.sh
- 选择目标:lunch(选择编译目标)
- 编译:m -j8(8线程并行编译,Soong)或 bazel build(Bazel)
- 生成产物:system.img、userdata.img、boot.img、vendor.img
模块编译:
- Soong:m <module_name>、mma(编译当前目录)、mmma(编译指定目录)
- Bazel:bazel build //path/to:module
3. Android内核及系统移植
Linux内核配置(Android 16 / GKI 2.0):
- 内核参考版本:Linux 6.6 LTS
- KMI 版本化:
v5.10、v5.15、v6.1、v6.6,每个版本对应独立 KMI - 通用内核镜像由 Google 统一构建,OEM 无需重新编译内核主体
- 厂商只需提供 out-of-tree 内核模块(通过 KMI 符号列表保证兼容)
- Android内核必备模块:
- Binder IPC
- memfd(替代 Ashmem)
- PSI + LMKD(替代 Low Memory Killer)
- Alarm Driver
- Logger
- KMI 兼容性验证工具:abi-tool
系统移植关键步骤:
- 内核适配:基于 GKI 2.0 通用内核,仅需适配 out-of-tree 模块
- Bootloader移植:U-Boot配置(支持 A/B 分区、AVB 2.0)
- HAL层适配:使用 AIDL 接口实现硬件抽象(不再使用 HIDL)
- 驱动开发:Display(DRM/KMS)、Touch、Camera、Audio等驱动
- 系统调试:串口调试、logcat日志分析
Bootloader启动流程:
- BootROM:固化在芯片中,加载Bootloader到RAM
- Bootloader(U-Boot):初始化硬件、加载Linux内核
- Kernel:初始化系统、挂载文件系统、启动init进程
4. Android启动过程详解
完整启动流程:
BootROM → Bootloader → Linux Kernel → init进程 → Zygote → SystemServer → 系统服务 → Launcher
1. init进程(进程1):
- 解析init.rc配置文件
- 创建和挂载系统目录(/dev、/proc、/sys)
- 启动属性服务(Property Service)
- 启动Zygote进程
- Android 16 变化:两阶段 init(first stage 挂载文件系统,second stage 启动服务)
2. Zygote进程(孵化器):
- 预加载常用类和资源
- 启动虚拟机(ART)
- 创建Socket服务端,等待AMS请求fork新进程
- fork SystemServer进程
- 进入循环,等待创建新应用进程
- Android 16 优化:后台 Dex2oat 预编译、减少预加载项以加快启动
3. SystemServer进程:
- 启动所有系统服务(80+个,Android 16 服务数量增加)
- 分三批启动:
- 引导服务(Bootstrap Services):AMS、PMS、PowerMS等
- 核心服务(Core Services):BatteryService、UsageStatsService等
- 其他服务(Other Services):WMS、IMS、NetworkMS等
- 调用各服务的systemReady()方法
4. Launcher启动:
- SystemServer启动完成后,AMS调用systemReady()
- 发送HOME Intent,启动Launcher
- Launcher加载应用列表,显示桌面
关键理解:
- Zygote是所有应用进程的父进程
- fork机制:Zygote通过fork创建新进程,共享预加载的类和资源(Copy-On-Write)
- SystemServer:承载所有系统服务的进程
- 启动时间优化:减少预加载内容、并行启动服务、后台 Dex2oat
第二部分:核心子系统
5. Android输入系统
输入系统架构(4层):
应用层(View)
↓
Framework层(InputManagerService)
↓
Native层(InputReader + InputDispatcher)
↓
内核层(Input Driver)
核心组件:
1. EventHub:
- 监听/dev/input目录下的所有输入设备
- 使用epoll机制监听输入事件
- 读取原始输入事件(struct input_event)
2. InputReader:
- 从EventHub读取原始事件
- 解析和转换事件(根据设备类型)
- 生成NotifyArgs对象(KeyArgs、MotionArgs等)
- 将事件放入InputDispatcher队列
3. InputDispatcher:
- 从队列中取出事件
- 查找目标Window(通过WMS)
- 分发事件到目标应用
- 处理ANR(5秒无响应)
4. InputChannel:
- 双向通信管道(基于Socket)
- Server端在InputDispatcher,Client端在ViewRootImpl
- 传递输入事件和反馈消息
事件分发流程:
输入设备 → EventHub → InputReader → InputDispatcher → InputChannel → ViewRootImpl → View
关键理解:
- 输入事件先到Native层(InputReader/InputDispatcher),再到Java层
- ANR检测:InputDispatcher等待5秒未收到处理完成的回复
- 多点触控:MotionEvent.getPointerCount()获取触点数量
- 触摸屏校准:通过/sys/class/input下的节点调整
Android 16 变化:
- InputReader/InputDispatcher 核心架构保持不变
- 手势导航优化:全面屏手势的输入事件处理增强
- 触控采样率提升:高刷屏设备支持更高触控采样率(120Hz+)
性能优化:
- 减少事件处理时间(避免主线程耗时操作)
- 合理使用onInterceptTouchEvent(避免不必要的拦截判断)
- 使用ViewConfiguration获取系统默认的触摸参数
6. Android显示系统
显示系统架构(5层):
应用层(Canvas/View)
↓
Framework层(WindowManagerService)
↓
Native层(SurfaceFlinger)
↓
HAL层(Graphics HAL / Composer HAL V4 AIDL)
↓
内核层(Display Driver / DRM/KMS)
核心组件:
1. Surface:
- 画布(Canvas)的底层实现
- 包含一个GraphicBuffer队列(双缓冲/三缓冲)
- 应用在Surface上绘制,SurfaceFlinger负责合成显示
2. SurfaceFlinger:
- 系统级的合成器(Compositor)
- 接收所有Surface的GraphicBuffer
- 通过OpenGL ES、Vulkan或HWComposer合成
- 输出到 DRM/KMS 显示(Framebuffer 已完全移除)
3. HWComposer / HWC3:
- HWC3:Android 16 中的新一代硬件合成器接口
- 采用 AIDL HAL 接口定义
- 支持更好的 GPU/Display 协同
- 智能分配合成层到 GPU 或 Display 硬件
- 利用硬件加速合成图层
- 减轻GPU负担,提升性能
4. Vsync(垂直同步):
- 协调SurfaceFlinger的合成和Display的刷新
- 16.6ms一次(60Hz屏幕)
- Android 16 变化:
- BLAST-Sync:替代旧版 BufferQueue 同步机制,减少帧延迟
- VRR(Variable Refresh Rate,可变刷新率):支持 1Hz-120Hz 动态调节
- LTPO(Low Temperature Polycrystalline Oxide):面板级自适应刷新率技术
- Choreographer:应用层的Vsync信号接收器,支持多刷新率适配
Android 16 显示系统重大变化:
- DRM/KMS 成为唯一显示标准:Framebuffer 驱动已完全从 Android 内核中移除
- 所有显示驱动必须基于 DRM/KMS(Direct Rendering Manager / Kernel Mode Setting)
- 显示设备树节点、DRM 桥接、Panel 驱动均遵循 DRM 框架
渲染流程:
View.invalidate() → ViewRootImpl.scheduleTraversals()
→ Choreographer.postCallback() → 下一个Vsync信号
→ performTraversals() → draw() → GPU渲染(Vulkan/OpenGL ES)
→ SurfaceFlinger合成(HWC3)→ DRM/KMS → Display显示
关键理解:
- 双缓冲/三缓冲:避免画面撕裂
- Vsync机制:保证流畅渲染(60fps / 90fps / 120fps 自适应)
- 硬件加速:View.setLayerType(LAYER_TYPE_HARDWARE)
- 过度绘制:同一像素被绘制多次(通过开发者选项查看)
性能优化:
- 减少布局层级(使用ConstraintLayout)
- 避免过度绘制
- 使用硬件加速
- 减少透明度计算(透明View导致多层绘制)
- 使用TextureView代替SurfaceView(需要动画时)
- Android 16:利用 BLAST-Sync 减少同步等待时间,利用 VRR 降低功耗
7. Android音频系统
音频系统架构(5层):
应用层(MediaPlayer/AudioTrack/AAudio)
↓
Framework层(AudioService/AudioManager)
↓
Native层(AudioFlinger/AudioPolicyService)
↓
HAL层(Audio HAL V4 — AIDL 接口)
↓
内核层(ALSA Driver)
核心组件:
1. AudioFlinger:
- 音频系统的核心服务
- 管理音频输出和输入
- 混音(Mixing):合并多个音频流
- 音效处理(Effect)
2. AudioPolicyService:
- 音频策略管理
- 路由选择(扬声器/耳机/蓝牙)
- 音量控制
- 音频焦点管理(多应用同时播放时的优先级)
3. AudioTrack:
- 应用层播放音频的接口
- 支持PCM流播放
- 两种模式:MODE_STREAM(流式)、MODE_STATIC(静态)
4. AAudio(Android 8.0+ 引入,Android 16 成熟):
- 高性能低延迟音频API
- MMAP(Memory-Mapped)模式:直接映射内核缓冲区,极致低延迟
- 适合实时音频处理、音乐制作、游戏音效
5. AudioRecord:
- 应用层录音的接口
- 从麦克风采集音频数据
音频播放流程:
MediaPlayer/AudioTrack/AAudio → AudioFlinger → Audio HAL V4 (AIDL) → ALSA Driver → 硬件播放
关键理解:
- AudioFlinger运行在单独进程(system_server)
- 音频焦点(AudioFocus):避免多个应用同时播放导致混乱
- 采样率:44100Hz(CD音质)、48000Hz(更高质量)
- 位深度:16-bit(标准)、24-bit/32-bit(高保真)
- 声道:单声道、双声道、多声道
Android 16 音频重大变化:
- Audio HAL V4(AIDL):全面取代 HIDL Audio HAL V7
- AIDL 接口定义更简洁,版本管理更清晰
- 原生支持 Java/Kotlin 层直接调用
- Spatial Audio(空间音频):支持头部追踪的沉浸式音频体验
- 基于 HRTF(Head-Related Transfer Function)算法
- 与 AR/VR 场景深度整合
- LE Audio(低功耗蓝牙音频):替代经典蓝牙音频
- LC3 编解码器:更低功耗、更高音质
- Audio Sharing:多设备共享音频流
- 广播音频(Broadcast Audio)支持
- AAudio MMAP 模式:生产级低延迟通道
性能优化:
- 使用 AAudio MMAP 代替 AudioTrack(极致低延迟场景)
- 使用AudioTrack代替MediaPlayer(低延迟场景)
- 合理设置缓冲区大小(AudioTrack.getMinBufferSize / AAudio 自动管理)
- 避免在UI线程进行音频数据处理
- Android 16:优先使用 AAudio MMAP 模式,延迟可低至 ~5ms
8. Android传感器系统
传感器系统架构(4层):
应用层(SensorManager/SensorEventListener)
↓
Framework层(SensorService)
↓
HAL层(Sensors HAL — AIDL 接口)
↓
内核层(Sensor Driver)
传感器分类:
1. 运动传感器:
- 加速度传感器(Accelerometer):检测设备加速度
- 陀螺仪(Gyroscope):检测设备旋转
- 重力传感器(Gravity):检测重力方向
- 线性加速度(Linear Acceleration):去除重力的加速度
- Android 16 新增:显著运动检测(Significant Motion)优化
2. 位置传感器:
- 磁力传感器(Magnetic Field):检测地磁场
- 方向传感器(Orientation):检测设备方向(已废弃)
- 旋转矢量(Rotation Vector):设备的旋转状态
3. 环境传感器:
- 光线传感器(Light):环境光强度
- 气压传感器(Pressure):大气压力
- 温度传感器(Temperature):环境温度
- 湿度传感器(Humidity):空气湿度
- Android 16 新增:HEV(高能蓝光)传感器、皮肤温度传感器
4. 接近传感器:
- 接近传感器(Proximity):检测物体接近(通话时关闭屏幕)
核心API:
// 获取SensorManager
SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
// 获取传感器
Sensor accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
// 注册监听
sensorManager.registerListener(listener, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
// SensorEventListener
@Override
public void onSensorChanged(SensorEvent event) {
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
// 处理传感器数据
}
关键理解:
- 传感器数据采集频率:FASTEST(最快)、GAME(游戏)、NORMAL(正常)、UI(界面)
- 坐标系:X轴向右、Y轴向上、Z轴垂直屏幕向外
- 传感器融合:结合多个传感器数据获得更准确的结果(如加速度+陀螺仪→旋转矢量)
- 能耗:传感器持续工作会消耗电量,用完及时unregisterListener
Android 16 传感器变化:
- Sensor HAL 全面采用 AIDL 接口,取代旧版 HAL
- Thermal HAL(AIDL):与传感器系统协同工作,管理设备热状态
- 监控 SoC 温度、电池温度、皮肤温度
- 动态降频/限制性能以保护硬件
- 新传感器类型支持(HEV、皮肤温度等)
实践应用:
- 摇一摇功能:加速度传感器检测设备晃动
- 屏幕旋转:加速度+磁力传感器计算设备方向
- 计步器:加速度传感器检测步态特征
- AR应用:陀螺仪+加速度+磁力传感器实现精确定位
第三部分:系统服务
9. Android电源管理
电源管理架构(4层):
应用层(PowerManager)
↓
Framework层(PowerManagerService)
↓
HAL层(Power HAL / Thermal HAL — AIDL 接口)
↓
内核层(Power Driver/Wakelock)
核心概念:
1. Wakelock(唤醒锁):
- 防止系统休眠
- 类型:
- PARTIAL_WAKE_LOCK:CPU保持运行,屏幕/键盘可休眠
- SCREEN_DIM_WAKE_LOCK:屏幕变暗,键盘可休眠(已废弃)
- SCREEN_BRIGHT_WAKE_LOCK:屏幕高亮,键盘可休眠(已废弃)
- FULL_WAKE_LOCK:屏幕高亮,键盘高亮(已废弃)
- PROXIMITY_SCREEN_OFF_WAKE_LOCK:接近传感器触发时关屏
2. 电源状态:
- Awake(唤醒):系统正常运行
- Screen Off(屏幕关闭):屏幕关闭但系统运行
- Sleep(休眠):CPU进入低功耗状态
- Deep Sleep(深度休眠):更深层的休眠状态
3. Doze模式(Android 6.0+,Android 16 持续优化):
- 设备静止、屏幕关闭、未充电时进入
- 延迟非关键网络访问、同步、JobScheduler任务
- 维护窗口:定期唤醒处理pending任务
- 白名单机制:可豁免Doze限制
- Android 16 优化:Device Idle 状态机更精细,进入 Doze 的判定更智能
4. App Standby(应用待机):
- 应用长时间未使用时进入待机状态
- 限制网络访问和后台任务
- Adaptive Battery(自适应电池):基于机器学习预测应用功耗
- 利用设备端 ML 模型分析用户使用模式
- 自动限制不常用应用的后台活动
5. Thermal HAL(Android 16 重要新增):
- AIDL 接口的热管理 HAL
- 监控 SoC 温度、电池温度、皮肤温度
- 动态调节 CPU/GPU 频率、限制屏幕亮度
- 与 Power HAL 协同工作实现热保护
电源管理API:
// 获取Wakelock
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK,
"MyApp::MyWakeLock"
);
wl.acquire(); // 获取锁
// 执行需要保持CPU运行的任务
wl.release(); // 释放锁(必须!)
// 请求忽略电池优化
Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);
关键理解:
- Wakelock必须及时释放,否则导致耗电(电量杀手)
- 使用WakefulBroadcastReceiver处理后台任务
- JobScheduler:延迟非紧急任务到合适时机(充电时、WiFi时)
- WorkManager:推荐的后台任务API(兼容性好)
电量优化最佳实践:
- 减少Wakelock使用,及时释放
- 使用JobScheduler/WorkManager代替AlarmManager
- 合并网络请求,批量处理
- 延迟非关键任务到设备充电时
- 使用doze白名单需谨慎(仅关键应用)
- 监听电量状态,低电量时减少后台活动
- Android 16:利用 Adaptive Battery 自动优化,无需手动配置
10. Android通信系统
通信系统架构:
应用层(Phone/Messaging)
↓
Framework层(TelephonyManager/SmsManager)
↓
RIL层(Radio Interface Layer)
↓
基带处理器(Baseband Processor)
核心组件:
1. RIL(Radio Interface Layer):
- 连接Android系统和基带处理器
- 分为两部分:
- RILJ(Java层):Framework中的RIL实现
- RILD(Native守护进程):与基带通信
- 通过Socket通信(RILJ ↔ RILD)
2. Telephony Framework:
- TelephonyManager:电话状态管理(通话、网络、SIM卡)
- PhoneStateListener:监听电话状态变化
- SmsManager:短信发送和接收
- Phone:电话核心类(GSM/CDMA)
3. Modem(基带处理器):
- 处理无线通信(2G/3G/4G/5G)
- 独立于主CPU运行
- 通过AT指令与RILD通信
通话流程:
拨号界面 → TelecomManager → TelephonyManager
→ Phone → RILJ → RILD → Modem → 网络
短信流程:
发送:SmsManager.sendTextMessage() → SMSDispatcher
→ RILJ → RILD → Modem → 网络
接收:网络 → Modem → RILD → RILJ
→ SMSDispatcher → BroadcastReceiver(SMS_RECEIVED)
关键API:
// 电话状态监听
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateListener listener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String phoneNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE: // 空闲
case TelephonyManager.CALL_STATE_RINGING: // 响铃
case TelephonyManager.CALL_STATE_OFFHOOK: // 摘机(通话中)
}
}
};
tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
// 发送短信
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(
"10086", // 目标号码
null, // SMSC地址(null=默认)
"Hello", // 短信内容
sentIntent, // 发送成功Intent
deliveryIntent // 送达Intent
);
// 接收短信
<receiver android:name=".SmsReceiver">
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
关键理解:
- 双卡双待:TelephonyManager支持多SIM卡管理
- VoLTE:Voice over LTE(4G语音通话)
- VoNR(Voice over NR):5G 独立组网下的语音通话(Android 16 支持增强)
- SIM卡状态:SIM_STATE_READY(就绪)、SIM_STATE_ABSENT(无卡)
- IMEI:设备唯一标识(需要READ_PHONE_STATE权限)
Android 16 通信变化:
- Binder 驱动稳定演进:Binder IPC 机制持续稳定,底层驱动无破坏性变化
- AIDL HAL 全面取代 HIDL:所有系统服务的 HAL 层接口统一为 AIDL
- WiFi 6E / WiFi 7:支持 6GHz 频段(WiFi 6E)和 MLO 多链路操作(WiFi 7)
- WPA3 强制要求:Android 16 强制要求新设备支持 WPA3 加密
- 5G 增强:Sub-6GHz + mmWave 双模支持,载波聚合优化
核心技术总结
关键知识点回顾
1. 系统架构:
- 5层架构:应用层、框架层、运行库层、HAL层、内核层
- HAL层的作用和优势
- Android 16:AIDL HAL 全面取代 HIDL,所有子系统统一接口
- Binder IPC 机制
- ART vs Dalvik:ART 混合编译模式(AOT + JIT + PGO)
- APEX 模块:30+ 核心模块独立更新(Mainline 项目)
2. 启动流程:
- BootROM → Bootloader → Kernel → init → Zygote → SystemServer → Launcher
- Zygote的fork机制和预加载优化
- SystemServer启动80+系统服务(Android 16 服务数量增加)
- init.rc配置文件解析
- 两阶段 init(first stage + second stage)
3. 输入系统:
- EventHub → InputReader → InputDispatcher → InputChannel → ViewRootImpl
- ANR检测机制(5秒超时)
- 多点触控处理
- Android 16:高刷新率触控优化
4. 显示系统:
- Surface → SurfaceFlinger → HWC3 → DRM/KMS
- Android 16:DRM/KMS 为唯一显示标准,Framebuffer 已完全移除
- Android 16:BLAST-Sync 降低帧延迟,VRR/LTPO 可变刷新率
- 硬件加速和过度绘制
- 双缓冲/三缓冲
5. 音频系统:
- AudioFlinger混音和音效处理
- AudioPolicyService路由和焦点管理
- AudioTrack播放、AudioRecord录音
- Android 16:Audio HAL V4(AIDL)、Spatial Audio、LE Audio、AAudio MMAP
6. 传感器系统:
- 传感器分类:运动、位置、环境、接近
- 传感器融合提高精度
- 采集频率和能耗平衡
- Android 16:Sensor HAL AIDL、Thermal HAL 协同热管理
7. 电源管理:
- Wakelock机制(PARTIAL_WAKE_LOCK)
- Doze模式和App Standby
- Android 16:Adaptive Battery(机器学习优化)、Device Idle 优化
- 电量优化最佳实践
8. 通信系统:
- RIL架构(RILJ + RILD + Modem)
- TelephonyManager电话管理
- SmsManager短信收发
- Android 16:VoNR 增强、WiFi 6E/7、WPA3 强制
Android 16 核心变化速查表
| 领域 | Android 16 关键变化 |
|---|---|
| 内核 | GKI 2.0 成熟,Linux 6.6 LTS 参考,KMI 版本化(v5.10-v6.6) |
| 内存管理 | PSI + LMKD 替代 Low Memory Killer,memfd 替代 Ashmem |
| HAL 接口 | AIDL HAL 全面取代 HIDL,所有子系统统一 AIDL 接口 |
| 构建系统 | Bazel 与 Soong 双轨并行,Make 逐步淘汰 |
| 显示 | DRM/KMS 唯一标准,Framebuffer 完全移除,HWC3、BLAST-Sync、VRR/LTPO |
| 音频 | Audio HAL V4 (AIDL),Spatial Audio,LE Audio (LC3),AAudio MMAP |
| 传感器 | Sensor HAL AIDL,Thermal HAL (AIDL) 热管理,新传感器类型 |
| 系统模块 | APEX 30+ 模块独立更新(Mainline),ART/网络/媒体等模块化 |
| 电源 | Adaptive Battery 机器学习优化,Device Idle 精细状态机 |
| 网络 | WiFi 6E/7,WPA3 强制,5G VoNR 增强 |
| 启动 | 两阶段 init,A/B 分区,AVB 2.0,后台 Dex2oat |
技术能力提升
通过本书可以获得:
理论层面:
- 理解Android系统底层架构
- 掌握各子系统的工作原理和设计思想
- 理解Linux内核和Android的关系
- Android 16:理解 GKI 2.0 解耦架构、AIDL HAL 统一接口
实践层面:
- Framework开发能力
- ROM定制能力
- 系统级问题排查能力
- 驱动开发基础
进阶方向:
- Android Framework开发
- ROM定制和优化
- 驱动开发
- 性能优化(系统级)
学习建议
1. 循序渐进:
- 先掌握应用层开发(《Android开发艺术探索》)
- 再深入系统层(本书)
- 结合源码阅读加深理解
2. 实践验证:
- 搭建源码编译环境
- 尝试修改系统代码并编译
- 通过logcat和systrace分析系统行为
- Android 16:尝试 Bazel 构建,体验增量编译速度
3. 源码阅读:
- frameworks/base/:Framework核心代码
- frameworks/native/:Native层实现
- frameworks/hw/interfaces/:AIDL HAL 接口定义(Android 16 重点)
- system/core/:init、logcat等核心工具
- hardware/interfaces/:HAL层实现(AIDL)
4. 工具使用:
- adb:调试桥接
- logcat:日志查看
- systrace / Perfetto:系统性能分析
- dumpsys:系统服务信息
- getprop/setprop:属性查看和设置
5. 持续学习:
- 关注Android版本更新(新特性、新API)
- 阅读Google官方文档和博客
- 参与AOSP(Android Open Source Project)社区
- Android 16 重点学习:GKI 2.0 内核机制、AIDL HAL 开发、DRM/KMS 驱动
推荐阅读路径
应用开发基础 → 应用开发进阶 → Framework层 → HAL和驱动层 → GKI/AIDL
配套书籍:
- 《Android开发艺术探索》- 应用层进阶
- 《深入理解Android内核设计思想》(本书)- Framework和HAL层
- 《Android系统源代码情景分析》- 源码详解
- 《深入理解Linux内核》- Linux内核基础
- 新增:《Linux Device Drivers》- DRM/KMS 驱动开发
- 新增:GKI 2.0 官方文档 - kernel.googlesource.com
实践应用场景
1. Framework开发
典型任务:
- 定制系统服务(如自定义SystemService)
- 修改系统API行为
- 添加新的系统功能
所需知识:
- 系统架构和启动流程
- Binder IPC机制
- 系统服务开发
实践建议:
- 从简单的SystemService入手
- 学习现有系统服务的实现
- 注意跨进程通信和权限控制
- Android 16:使用 AIDL 定义新 HAL 接口,遵循 AIDL HAL 开发规范
2. ROM定制
典型任务:
- 定制系统UI(Launcher、SystemUI)
- 添加厂商特性
- 性能优化和功耗优化
所需知识:
- 源码编译和刷机
- 系统架构和各子系统
- 性能分析工具
实践建议:
- 从修改系统资源(字符串、图片)开始
- 逐步深入到代码修改
- 建立完整的编译和测试流程
- Android 16:基于 GKI 2.0 只需适配 out-of-tree 内核模块,降低移植难度
3. 性能优化
典型任务:
- 启动速度优化
- 流畅度优化
- 功耗优化
所需知识:
- 启动流程和Zygote机制
- 显示系统和Vsync
- 电源管理和Wakelock
实践建议:
- 使用 Perfetto(systrace 后继者)分析性能瓶颈
- 优化系统服务启动顺序
- 减少不必要的Wakelock
- Android 16:利用 BLAST-Sync 优化帧同步,利用 VRR/LTPO 降低显示功耗
4. 问题排查
典型问题:
- 系统卡顿或ANR
- 应用崩溃(系统原因)
- 硬件功能异常
所需知识:
- 各子系统工作原理
- logcat日志分析
- dumpsys命令使用
实践建议:
- 掌握logcat过滤技巧
- 学会分析traces.txt(ANR日志)
- 使用dumpsys查看系统状态
结语
《深入理解Android内核设计思想》是一本真正深入Android系统底层的专业书籍。它不同于应用层开发书籍,聚焦于Framework层和HAL层,帮助读者理解Android系统是如何运作的。通过学习本书,你将从应用开发者成长为系统开发者,具备Framework开发、ROM定制和系统级问题排查的能力。
本书核心价值:
- 系统化:全面覆盖Android各子系统
- 深入化:深入到Framework和HAL层
- 原理化:注重设计思想和工作原理
- 实战化:结合源码和实践案例
学习收获:
- 理解Android系统底层架构和运行机制
- 掌握Framework开发和ROM定制能力
- 提升系统级问题排查和性能优化能力
- 为深入Android源码打下坚实基础
进阶方向:
- Android Framework开发(系统服务、API开发)
- ROM定制(厂商定制、系统优化)
- 驱动开发(HAL实现、Linux驱动、DRM/KMS)
- 性能优化(启动、流畅度、功耗)
持续学习:
- 本书是进入Android系统层的起点
- 结合AOSP源码深化理解
- 实践中积累经验
- 关注Android技术发展
- Android 16 重点方向:GKI 2.0 内核架构、AIDL HAL 开发、DRM/KMS 驱动、Bazel 构建
推荐将本书作为Android系统层学习的必读书目,结合《Android开发艺术探索》打通应用层到系统层的完整知识体系!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)