dumpsys--音频服务状态信息
Audio相关的信息获取指令:
dumpsys media.audio_flinger
dumpsys media.audio_policy
dumpsys audio
media.audio_flinger
dumpsys media.audio_flinger 用于获取 AudioFlinger 服务的详细状态信息。
1. 命令作用
该命令输出当前系统的 音频设备状态、活跃音频流、混音策略、硬件配置 等信息,常用于:
调试音频播放/录制问题(无声、杂音、延迟)。
检查音频设备是否正常识别(如耳机、蓝牙设备)。
分析音频性能(延迟、采样率、缓冲区大小)。
2. 使用方法
adb shell dumpsys media.audio_flinger
3. 关键输出解析
(1)硬件设备状态
Hardware status:HAL version: 3.0Module: primary (Audio HW: Qualcomm)Devices:- Device: 0x8 (Speaker), State: ON, Sample Rate: 48000 Hz, Format: AUDIO_FORMAT_PCM_16_BIT- Device: 0x4 (Wired Headset), State: OFF- Device: 0x80000000 (Bluetooth A2DP), State: OFF
HAL version:音频硬件抽象层版本(如 2.0/3.0)。
Devices:列出所有音频设备(扬声器、耳机、蓝牙等)及其状态(ON/OFF)。
Sample Rate/Format:当前设备的采样率和音频格式(如 AUDIO_FORMAT_PCM_16_BIT)。
(2)活跃音频流(Playback Threads)
Output thread 0x7a8f4e00:Name: AudioOut_7Sample rate: 48000 HzFormat: AUDIO_FORMAT_PCM_16_BITChannel mask: AUDIO_CHANNEL_OUT_STEREOActive tracks:- Track: 0x7a8f4e10, Session: 123, Volume: 1.0, Stream: MUSIC
Output thread:音频输出线程(每个线程对应一个播放流)。
Active tracks:当前正在播放的音频流(如 MUSIC、VOICE_CALL)。
Volume:音量大小(0.0 ~ 1.0)。
(3)混音策略(Mixer Config)
AudioMixer configurations:- Mixer 0: Input buffer (FrameCount: 1024, SampleRate: 48000)- Mixer 1: Output buffer (FrameCount: 256, SampleRate: 44100)
(4)音频策略(Audio Policy)
Audio Policy Manager:- Preferred device for STREAM_MUSIC: Speaker- Forced use for COMMUNICATION: NONE- Current BT device: None
Preferred device:默认音频路由(如音乐流默认输出到扬声器)。
Forced use:强制路由策略(如通话时强制切换到听筒)。
4. 常见问题排查
(1)音频无声
检查 Active tracks 是否有目标音频流(如 MUSIC)。
确认输出设备的 State 是否为 ON。
检查音量是否被设置为 0。
(2)蓝牙音频无法切换
查看 Current BT device 是否识别到蓝牙设备。
检查 Audio Policy 是否允许蓝牙路由。
(3)音频延迟高
分析 Mixer configurations 中的 FrameCount(缓冲区越大,延迟越高)。
检查 Sample rate 是否匹配(如 48kHz vs 44.1kHz 可能导致重采样延迟)。
5. 总结
dumpsys media.audio_flinger 重点关注 硬件设备状态、活跃音频流、混音策略 三部分。结合 logcat 查看音频相关日志(过滤 AudioFlinger 或 AudioPolicy)
media.audio_policy
1. 命令作用
该命令用于获取 AudioPolicyManager 的完整状态信息:
- 当前音频设备连接状态
- 音频流的路由策略
- 音量曲线配置
- 强制音频使用场景(如通话、媒体播放)
- 策略规则和混音行为
2. 使用方法
adb shell dumpsys media.audio_policy
3. 关键输出解析
(1)音频设备状态
Audio Devices:- Device: 0x8 (Speaker)Type: OUT_SPEAKER, State: AVAILABLE- Device: 0x4 (Wired Headset)Type: OUT_WIRED_HEADSET, State: UNAVAILABLE- Device: 0x80000000 (Bluetooth A2DP)Type: OUT_BLUETOOTH_A2DP, State: AVAILABLE
- State:AVAILABLE(可用)/UNAVAILABLE(不可用)
- Type:设备类型(扬声器、耳机、蓝牙等)
(2)音频流路由策略
Stream Routes:STREAM_MUSIC:- Primary Output: Speaker- Fallback: Wired Headset (when connected)STREAM_VOICE_CALL:- Force Route: Earpiece
显示每种音频流(音乐、通话等)的 首选设备 和 回退策略。
(3)音量曲线配置
Volume Curves:STREAM_MUSIC:- Index: 10, dB: -20.0 (Speaker)- Index: 5, dB: -40.0 (Headset)
不同设备上音量等级的 分贝映射。
(4)强制音频策略
Forced Use Cases:- FOR_COMMUNICATION: NONE- FOR_MEDIA: SPEAKER
强制特定场景使用指定设备(如媒体播放强制扬声器)
(5)混音行为
Mixing Rules:- Allow playback on VOICE_CALL (exclusive: true)- Duck MUSIC when NOTIFICATION plays
4. 常见问题排查
(1)设备未被识别
# 检查设备是否在列表中
adb shell dumpsys media.audio_policy | grep -A 10 "Audio Devices"
可能原因:
- 硬件未连接/驱动未加载
- 设备未在音频策略配置文件中声明(audio_policy_configuration.xml)
(2) 音频路由错误
# 确认当前路由决策
adb shell dumpsys media.audio_policy | grep "Active routes"
- 检查设备连接状态
- 验证策略规则是否冲突
- 检查强制使用场景
(3)音量异常
# 对比音量曲线与实际音量
adb shell dumpsys media.audio_policy | grep -A 5 "Volume Curves"
修改 /system/etc/audio_policy_engine.xml 中的音量配置
5. 关键配置文件
Android音频策略由以下文件控制:
文件路径及作用
/vendor/etc/audio_policy_configuration.xml 主配置文件
/system/etc/audio_policy_engine.xml 策略规则和音量曲线
/system/etc/audio_policy_volumes.xml 音量等级定义
6. 自动化测试
# 测试所有音频流的路由
for stream in MUSIC VOICE_CALL NOTIFICATION; doadb shell cmd media.audio_policy dump | grep -A 5 "STREAM_$stream"
done
audio
1. 命令作用
该命令是Android 的音频服务诊断命令,整合了以下子模块信息
- AudioFlinger(音频混合/输出)
- AudioPolicyManager(路由策略)
- AudioService(音量/焦点管理)
- 硬件设备状态
2. 使用方法
adb shell dumpsys audio
3. 关键输出解析
(1)音频设备状态
Audio Devices:- DEVICE_OUT_SPEAKER (Speaker): Available- DEVICE_OUT_WIRED_HEADSET (Headset): Unavailable- DEVICE_OUT_BLUETOOTH_A2DP (BT A2DP): Available, Addr: 11:22:33:AA:BB:CC
- 设备类型:输出/输入设备(如扬声器、耳机、蓝牙等)
- 状态:Available(可用)/Unavailable(不可用)
- 蓝牙设备:显示MAC地址(若连接)
(2)音频流路由
Stream Volumes:STREAM_MUSIC:- Device: Speaker, Index: 10/15, Current: -14 dB- Device: Headset, Index: 8/15, Current: -22 dB
Active Streams:STREAM_MUSIC (ID: 3) → SpeakerSTREAM_VOICE_CALL (ID: 0) → Earpiece
- 音量等级:各设备上的音量索引和实际分贝值
- 活动流:当前播放的音频流及其路由设备
(3)音频焦点管理
Audio Focus Stack:- UID: 10123, Client: com.spotify.musicStream: MUSIC, Gain: GAIN, Flags: DUCKING- UID: 10145, Client: com.android.phoneStream: VOICE_CALL, Gain: GAIN_TRANSIENT
- 焦点持有者:应用包名、音频流类型
- 焦点行为:DUCKING(闪避)、TRANSIENT(短暂持有)
(4)音量策略
Volume Groups:- Group: MUSICMin Volume: 0, Max Volume: 25Curves:Speaker: 0dB at index 15, -40dB at index 0Headset: -6dB at index 15, -46dB at index 0
- 音量范围:每组设备的最小/最大音量索引
- 曲线映射:索引与分贝值的对应关系
(5)Audio Patches
Audio Patches:- Patch ID: 1Sources: Playback Thread ID 12 (MUSIC)Sinks: Device OUT_SPEAKER
音频路径:显示音频数据从源(如播放线程)到目标设备的路由
4. 常见问题排查
(1)无声问题
# 确认目标设备状态
adb shell dumpsys audio | grep -A 5 "DEVICE_OUT_SPEAKER"
# 验证音频流是否活跃
adb shell dumpsys audio | grep "Active Streams"
# 检查焦点是否被抢占
adb shell dumpsys audio | grep "Audio Focus"
(2) 音量异常
# 验证音量曲线
adb shell dumpsys audio | grep -A 10 "Volume Curves"
5. 调试技巧
(1)动态修改音量
# 设置媒体流音量(索引值)
adb shell cmd media.volume set --stream 3 --index 10
(2) 强制路由
# 强制媒体流到耳机
adb shell cmd media.audio_policy set-force-use FOR_MEDIA OUT_WIRED_HEADSET
6. 关键配置文件
Android 音频行为由以下文件控制:
文件路径及作用
/vendor/etc/audio_policy_configuration.xml 设备路由策略
/system/etc/audio_policy_volumes.xml 音量曲线定义
/system/etc/audio_effects.conf 音效配置
7.测试脚本
#!/bin/bash
# 检查所有音频流状态
for stream in MUSIC VOICE_CALL NOTIFICATION; doecho "==== $stream ===="adb shell dumpsys audio | grep -A 5 "STREAM_$stream"
done