让 AI 像音频架构师一样理解 Android 音频系统 —— 从 App 到 HAL,从 Java 到 DSP。
一套专为 AI 编程助手打造的 Android 音频子系统知识库,帮你快速定位音频初始化失败、卡顿、路由异常等疑难问题。每篇技能都经过 AOSP 源码验证,提供完整的调用链、架构图和调试命令。
AudioFlinger 全景架构 —— 音频系统的"心脏"
- 四层音频栈:应用 → Framework → Native → HAL
- 四种 PlaybackThread:MixerThread / DirectOutputThread / OffloadThread / DuplicatingThread
- 双混音策略:普通 Mixer vs FastMixer(SCHED_FIFO + Lock-free)
- 完整数据流:播放路径 & 录音路径 & Ring Buffer 机制
- 延迟分级:~5ms 极低延迟 → >100ms 省电模式
- 调试速查:dumpsys / logcat / Perfetto 一键命令
AudioRecord 调用链追踪 —— 从一行 new AudioRecord() 到 HAL 的每一步
- 10+ 层完整调用时序:Java → JNI → Native → AudioFlinger → AudioPolicy → HAL
- 错误码 -22(BAD_VALUE)产生与传递路径
- Engine 设备选择逻辑:蓝牙 → 有线 → USB → 内置 Mic 的优先级
- QCOM HAL 加载机制:
dlopen→adev_open→open_input_stream - 电源状态影响:WAIT_FOR_VHAL 如何导致录音初始化失败
Android 15 车载音频焦点管理 —— 多音源协调的"交通指挥系统"
- 四种焦点类型 + 四种通知类型,车载场景最佳响应策略
- MediaFocusControl 仲裁机制:FocusStack LIFO 栈管理
- 延迟焦点机制:通话中媒体请求挂起,通话结束自动恢复
- Android 15 新特性:系统级自动 Duck(-12dBFS)、targetSdk 35+ 后台限制
- 车载特有:多音区管理、CarAudioService 协同、安全告警最高优先级
- 调试速查:dumpsys / logcat 一键诊断焦点冲突
Android 15 车载 AudioPolicyService 策略管理 —— 音频路由的"决策大脑"
- 策略与执行分离架构:APS(决策) ↔ AudioFlinger(执行)
- 三层配置体系:拓扑 XML + 策略规则 XML + 车载独立配置
- 完整路由决策链:AudioAttributes → Strategy → DevicePriority → FinalDevice
- 设备管理:连接/断开通知、Failover 机制、蓝牙 A2DP 特殊处理
- ForceUse 强制路由 + 四种音频模式切换
- Android 15 新特性:AIDL HAL 迁移、音量组路由绑定、CAP Engine 可配置引擎
- 车载特有:多音区策略路由、CarAudioService 协同、car_audio_configuration.xml
| 特点 | 说明 |
|---|---|
| 📖 源码级精度 | 每处引用都标注了文件路径和行号,可直接跳转验证 |
| 🔍 问题驱动 | 从真实调试场景出发,而非教科书式罗列 |
| 🧩 AI 原生 | 为 AI 编程助手量身定制的结构化知识,触发即用 |
| 🎯 实战导向 | 每个技能都包含调试命令、常见问题诊断和排查思路 |
本仓库会持续完善,计划覆盖的方向包括:
- AudioTrack 播放流程详解
- AudioPolicyService 路由策略分析
- AAudio MMAP 低延迟路径
- 蓝牙音频(A2DP / LE Audio)调用链
- 音频焦点(AudioFocus)管理机制
- 车载音频场景(CarAudioService)专题
💡 欢迎提 Issue 建议你关心的音频话题,或直接 PR 贡献!
将这些技能目录放入项目的 .trae/skills/ 下:
your-project/
└── .trae/
└── skills/
├── android-audio-call-chain/
│ └── SKILL.md
├── android-audioflinger-architecture/
│ └── SKILL.md
├── android-car-audio-focus/
│ └── SKILL.md
└── android-car-audio-policy/
└── SKILL.md
AI 助手会在分析音频相关问题时自动调用对应技能。
基于 Android 15(API Level 35) AOSP 源码分析,关键路径:
# === AudioFlinger 架构(Native 执行层)===
frameworks/av/services/audioflinger/ # AudioFlinger 服务(混音、线程、Track)
frameworks/av/media/libaudioclient/ # 客户端 Native 库(AudioTrack/AudioRecord)
frameworks/av/media/audioserver/ # audioserver 启动入口
# === AudioPolicyService 策略管理(Native 决策层)===
frameworks/av/services/audiopolicy/ # 音频策略服务(APM、Engine、路由)
frameworks/av/services/audiopolicy/enginedefault/src/ # 默认 Engine 实现
# === 音频焦点 & 系统服务(Java 层)===
frameworks/base/services/core/java/com/android/server/audio/ # AudioService、MediaFocusControl
frameworks/base/media/java/android/media/ # AudioManager 客户端 API
# === 车载音频服务 ===
packages/services/Car/service/src/com/android/car/audio/ # CarAudioService(多音区、车载焦点)
packages/services/Car/service/src/com/android/car/power/ # CarPowerManagementService(电源状态)
# === HAL 接口与实现 ===
hardware/interfaces/audio/ # Audio HAL 接口定义(AIDL)
hardware/qcom/audio/hal/ # QCOM HAL 实现
# === 策略配置文件 ===
/vendor/etc/audio_policy_configuration.xml # 音频拓扑配置(mixPort/devicePort/route)
/system/etc/audio_policy_engine_configuration.xml # 引擎策略规则(ProductStrategy)
/vendor/etc/car_audio_configuration.xml # 车载音频配置(音区/音量组/CAP Engine)
Made with ❤️ for Android audio developers