不一样的Android体系架构

本文深入解析Android系统的五层架构:应用程序框架、进程通信层、系统服务层、硬件抽象层及Linux内核。通过Audio模块实例,阐述各层间的交互与功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    本文讲述的Android系统体系架构,是指应用层之下的整个系统内部的架构层级关系。而并非常说的4层架构:应用层,framework,运行库与环境,Linux内核,而是把系统内部的流程调用划分更加详细。

一、架构

Android系统体系架构图:

            

Android系统体系架构分为5层,自顶而下分别是:

  • 应用程序框架(Application Framework)
  • 进程通信层(Binder IPC)
  • 系统服务层(Android System Services)
  • 硬件抽象层(HAL)
  • Linux内核(Linux Kernel)

1.1 应用程序框架(Application Framework)

应用框架,对于App开发者使用最为频繁。而硬件开发者,只需要认识到这些APIs是HAL层接口的映射就可以了。

1.2 进程通信层(Binder IPC)

Binder Inter-Process Communication(IPC),进程间通信机制允许framework来跨进程边界,来调用Android的系统服务的代码,这使得框架API与Android系统服务能够进行交互。对于开发者来说,这种通信机制是隐藏的。

1.3 系统服务层(Android System Services)

功能是通过framework APIs与系统服务通信,以实现底层硬件的访问。服务是模块化的,主要部件如Window Manager, Search Service,或者Notification Manager.Android包括两类服务:系统服务(如Window Manager,Notification Manager)和媒体服务(包括播放和录制的媒体服务)。

1.4 硬件抽象层(HAL)

硬件抽象层(HAL)定义了一个标准接口用于硬件厂商的实现. HAL允许功能实现,而不会影响或修改上层的系统。HAL的实现被打包成模块(.so)文件,并在适当的时候被加载进Android系统。

           

硬件抽象层组件

  • 标准HAL结构 每个特定的硬件HAL接口特性被定义在hardware/libhardware/include/hardware/hardware.h,这保证HAL具有可预测的结构。该接口允许Android系统来加载相应HAL模块的正确版本。HAL接口有两个通用组件:模块与设备。

  • HAL模块 HAL的实现被用于构建成模块(.so)文件,并在适当的时机通过Android动态链接到系统。你可以通过为每一个HAL的实现创建Android.mk文件并指向源码文件,来实现将其构建到系统中。一般来说,你的共享库必须被命名为符合规定的格式,以保证他们能被找到被正确加载。命名模式为为 <module_type>:<device_name>.

1.5 Linux内核(Linux Kernel)

开发设备驱动程序类似于开发一个典型的Linux设备驱动程序。Android使用Linux内核,再加上一些特殊的特性,如wake locks, Binder IPC驱动,以及用于移动嵌入式平台重要的其他功能。这些增加主要用于系统功能,而不会影响驱动程序的开发。


二、实战

对于Android的体系结构,通过上面的讲解,还是比较抽象,下面将通过具体的一个模块Audio来举例说明。先展示一张Audio的体系结构图:

                    

  • Application framework, 应用程序框架包括使用android.media API与audio硬件交互的app代码。在内部,这个代码调用相应的JNI类来访问与audio硬件交互的native代码。

  • JNI, JNI代码关联android.media调用native代码来访问audio硬件. JNI代码位于frameworks/base/core/jni/frameworks/base/media/jni.

  • Native framework, native框架提供一个相当于android.media包的本地框架,调用IPC代理来访问媒体服务器的音频专用的服务。native框架代码位于frameworks/av/media/libmedia.

  • Binder IPC, IPC代理可跨进程通信,该代理位于frameworks/av/media/libmedia,并以字母”I”开头。

  • Media server,媒体服务包括audio服务,是真正与HAL实现层交互的代码。media server代码位于frameworks/av/services/audioflinger.

  • HAL,HAL定义了audio服务调用的标准接口,audio硬件必须正确实现的功能。 audio HAL层接口位于hardware/libhardware/include/hardware.关于更多可查看hardware/audio.h.

  • Kernel driver,audio驱动是与硬件和HAL实现的交互。可以使用Linux声音架构(ALSA),开发声音系统(OSS),或者自定义的驱动(HAL与驱动程序无关)。

三、小结

通过对Android体系的从上层到底层的一个梳理过程,希望能对andorid源码有完整的认识,对模块调用有一个较清晰的体会。

### Android传感器架构的设计与工作原理 Android 传感器架构是一种分层结构,旨在支持设备上的各种硬件传感器并提供统一的接口供应用程序访问。该架构主要由以下几个部分组成: #### 1. **传感器驱动程序** 传感器驱动程序位于操作系统的最低层,负责直接控制物理传感器硬件。这些驱动程序通常由芯片制造商开发,并通过标准接口向更高层次暴露数据[^1]。 #### 2. **传感器管理服务 (Sensor Manager Service)** 传感器管理服务运行在 Android 操作系统的核心框架中,作为桥梁连接底层硬件抽象层 (HAL) 和上层的应用程序接口 (API)[^2]。它处理来自多个应用的请求调度以及资源分配问题,确保高效的能源利用和性能优化。 #### 3. **硬件抽象层 (Hardware Abstraction Layer, HAL)** HAL 提供了一个标准化的方式让同的厂商可以实现自己的具体逻辑而需要修改整个操作系统代码库。对于传感器来说,这意味着即使各个手机品牌使用的可能是完全一样的实际感应器组件,只要遵循这个定义好的协议就能无缝接入到安卓生态里去[^3]。 #### 4. **Java API 层面的支持** 开发者可以通过调用 `android.hardware.Sensor` 类及其关联类来获取当前可用的所有类型的传感信息列表;还可以注册监听事件以便实时捕获变化的数据流。例如下面这段简单的 Java 示例展示了如何初始化 SensorManager 并设置加速度计回调函数: ```java // 获取默认的服务实例 SensorManager mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); // 定义感兴趣的特定种类sensor对象 Sensor mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); mSensorManager.registerListener(new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; Log.d("SENSOR", String.format("Acceleration X:%f Y:%f Z:%f",x,y,z)); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) {} }, mAccelerometer , SensorManager.SENSOR_DELAY_NORMAL); ``` 上述代码片段演示了基本的操作流程:先取得系统级 service 对象引用,再指定目标类别 type 的 instance 实例化之后就可以开始监控其状态更新情况了. ### 数据流动过程概述 当某个外部条件发生变化时(比如移动电话),相应的内置检测装置就会捕捉到这种改变并将原始数值传递给对应的 driver component 进行初步转换成可理解的形式后再逐级上报直至最终呈现给前端界面显示出来或者触发某些预设的动作响应机制完成闭环反馈循环体系构建.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kevin@1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值