news 2026/5/1 6:17:50

Android-Audio-为啥不移到packages/module

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android-Audio-为啥不移到packages/module

Audio 为何没有完全迁移到packages/modules

这是一个非常专业且深刻的问题。Audio 系统的模块化确实是 Android 架构演进中的一个特殊案例。

一、Audio 系统的现状

当前分布

  • 大部分在frameworks/av/
    frameworks/av/ ├── services/audiopolicy/ # 音频策略服务 ├── media/ # 媒体框架 └── camera/ # 摄像头(共用部分基础设施)
  • 部分在hardware/
    hardware/interfaces/audio/ └── HIDL/AIDL 接口定义
  • 少量在packages/modules/
    packages/modules/Bluetooth/audio/ # 蓝牙音频相关

二、未完全迁移的核心原因

1.性能和延迟的硬性要求⏱️

  • 实时性要求:音频处理需要极低延迟(<10ms)
  • 硬件直通:许多编解码器需要直接访问硬件
  • 中断处理:音频 DMA 需要高效中断响应
  • 模块化开销:APEX 包的抽象层会引入额外延迟

对比示例

场景模块化音频延迟当前架构延迟
游戏音频20-30ms5-10ms
VoIP 通话15-25ms8-12ms
媒体播放可接受可接受

2.硬件碎片化严重🎚️

  • 编解码器多样性:高通/联发科/三星各有私有音频 DSP
  • 音频 HAL 差异
    // 不同厂商的 HAL 差异巨大// 高通:audio.primary.msm8996.so// 三星:audio.primary.exynos.so// 联发科:audio.primary.mtk.so
  • 定制 DSP 算法:噪声消除、空间音频等厂商定制功能

3.复杂的依赖关系🔗

Audio 系统依赖网络: ├── 电源管理 (Power HAL) ├── 设备管理器 (DeviceManager) ├── 传感器 (Sensor HAL) # 用于自动音量调整 ├── 相机 (Camera HAL) # 视频录制同步 ├── 蓝牙 (Bluetooth) # A2DP/HFP ├── USB (USB HAL) # USB 音频 └── DRM 框架 # 受保护内容播放

4.系统启动时序要求🚀

  • 早期启动:开机声音、TTS 需要极早可用
  • 模块加载顺序:音频需要在 UI 前启动
  • 恢复模式:需要在不完整系统中工作

三、部分模块化的尝试

已模块化的部分

组件位置状态原因
蓝牙音频packages/modules/Bluetooth/audio已模块化相对独立
AudioFlinger插件部分 HIDL 化部分新功能实验
空间音频考虑中规划算法独立

渐进式演进策略

  1. Android 10-12:定义稳定的 Audio HAL 接口
  2. Android 13+:尝试将音频后处理链模块化
  3. 未来:可能将非实时路径模块化

四、技术挑战详解

挑战 1:实时性保证

// 当前的直接调用路径app → AudioFlinger → HAL → Driver// 延迟:~5ms// 模块化后的路径app →AudioService(APEX)→ AudioFlinger → HAL → Driver// 增加延迟:+3-5ms

挑战 2:内存共享

// 当前:直接内存共享audio_buffer=malloc_shared(SHARED_BUFFER);// 模块化:需要进程间复制audio_buffer=binder_allocate_copy(SHARED_BUFFER);// 额外开销:内存复制 + 同步延迟

挑战 3:硬件抽象层兼容性

# 当前:直接链接 LOCAL_SHARED_LIBRARIES := libaudiohal # 模块化:版本化管理 LOCAL_APEX_LIBRARIES := \ com.android.audio@1.0 \ com.android.audio@2.0 # 问题:旧版 HAL 需要新版模块支持

五、Google 的折中方案

1.接口标准化而非实现模块化

  • 保持 AudioFlinger 在系统镜像中
  • 但定义稳定的 HIDL/AIDL 接口
  • 允许第三方替代部分功能

2.选择性模块化

音频系统
模块化决策
实时路径
保持集成
非实时路径
可模块化
播放/录制
低延迟
通话
音频策略
格式转换
效果器管理

3.增量改进

  • Android 12:改进音频 HAL 稳定性
  • Android 13:音频设备枚举模块化
  • Android 14:蓝牙 LE Audio 完全模块化

六、行业对比

系统音频架构更新策略
Android半模块化大版本更新 + 部分 Mainline
Windows驱动模型Windows Update
iOS完全集成系统更新
Linux 桌面PulseAudio 独立包管理器更新

七、实际影响

开发者角度

// 好消息:API 保持稳定AudioManageram=(AudioManager)getSystemService(AUDIO_SERVICE);am.setStreamVolume(...);// 接口不变// 坏消息:底层差异仍需处理if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.TIRAMISU){// 新音频功能可能依赖系统版本}

OEM 厂商角度

  • 优势:仍可深度定制音频体验
  • 劣势:音频安全更新仍需自行 backport
  • 责任:需维护音频 HAL 驱动

用户角度

  • ✅ 获得厂商调音特色
  • ❌ 安全更新可能延迟
  • ⚠️ 音频质量因设备而异

八、未来可能性

可能模块化的部分

  1. 音频效果器框架(可独立更新算法)
  2. 音频策略引擎(路由逻辑)
  3. 格式转换库(非实时编解码)
  4. MIDI 子系统(专业音频)

技术前提

  • 实时 Linux 改进:PREEMPT_RT 更成熟
  • 硬件虚拟化:音频 DSP 虚拟化支持
  • 新总线标准:更低延迟的模块间通信

九、总结

Audio 没有完全移到packages/modules权衡的结果,而非技术不足:

因素重要性模块化障碍
实时性🔴 极高主要障碍
硬件集成🔴 高碎片化严重
启动顺序🟡 中可解决
安全更新🟢 可接受非主要问题

根本矛盾:模块化的解耦优势vs 音频系统的集成需求

目前 Google 采取的是渐进式、选择性模块化策略,优先模块化那些:

  1. 非实时路径
  2. 相对独立的子系统
  3. 安全敏感组件
  4. 新硬件支持

这种务实做法确保了 Android 音频在保持性能的同时,逐步获得模块化的部分好处。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 7:23:12

CPT、SFT、DPO分别是什么

在大语言模型&#xff08;LLM, Large Language Model&#xff09;的训练和对齐流程中&#xff0c;CPT、SFT、DPO 是三个关键阶段的缩写&#xff0c;分别代表&#xff1a;1. CPT&#xff1a;Continued Pre-Training&#xff08;继续预训练&#xff09;有时也称为 Domain-specifi…

作者头像 李华
网站建设 2026/4/30 8:11:34

RPA实现企业微信群成员信息抓取的技术难点

一、 引言&#xff08;Introduction&#xff09; 背景&#xff1a; 在企业微信外部群运营中&#xff0c;获取群成员的详细信息&#xff08;如昵称、企业认证状态、职务等&#xff09;是精细化运营的基础。官方API对此类信息的开放程度有限。 RPA的介入&#xff1a; RPA通过模拟…

作者头像 李华
网站建设 2026/4/29 22:45:26

43、Linux 编程:GNU 许可证与入门级 Shell 脚本编写

Linux 编程:GNU 许可证与入门级 Shell 脚本编写 1. Linux 编程中的调试与修复 在 Linux 编程里,调试是一项关键技能。以一个程序因段错误崩溃后的调试为例: (gdb) file dbgtst A program is being debugged already. Kill it? (y or n) y Load new symbol table from …

作者头像 李华
网站建设 2026/5/1 7:35:16

力扣 “两数之和” 最优解:哈希表 O (n) 时间复杂度实现详解

大家好&#xff0c;今天来讲解力扣经典入门题「两数之和」&#xff0c;分享如何用哈希表实现时间复杂度 O (n) 的高效解法。一、题目回顾给定整数数组 nums 和目标值 target&#xff0c;找出数组中和为 target 的两个整数&#xff0c;返回它们的下标。假设输入只有一个答案不能…

作者头像 李华
网站建设 2026/5/1 7:24:18

springboot+jspm高校考研自修室管理系统的设计与实现_g4fduxyz

目录已开发项目效果实现截图开发技术介绍系统开发工具&#xff1a;核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&…

作者头像 李华
网站建设 2026/5/1 3:14:27

机械手搬运工件:MCGS 7.7 与西门子 200 SMART PLC 以太网通讯实例

机械手搬运工件mcgs7.7和西门子200SMART型PLC以太网通讯例子带io表在自动化控制领域&#xff0c;实现上位机软件与 PLC 的稳定通讯是构建高效控制系统的关键。今天就来分享一个机械手搬运工件场景下&#xff0c;MCGS 7.7 和西门子 200 SMART 型 PLC 通过以太网通讯的例子&#…

作者头像 李华