- 博客(35)
- 收藏
- 关注
原创 安卓HAL接口技术之HIDL&AIDL
的引入解决了传统 HAL 的稳定性问题,但 HIDL 本身也存在不足:它是一套全新的、与 Android 传统 Binder/AIDL 并行的机制,学习成本高,且与 Java 层的 AIDL 生态不统一。传统 libhardware(进程内,无契约)→ HIDL(独立进程,.hal 契约)→ AIDL(独立进程,.aidl 契约,统一生态)。到 Android 13/14,绝大多数 HAL 接口已经或正在迁移到 AIDL,HIDL 处于冻结状态(不再新增功能,仅维护)。
2026-09-04 09:51:17
174
原创 DRM核心函数说明
创建具有显式像素格式的帧缓冲区(支持多plane): 打开DRM设备并返回用于后续操作的文件描述符。: 主状态返回1 ,非主状态返回0 ,错误返回-1。: 处理未决的DRM事件(翻页、vblank)。: 使用格式修改器(平铺、压缩)创建帧缓冲区。: 关闭之前打开的DRM设备并释放相关资源。: 检索DRM设备上可用的所有模式设置资源.: 为构建原子提交分配一个新的原子请求对象。: 获取模式设置操作所需的DRM主状态。: 为基于fence的同步创建同步对象。: 从GEM缓冲区对象创建帧缓冲区.
2026-05-18 14:38:08
353
原创 DRM-Direct Rendering Manager
DRM接收到原子事务后,会按照事务中的配置信息,控制CRTC从相应的Framebuffer中读取数据,并通过Connector将数据输出到显示设备,完成画面的显示。例如,在安卓系统中,多个应用程序同时运行时,DRM可以将各个应用的界面图层进行合成,最终呈现出一个完整的显示画面,而FB架构则需要将所有内容绘制到一个单一的帧缓冲中,效率低下且难以实现复杂的界面效果。而DRM通过统一的架构和接口,将GPU和Display驱动整合在一起,降低了开发和维护的成本,同时也提高了系统的兼容性和稳定性。
2026-05-14 16:36:25
365
原创 SystemFeature系统特性
系统Feature定义在frameworks/native/data/etc目录下,该目录下的xml文件会被打包复制到系统镜像system/etc/permissions目录下,可以在frameworks/native/data/etc中添加自定义的xml文件,并将该xml文件复制到系统镜像;feature目录一般在: framework/native/data/etc 、 frameworks/base/data/etc以及厂商自定义的device/厂商 路径下。二、添加自定义Feature。
2026-05-13 15:55:24
255
原创 安卓音频低延时与AAudio
音频延迟是指“音频数据产生→硬件发声”或“硬件拾音→数据上抛”的总耗时,传统AudioTrack/AudioRecord链路延迟普遍在,远超实时场景≤45ms的要求。要实现低延迟,必须解决四大问题,AAudio正是围绕这几点设计的原生解决方案。AAudio 是在 Android O 版本中引入的全新 Android C API。此 API 专为需要低延迟的高性能音频应用而设计。AAudio。
2026-04-29 16:55:16
601
原创 安卓StorageManagerService
它作为连接应用层、Framework层与底层存储硬件的重要桥梁,统一管控设备的所有存储资源,包括内部存储、外部SD卡、USB存储设备等,为系统组件和应用提供标准化的存储操作接口,并实现存储安全、存储优化等高级特性。:在应用访问存储文件时,FUSE文件系统可以拦截访问请求,交由StorageManagerService进行权限验证,实现精细化的存储访问控制。:以StorageManager类为核心,为应用提供存储访问的入口,封装了与StorageManagerService的跨进程通信逻辑。
2026-04-22 15:48:52
471
原创 安卓vold服务
Vold(Volume Daemon)即卷守护进程,是Android系统中具有root权限的,处于Kernel和Framework之间,是连接底层硬件与上层应用的重要桥梁,主要为应用存储文件提供服务。
2026-04-21 09:59:27
606
原创 安卓USB服务概述
一、USB基础知识USB(Universal Serial Bus,通用串行总线)是一种广泛应用于电子设备的接口标准,旨在实现设备间的高速数据传输、供电和通信。它具有热插拔、即插即用、统一接口等优势。USB通信的核心是,它是设备与主机间的数据传输通道。每个USB设备包含一个或多个,每个接口又包含多个端点,通常分为输入端点(从设备到主机)和输出端点(从主机到设备),支持批量传输、中断传输、控制传输和等时传输四种传输类型。二、UsbService概述。
2026-04-17 08:54:07
554
原创 安卓音频接口从APP到Hal的调用流程
DeviceHalAidl和DeviceHalHidl都继承了DeviceHalInterface方法,一个是基于AIDL,一个是基于HIDL,本文是基于安卓14的源码,用的是依然是HIDL(见FactoryHal.cpp中sAudioHALVersions 的定义,并未把AIDL放开),HIDL和AIDL的区别以及HAL的版本迭代会在后续的篇章中单独具体的说明。+++++++++++++++++++++++++中断分割线++++++++++++++++++++++++++++++++++
2026-04-16 08:39:32
429
原创 dumpsys media.audio_flinger指令详解
是Android音频调试领域的核心指令之一,主要用于获取AudioFlinger服务的详细状态信息。AudioFlinger作为Android音频系统中负责音频数据处理和播放的核心服务,承担着音频混合、硬件交互等关键任务,该指令输出的信息是深入分析音频底层运行机制的重要依据。核心源码:/frameworks/av/services/audioflinger/AudioFlinger.cpp。
2026-04-15 08:09:20
472
原创 dumpsys audio指令详解
是Android系统内置的音频诊断工具,通过调用AudioService的dump方法,输出系统音频服务的完整运行时状态。AudioService作为音频系统的"总控台",运行在system_server进程中,负责管理音量调节、音频焦点、设备连接等核心策略,其输出信息可直观反映音频系统的实时状态。核心源码:/frameworks/base/services/core/java/com/android/server/audio/AudioService.java。
2026-04-14 09:02:00
575
原创 dumpsys media.audio_policy指令详解
dumpsys media.audio_policy是Android音频开发中用于调试音频策略的核心命令,它能输出AudioPolicyService的运行状态与配置信息。输出展示了 Android 音频策略系统在当前时刻的状态:当前系统中主音频输出流的句柄(mPrimaryOutput->mIoHandle)这个句柄是 AudioFlinger 用来标识特定音频输出流的唯一标识符,通常对应一个实例。它表明系统已经初始化并打开了一个主音频输出通道。
2026-04-13 08:33:42
506
原创 深度分析audiopolicy之Engine.cpp
为什么要分析Engine.cpp呢?前面的篇章中介绍过APM是策略决策的核心(参见一章),而是APM的核心决策单元,承担音频策略计算、设备选择、路由决策的核心工作。Engine.cpp实现Engine.cpp默认路径:,对应头文件为Engine.h,继承自EngineBase基类。
2026-04-10 09:39:33
651
原创 pcm_config参数&pcm函数说明
TinyALSA是一款轻量级Linux音频库,是标准ALSA库的精简实现,专为嵌入式系统、Android等资源受限平台设计,专注于提供简洁的PCM音频采集、播放接口,屏蔽了内核ALSA驱动的复杂操作,大幅降低音频开发门槛。本文档聚焦TinyALSA核心与,详细解析结构体成员含义、API接口功能、参数用法、调用流程及实战示例。
2026-04-09 09:43:24
548
原创 安卓音频子系统之USBAlsaManager
USBAlsaManager 作为安卓系统中 USB 音频设备与 ALSA(Advanced Linux Sound Architecture)框架衔接的核心管理组件,负责 USB 音频设备的枚举、识别、状态管理、与音频服务交互等关键工作,是实现 USB 声卡、USB 麦克风、USB 耳机等外设音频功能的核心枢纽。USBAlsaManager 隶属于安卓与。
2026-04-07 14:32:22
754
原创 安卓音频子系统之Audio Patch
Audio Patch是安卓音频系统中用于的核心机制,本质是建立音频源(Source)与音频汇点(Sink)之间的固定或动态通路,将音频数据流从一个/多个源端口精准路由至一个/多个目标端口,是实现音频设备切换、多路混音、低延迟直通等功能的基础。Audio Patch隶属于安卓音频框架层,核心由和协同管理,向下对接Audio HAL层,向上承接应用层音频请求,是连接上层策略与底层硬件的关键枢纽。
2026-04-02 08:41:44
774
原创 安卓音频子系统之音频属性AudioAttributes
是 Android Lollipop(API 21)引入的核心音频抽象,用于描述音频流的用途和特性,而非具体的音频格式或硬件配置。它取代了旧的流类型系统,提供了更灵活、更精确的音频行为控制机制。
2026-04-01 08:26:26
413
原创 安卓VINTF机制
VINTF指的是Vendor Interface object,是Android 8.0(Oreo)伴随项目推出的核心兼容性验证机制,是一套基于XML声明的标准化接口描述与校验框架,通过定义设备硬件抽象层(HAL)、内核、系统服务的接口规范,强制验证Android框架层(Framework,System分区)与供应商实现层(Vendor,Vendor/ODM分区)之间的接口兼容性,确保二者可独立升级且正常协同工作。
2026-03-31 14:16:38
1066
原创 安卓音频子系统之AudioPolicyService
是Android音频系统的,与AudioFlinger(AF)同驻进程,二者分工协作构成音频系统核心。如果说AudioFlinger负责,AudioPolicyService则负责,是音频策略决策、设备路由、焦点管理、场景管控的核心入口。APS与AF是典型的:决策层,处理音频焦点抢占、设备选择、音量策略、场景切换、权限校验:执行层,接收APS指令,完成Track创建、线程分配、混音、硬件数据下发。没有APS的策略决策,AF就算性能再强,也不知道音频该输出到扬声器、耳机还是蓝牙设备。
2026-03-26 15:12:09
1023
原创 安卓音频子系统之AudioFlinger
AudioFlinger(简称AF)是Android原生音频系统Native层核心服务,运行于audioserver进程,是衔接上层应用音频请求与底层硬件驱动的中枢。它承担App音频数据、管理音频流、混音、重采样、路由、格式转换、音效、流管控等核心职责,相当于系统级音频混音台,统筹多音源并发播放与录制,保障音频输出稳定无冲突。 AudioFlinger源码集中于AOSP ,核心文件及功能:AudioFlinger.cpp/h:服务入口、全局管理、Binder对外接口实现Threads.cpp/
2026-03-25 09:32:26
1206
原创 安卓音频子系统之AudioService&audioserver
在音频系统概述一篇明确了安卓音频子系统的分层逻辑,认识了音频双核心:AudioPolicyService(大脑)和AudioFlinger(心脏)。本篇将基于安卓14的源码,带着大家了解音频服务启动全流程个,AudioService启动时机、audioserver进程孵化逻辑、双核心服务绑定流程。 首先破除一个常见误区:AudioService ≠ 音频核心服务,它只是Framework层的“代理入口”,真正处理音频逻辑的AudioPolicyService、AudioFlinger,都运行在
2026-03-23 15:20:25
571
原创 安卓音频之Native AudioTrack&AudioRecord实战
在 Android 系统中,AudioTrack和是用于音频播放和录制的核心类,它们在 Java 层和 Native 层都有对应的实现。Native 层的实现更接近硬件,能够提供更低的延迟和更高的性能,适用于对实时性要求较高的音频处理场景。Native C++的AudioTrack.cpp和AudioRecord.cpp源码在frameworks/av/media/libaudioclient/路径下,属于libaudioclient.so。本文将使用这两个类用C++实现录音与播放。
2026-03-13 09:28:31
906
原创 Android打印函数调用栈的一种debug方式
在开发或者解决缺陷过程中,有时候需要梳理函数的调用流程,一种方式是通过全局查找函数,但遇到一些同名的函数或者多个地方都调用的时候就需要通过增加打印等方式来进行判断,本文提供另一种通过打印函数调用栈的方式来查看函数的调用流程。
2026-03-12 10:01:04
427
原创 安卓音频系统概述
Android音频系统采用分层架构设计,各层协同工作完成音频的采集、处理、播放等功能。应用层(Application)框架层(Framework)本地库层(Native libraries)HAL层(Hardware)内核层(Kernel)
2026-03-11 09:21:42
560
原创 安卓AIDL技术实践
首先,创建一个表示图书信息的自定义类Book,并实现Parcelable接口以支持跨进程序列化。// 构造方法、Getter/Setter省略...@Override@Override@Override// describeContents方法省略...同时,需创建同名AIDL声明文件Book.aidl创建文件,声明服务提供的方法。注意,对于自定义的Book类型,需要使用import语句显式导入。编写完成后,执行项目构建(如。
2026-03-09 14:29:24
628
原创 安卓SElinux(SEAndroid)
SELinux(Security-Enhanced Linux)是一种强制访问控制(MAC)安全模块,最初由美国国家安全局(NSA)开发,旨在增强Linux及Android系统的安全性。它通过为系统中的进程、文件和其他资源分配安全标签(Security Context),并依据预定义的安全策略来控制访问权限。从Android 4.3开始,Google开始在Android系统中引入SELinux,并将其命名为SEAndroid。
2026-03-05 12:09:52
468
原创 安卓JNI(Java Native Interface)
在Android系统中,Java运行在虚拟机之上,而操作系统的底层功能多由C/C++实现,JNI就成为了连接这两层的关键纽带,让Java代码能够调用系统底层的硬件操作、高性能算法等功能,同时也允许底层代码反向调用Java层逻辑。 native代码想要访问java虚拟机需要调用JNI方法,而获取JNI方法则通过JNI interface Pointer,它实际指向的就是一个都是指针的数组,每个指针指向的都是一个接口函数,接口函数可以使用C/C++等实现。V 表示 void (无返回值);
2026-03-04 10:46:01
461
原创 安卓系统启动流程
安卓设备上电后执行Boot ROM,加载Bootloader,启动分区,然后启动Linux内核,Kernel启动过程中会创建init进程,该进程是所有用户空间的鼻祖,init进程会启动servicemanager(binder服务管家)和Zygote进程(Java进程的鼻祖)。Zygote进程会启动system_server进程以及各种app进程。
2026-03-02 10:45:58
622
原创 Android makefile
Android makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,甚至于进行更复杂的功能操作。Android.mk是编译系统解析一次或多次的微小GNU makefile片段,用于定义编译系统和环境变量所未定义的项目范围设置。Android.bp是从Android 7.0开始引入,逐步替换Android.mk。
2026-03-01 13:55:55
614
原创 git常用指令
1.解决完一个补丁应用的冲突后,执行下面命令标记冲突已解决(也就是把修改内容加入缓存):git add -u //注:-u 表示把所有已track的文件的新的修改加入缓存,但不加入新的文件。1.解决完一个补丁应用的冲突后,执行下面命令标记冲突已解决(也就是把修改内容加入缓存):git add -u //注:-u 表示把所有已track的文件的新的修改加入缓存,但不加入新的文件。注:cherry-pick之后,不需要执行commit,也不存在新的修改需要提交,都是git自动完成。直接git push即可)
2026-02-28 09:57:46
1119
原创 安卓系统框架
Android运行时 用于执行应用代码,包括:核心库(Core Libraries):提供Java API支持和 ART虚拟机:替代Dalvik,支持AOT/JIT编译,提升性能,每个Android程序都有一个ART虚拟机的实例。提供开发应用所需的Java API,涵盖四大组件(Activity、Service、BroadcastReceiver、ContentProvider)、界面绘制(View系统)、资源管理等。• 驱动(Display/Camera/Bluetooth等)。
2026-02-28 09:23:09
370
原创 增加自定义的keycode
在frameworks/native/libs/input/InputDevice.cpp中会首先先根据设备的vid和pid查找vendor_vid_product_pid.kl文件,依次从/product/usr, /system_ext/usr,/odm/usr ,/vendor/usr,make api-stubs-docs-update-current-api 、 make api-stubs-docs-non-updatable-update-current-api(安卓11)
2026-02-27 15:32:36
345
原创 安卓framework常用调试指令汇总
logcat是Android中的一个命令行工具,可以用于得到程序的log信息。logcat的使用方法如下所示:[<options>]命令包括如下选项:-s:设置输出日志的标签,只显示该标签的日志,如 我们想要输出“System.out”标签的信息,就可以使用logcat -s System.out命令;-f:将日志输出到文件,默认输出到标准输出流中;-r:按照每千字节输出日志,需要-f参数;-n:设置日志输出的最大数目,需要-r参数,这跟logcat单指令不带参数的效果类似;
2026-02-27 14:27:13
497
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅