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.10v5.15v6.1v6.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 双轨并行

编译流程

  1. 设置环境:source build/envsetup.sh
  2. 选择目标:lunch(选择编译目标)
  3. 编译:m -j8(8线程并行编译,Soong)或 bazel build(Bazel)
  4. 生成产物: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.10v5.15v6.1v6.6,每个版本对应独立 KMI
  • 通用内核镜像由 Google 统一构建,OEM 无需重新编译内核主体
  • 厂商只需提供 out-of-tree 内核模块(通过 KMI 符号列表保证兼容)
  • Android内核必备模块:
    • Binder IPC
    • memfd(替代 Ashmem)
    • PSI + LMKD(替代 Low Memory Killer)
    • Alarm Driver
    • Logger
    • KMI 兼容性验证工具:abi-tool

系统移植关键步骤

  1. 内核适配:基于 GKI 2.0 通用内核,仅需适配 out-of-tree 模块
  2. Bootloader移植:U-Boot配置(支持 A/B 分区、AVB 2.0)
  3. HAL层适配:使用 AIDL 接口实现硬件抽象(不再使用 HIDL)
  4. 驱动开发:Display(DRM/KMS)、Touch、Camera、Audio等驱动
  5. 系统调试:串口调试、logcat日志分析

Bootloader启动流程

  1. BootROM:固化在芯片中,加载Bootloader到RAM
  2. Bootloader(U-Boot):初始化硬件、加载Linux内核
  3. 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(兼容性好)

电量优化最佳实践

  1. 减少Wakelock使用,及时释放
  2. 使用JobScheduler/WorkManager代替AlarmManager
  3. 合并网络请求,批量处理
  4. 延迟非关键任务到设备充电时
  5. 使用doze白名单需谨慎(仅关键应用)
  6. 监听电量状态,低电量时减少后台活动
  7. 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

配套书籍

  1. 《Android开发艺术探索》- 应用层进阶
  2. 《深入理解Android内核设计思想》(本书)- Framework和HAL层
  3. 《Android系统源代码情景分析》- 源码详解
  4. 《深入理解Linux内核》- Linux内核基础
  5. 新增:《Linux Device Drivers》- DRM/KMS 驱动开发
  6. 新增: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开发艺术探索》打通应用层到系统层的完整知识体系!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐