当前位置: 首页 > news >正文

【AOSP 的分层设计理念与命名规范】

AOSP 的分层设计理念与命名规范

Android Open Source Project(AOSP)是一个庞大的操作系统工程,为了保证可维护性、可扩展性和跨设备适配性,它采用了 严格的分层架构设计。在不同层之间,AOSP 通过统一的 命名规范接口设计 来维持清晰的边界。


一、AOSP 的分层设计理念

AOSP 典型的分层模型可以分为以下几层:

1. 应用层(Application Layer)

  • 提供给第三方 App 或系统应用使用的公共 API。

  • 主要由 Java/Kotlin Manager 类 组成,例如:

    • AudioManager

    • CarAudioManager

    • BluetoothManager

这些类运行在应用进程中,本质是 Binder Client,调用会被转发到 System Server 层。


2. 系统服务层(System Server Layer)

  • system_server 进程 中运行的核心服务。

  • Java Service 类 实现,例如:

    • AudioService

    • CarAudioService

    • BluetoothService

这一层负责:

  • 权限校验(例如控制哪些 App 可以修改系统音量)

  • 策略调度(例如不同场景下音频路由规则)

  • 对接 JNI,调用 native 层服务


3. JNI/中间层(JNI Bridge Layer)

  • 通过 JNI(Java Native Interface)将 Java Service 层 的调用桥接到 native 层

  • 典型的命名方式为 XXXSystem,例如:

    • AudioSystem (Java ↔ native 之间的桥梁)

职责:

  • 将 Java 方法调用转换为 Binder IPC

  • 与 native 层的服务(如 AudioFlinger)交互


4. Native Daemon 层(Native Daemon Layer)

  • 由独立进程运行的 native 服务,通常进程名以 -server 结尾。

  • 例如:

    • audioserver

    • cameraserver

    • drmserver

这些进程负责与 HAL 和硬件交互,保证性能与稳定性。


5. Native Service 层(C++ Service Layer)

  • 运行在 Daemon 进程中的 C++ 类,一般命名为 XXXService

  • 例如:

    • AudioFlinger(负责音频混音和播放)

    • AudioPolicyService(负责音频策略和路由)

它们通过 Binder 向上层暴露接口,供 AudioSystem 调用。


6. HAL 层(Hardware Abstraction Layer)

  • 提供硬件抽象接口,通常遵循 HIDL/AIDL 规范。

  • 例如:

    • audio HAL → 控制 DSP、Codec 芯片

    • camera HAL → 驱动摄像头传感器


7. 内核层(Linux Kernel Layer)

  • 提供设备驱动、调度、内存和进程管理等基础功能。

  • HAL 通过内核驱动与真实硬件交互。


二、AOSP 的命名规范

Android 在不同层之间有明确的命名规则:

层级命名后缀示例特点
应用 API 层ManagerAudioManager, CarAudioManager面向 App 的公共接口
System Server 层Service (Java)AudioService, CarAudioService在 system_server 中运行,提供核心逻辑
JNI 桥接层SystemAudioSystemJava ↔ native 的桥梁
Native Daemon 进程xxxserveraudioserver, cameraserver独立进程,运行多个 native Service
Native Service (C++)ServiceAudioFlinger, AudioPolicyService真正的资源管理与硬件交互
HAL 层接口HAL / HIDL/AIDL 接口audio HAL, camera HAL硬件抽象层
内核驱动Linux 驱动名snd_soc_xxx, camera_xxx最底层,驱动硬件

三、以 Audio 为例的完整调用链

App 层│▼
AudioManager (App API)│ Binder 调用▼
AudioService (System Server)│ JNI 调用▼
AudioSystem (JNI 桥接)│ Binder IPC▼
audioserver (native daemon)├── AudioFlinger (音频混音/播放/录音)└── AudioPolicyService (音频路由/策略)│▼
Audio HAL (HIDL/AIDL 接口)│▼
Linux Kernel Driver → 硬件 Codec/DSP

四、车载扩展 (Car Audio)

车载系统在标准 Android Audio 体系上扩展了 CarAudio 模块:

  • CarAudioManager → 提供给车载应用的 API

  • CarAudioService → 在 system_server 中运行,管理多音区、多音源策略

  • 底层依然复用标准的 AudioManager / AudioServiceaudioserver

这样保证了 车载需求(多区域音频、乘员区控制)Android 标准框架 的兼容性。


五、总结

  • 分层设计理念:AOSP 采用 Manager → Service → System → xxxserver → HAL → Kernel 的清晰分层,保证模块解耦和跨设备可扩展性。

  • 命名规范

    • Manager → API 层

    • Service (Java) → System Server 层

    • System → JNI 桥接层

    • xxxserver → Native Daemon 进程

    • Service (C++) → Native Service

    • HAL → 硬件抽象层

这种分层和命名方式,使 Android 可以 统一对外 API,同时 灵活适配不同硬件平台,尤其在车载系统中,可以扩展 CarAudio 但不破坏整体框架。


文章转载自:

http://tIc7BuC6.zgnng.cn
http://0DpAhbsO.zgnng.cn
http://jFzqegob.zgnng.cn
http://rI7RxKDS.zgnng.cn
http://oQvCgwwU.zgnng.cn
http://NDSWOoNY.zgnng.cn
http://C545Ds05.zgnng.cn
http://LozQsFcA.zgnng.cn
http://HI94OGre.zgnng.cn
http://D8Edw0M7.zgnng.cn
http://bFb9BjCF.zgnng.cn
http://F75hctAR.zgnng.cn
http://7KJqNRAe.zgnng.cn
http://qfkw51Xs.zgnng.cn
http://jsY4shJx.zgnng.cn
http://JzorZ8ZG.zgnng.cn
http://Fk1Dc73I.zgnng.cn
http://p60SELgl.zgnng.cn
http://EZYmraoL.zgnng.cn
http://5GXSKEI3.zgnng.cn
http://O5Zzf2yP.zgnng.cn
http://aPUzsPuA.zgnng.cn
http://RFYMgCWD.zgnng.cn
http://vYtjRYg8.zgnng.cn
http://TBQufS0Y.zgnng.cn
http://cZqRuvC3.zgnng.cn
http://iLMrSSod.zgnng.cn
http://H0h3qSEi.zgnng.cn
http://hmBECkYK.zgnng.cn
http://qDAnz0NQ.zgnng.cn
http://www.dtcms.com/a/376188.html

相关文章:

  • Docker 清理完整指南:释放磁盘空间的最佳实践
  • 进程状态(Linux)
  • Linux负载如何判断服务器的压力
  • 【网络编程】从与 TCP 服务器的对比中探讨出 UDP 协议服务器的并发方案(C 语言)
  • 第4讲 机器学习基础概念
  • 新加坡服务器连接速度变慢应该做哪些检查
  • Elasticsearch启动失败?5步修复权限问题
  • HR软件选型指南:SaaS还是本地部署好?
  • 基于51单片机简易计算器仿真设计(proteus仿真+程序+嘉立创原理图PCB+设计报告)
  • matlab基本操作和矩阵输入-台大郭彦甫视频
  • Power BI制作指标达成跟踪器
  • 邪修实战系列(3)
  • Mac m系列芯片向日葵打不开 解决方案
  • 【Unity Shader学习笔记】(七)顶点着色器
  • 宋红康 JVM 笔记 Day16|垃圾回收相关概念
  • 信号与系统
  • 第十四届蓝桥杯青少组C++选拔赛[2023.2.12]第二部分编程题(5、机甲战士)
  • NW597NW605美光固态闪存NW613NW614
  • C语言-指针用法概述
  • Jakarta EE课程 微型资料投递与分发 实验指导(付完整版代码)
  • 基于autoawq进行qwen3 的awq量化
  • ⸢ 肆 ⸥ ⤳ 默认安全建设方案:c-2.增量风险管控
  • Windows系统下KingbaseES数据库保姆级安装教程(附常见问题解决)
  • Python实现讯飞星火大模型Spark4.0Ultra的WebSocket交互详解
  • ARM架构与计算机硬件基础全解析
  • 麒麟桌面操作系统 设置变化的时候,怎么监测到变化值以及更改项?
  • Reactor模式
  • Java-Spring入门指南(五)Spring自动装配
  • 必知必会:词向量构建方法(Word2Vec、ELMo、BERT)、聚类性质的句子向量构建方法(SBERT、SimCSE )
  • 查找算法(Java)