📌 背景
Android 作为车载信息娱乐系统(IVI)的主流操作系统,其音频框架经历了多次重大演进。从最初的多媒体框架到如今天完整的 Android Automotive Audio(HAA)架构,每个版本都在音频处理能力上有所突破。
本文梳理 Android 5.0 ~ Android 14 各版本中与音频相关的新特性,重点聚焦在车载音频开发中常用到的功能。
📊 版本新特性总览
| Android 版本 | 代号 | Audio 新特性 | 对车载影响 |
|---|---|---|---|
| Android 5.0 (Lollipop) | Lollipop | OpenSL ES 正式支持、AudioTrack/AudioRecord 改进 | 车机多媒体基础确立 |
| Android 6.0 (Marshmallow) | Marshmallow | Audio Focus API 重新设计、蓝牙 A2DP 改进 | 通话/音乐音频焦点管理 |
| Android 7.0 (Nougat) | Nougat | ProAudio 模式、Dynamics Processing、Tunnel Decode | 高保真音频输出、低延迟处理 |
| Android 8.0 (Oreo) | Oreo | Audio Policy HAL v2、Dynamic Policy、AAudio 预览 | 车机多分区音频、AAudio 替代 OpenSL |
| Android 8.1 (Oreo) | Oreo MR1 | AAudio 正式支持、蓝牙延迟优化 | 低延迟音频录制/播放 |
| Android 9.0 (Pie) | Pie | Pre-merging 多媒体合并、音频属性扩展 | 多APP音频同时播放管理 |
| Android 10 | Q | HIDL 迁移 AIDL、Offload Effects、蓝牙 LE Audio 准备 | 车机音频架构现代化 |
| Android 11 | R | 蓝牙 ABB/AAC 优化、AAudio 稳定性提升 | 蓝牙音频质量改善 |
| Android 12 | S | 可变采样率(Variable Sample Rate)、空间音频框架 | 高分辨率音频支持 |
| Android 13 | T | USB 音频Class B、HE-AAC 编码改进、空间音频正式API | USB 音频设备支持增强 |
| Android 14 | U | LE Audio Broadcast、XMOS ASIO 兼容性、音频路由框架重构 | 车载音频多设备互联 |
🔥 各版本详细说明
Android 5.0 (Lollipop) —— 多媒体框架确立
- OpenSL ES 正式支持:提供原生 C/C++ 音频接口,替代部分 AudioTrack 功能
- AudioTrack 改进:支持 32-bit PCM,支持更高采样率
- Audio Effects:内置 EQ、虚拟化、重低音效果
// AudioTrack 创建示例(5.0+)
AudioAttributes.Builder attributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build();
AudioFormat.Builder formatBuilder = new AudioFormat.Builder()
.setEncoding(AudioFormat.ENCODING_PCM_16BIT)
.setSampleRate(48000)
.setChannelMask(AudioFormat.CHANNEL_OUT_STEREO)
.build();
AudioTrack track = new AudioTrack.Builder()
.setAudioAttributes(attributes)
.setAudioFormat(formatBuilder)
.setBufferSizeInBytes(2048)
.setTransferMode(AudioTrack.MODE_STREAM)
.build();
Android 6.0 (Marshmallow) —— Audio Focus 重新设计
- AudioFocusRequest API:更精细的音频焦点控制
- 邦定音频焦点与音频流:不再需要手动处理焦点丢失
- 蓝牙 A2DP 改进:蓝牙音乐播放质量提升
// Audio Focus 请求(6.0+)
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
AudioAttributes playbackAttributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build();
AudioFocusRequest focusRequest = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
.setAudioAttributes(playbackAttributes)
.setAcceptsDelayedFocusGain(true)
.setWillPauseWhenDucked(false)
.build();
int result = audioManager.requestAudioFocus(focusRequest);
Android 7.0 (Nougat) —— ProAudio 与 Tunnel Decode
- ProAudio 模式:支持超低延迟音频(~10ms),用于专业音频应用
- Dynamics Processing API:内置 DRC/压缩器/限制器
- Tunnel Decode:音频解码在 DSP/TDSP 中完成,减轻 CPU 负载,车载导航播报常用
// ProAudio 模式 AudioTrack
AudioTrack track = new AudioTrack.Builder()
.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build())
.setAudioFormat(new AudioFormat.Builder()
.setEncoding(AudioFormat.ENCODING_PCM_16BIT)
.setSampleRate(48000)
.setChannelMask(AudioFormat.CHANNEL_OUT_STEREO)
.build())
.setPerformanceMode(AudioTrack.PERFORMANCE_MODE_LOW_LATENCY) // ProAudio
.build();
Android 8.0 (Oreo) —— Audio Policy HAL v2 + Dynamic Policy
- Audio Policy HAL v2:完全重新设计的音频策略引擎,支持多分区(Multi-Zone)
- Dynamic Policy:运行时动态切换音频路由,无需重启
- AAudio 预览版:全新的低延迟 C API,轻量级替代 OpenSL ES
- HAL 层扩展:支持自定义音频设备发现和路由策略
// AAudio 基本使用(8.0+)
AAudioStreamBuilder builder;
AAudioStream *stream;
AAudioStreamBuilder_create(&builder);
AAudioStreamBuilder_setSharingMode(builder, AAUDIO_SHARING_MODE_EXCLUSIVE);
AAudioStreamBuilder_setFormat(builder, AAUDIO_FORMAT_PCM_16BIT);
AAudioStreamBuilder_setChannelCount(builder, 2);
AAudioStreamBuilder_setSampleRate(builder, 48000);
AAudioStreamBuilder_setPerformanceMode(builder, AAUDIO_PERFORMANCE_MODE_LOW_LATENCY);
AAudioStreamBuilder_open(builder, &stream);
AAudioStream_requestStart(stream);
Android 9.0 (Pie) —— Pre-merging 与音频属性扩展
- Pre-merging 机制:多个音轨合并前可独立控制,车载多媒体多分区核心基础
- 语音助手音频属性:USAGE_ASSISTANT、CONTENT_TYPE_SPEECH 正式支持
- 导航播报优先级:ANR(Audio Navigation Route)独立属性,确保播报可打断音乐
// 导航播报音频属性(9.0+)
AudioAttributes navAttributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ASSISTANT) // 9.0 新增
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.build();
// 传统用法(仍支持)
AudioAttributes navLegacy = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE)
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.build();
Android 10 —— AIDL 迁移与 Offload Effects
- HIDL → AIDL:音频 HAL 接口从 HIDL 迁移到 AIDL,架构更简洁
- Offload Effects:DSP 上实现音效(EQ、压缩、限制器),减轻 CPU
- 蓝牙 LE Audio 准备:为低功耗蓝牙音频做准备
- 音频路由 API 增强:可查询可用输出设备列表
// AudioManager 路由查询(10+)
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
String[] devices = am.getAvailableDevices(AudioManager.GET_DEVICES_OUTPUTS);
for (String device : devices) {
Log.d("AudioRouter", "Available output: " + device);
}
// 设置首选输出设备
am.setDeviceConnectionState(AudioManager.DEVICE_OUT_REMOTE_SUBMIX,
AudioManager.DEVICE_STATE_AVAILABLE, "submix_tag");
Android 11-12 —— 空间音频与可变采样率
- Variable Sample Rate(VSR)(12+):输出采样率可动态调整,配合外部 DAC
- 空间音频框架(12+):内置 Spatializer API,支持头部追踪
- AAudio 稳定性:大量 bug 修复,生产环境可用
// 空间音频 Spatializer(12+)
SpatialAudioManager spManager = (SpatialAudioManager)
context.getSystemService(Context.SPATIAL_AUDIO_SERVICE);
if (spManager.isAvailable()) {
SpatializerHelper helper = spManager.getSpatializerHelper();
// 注册监听器处理空间化
}
Android 13-14 —— USB 音频增强与 LE Audio
- USB Audio Class B(13+):更好的 USB 音频设备兼容性
- HE-AAC 编码(13+):支持高效 AAC 编码,用于直播/VoIP
- LE Audio Broadcast(14+):广播音频,类似分享功能,车载多区域娱乐潜在应用
- 音频路由框架重构:更灵活的设备管理,支持车机多屏互联
💡 车载音频开发关键总结
- 音源属性选择:正确使用 AudioAttributes 是车载音频策略的基础
- 焦点管理:Marshmallow 6.0+ 的 AudioFocusRequest 是标准做法
- 多分区架构:Oreo 8.0 以后的 Audio Policy HAL v2 是车载多区音频核心
- 低延迟:ProAudio(7.0+)/AAudio(8.1+)用于语音识别和实时音效
- 外设路由:10+ 的 AudioManager 路由 API 用于管理复杂车载音频拓扑
随着 Android Automotive OS(AAOS)的普及,车载音频系统的复杂度也在不断提升。理解各版本音频框架的演进,是做好车载IVI音频开发的基础。
持续更新中,欢迎补充指正。