Open Headunit Protobuf消息体系:9个.proto文件定义Android Auto通信语法

发布时间:2026/9/18 19:47:58

Open Headunit Protobuf消息体系:9个.proto文件定义Android Auto通信语法 Open Headunit Protobuf消息体系9个.proto文件定义Android Auto通信语法【免费下载链接】open-headunitHeadunit App for displaying Android Auto项目地址: https://gitcode.com/GitHub_Trending/he/open-headunitOpen Headunit 是一款开源的 Android Auto 车机接收端应用能把 Android 平板或手机变成 Android Auto 主机。它背后最容易被忽略、却决定一切的功能是 proto/ 目录下的9 个文件8 个.proto协议定义 1 个protoc生成脚本——手机和车机之间的每一条握手、每一帧导航、每一个触摸事件都用 Protobuf 消息语法精确定义。为什么是 ProtobufAndroid Auto 的手机端并不公开完整的协议文档但它的线上传输格式是 Protocol Buffers简称 Protobuf。Open Headunit 通过逆向分析用 9 个文件重建了整套通信语法跨平台同一份.proto定义可生成 Java/Kotlin 代码App 端直接序列化发送⚡体积小二进制编码比 JSON 紧凑得多适合车载实时通道可读性强每个消息字段都有编号注释里还记录了与真实手机抓包交叉验证的结果。所有文件都声明syntax proto2统一位于包com.andrerinas.openheadunit.aap.protocol.proto下编译后生成同名 Java 外层类如Control、Media、Input供 AapMessageHandler.kt 等消息处理器直接调用。9个文件全景一张表看懂分工文件角色典型消息common.proto公共错误码与车机身份MessageStatus、HeadUnitInfocontrol.proto控制平面连接生命周期服务发现、开/关通道、Pingwireless.proto无线投屏握手WPPWi-Fi 凭证、协议版本input.proto按键与触摸事件上报KeyEvent、TouchEventmedia.proto音视频流协商编码器、麦克风、视频焦点navigation.proto仪表盘导航显示下一个转弯、剩余距离playback.proto媒体播放状态歌曲元数据、播放状态sensors.proto车辆传感器数据车速、档位、油耗gen.sh用protoc批量生成 Java 类—逐个拆解每个文件定义了什么1️⃣ common.proto错误码字典任何响应消息都会带一个MessageStatuscommon.proto 第5-39行定义了从STATUS_SUCCESS到STATUS_PING_TIMEOUT等 30 余种状态码覆盖证书错误、蓝牙配对失败、内存不足等几乎所有异常场景。它还定义了HeadUnitInfo车机向手机申报品牌、车型、年份。一个有意思的细节是注释里写明——vehicle_type字段是车机声明我是摩托车的唯一途径手机端会据此决定是否使用自己的麦克风。2️⃣ control.proto连接生命周期的总指挥这是最大的文件定义了ControlMsgType枚举版本协商MESSAGE_VERSION_REQUEST→ 服务发现MESSAGE_SERVICE_DISCOVERY_*→ 开通道MESSAGE_CHANNEL_OPEN_*→ 心跳MESSAGE_PING_*→ 告别MESSAGE_BYEBYE_*。其中 ServiceDiscoveryResponse 是车机自我介绍的核心消息包含车型信息、驾驶员座位位置左舵/右舵以及每个服务的能力卡片MediaSinkService车机能解码的音视频配置分辨率从 800x480 到 4K支持 H.264、HEVC、VP9、AV1 等编码类型InputSourceService支持哪些按键、触摸屏尺寸BluetoothService/PhoneStatusService/WifiProjectionService等。3️⃣ wireless.proto无线连接前的蓝牙暗号投屏开始前手机和车机先通过蓝牙RFCOMM完成 WPPWiFi Projection Protocol握手wireless.proto定义了 11 类消息WifiStartRequestType 1车机告知手机投屏会话的地址和端口WifiInfoRequest/ResponseType 2/3手机索取并收到 Wi-Fi SSID 和密码WifiVersionRequest/ResponseType 4/5双方交换协议版本与车机身份WifiConnectStatusType 6手机回报我连上你的网络了失败时还附错误提示。文件头部的注释值得细读作者说明每个字段都与参考实现和真实抓包交叉核对过甚至记录了手机实际回 -8 而非预期值这类抓包细节——这是逆向工程文档化的典范。4️⃣ input.proto你的每一次触摸车机触摸屏的每个动作都被打包成InputReport消息上报TouchEvent按下/抬起/移动/多点触摸、KeyEvent物理按键、AbsoluteEvent与RelativeEvent摇杆等相对/绝对位移以及按键绑定请求。手机端正是靠这套语法知道你在车机上点了哪里。5️⃣ media.proto音视频流的合同media.proto 定义了MEDIA_MESSAGE_START/STOP/SETUP等控制帧以及MediaCodecType枚举PCM、AAC、H.264、VP9、AV1、H.265。AudioConfiguration约定采样率、位深、声道数VideoFocusRequestNotification处理手机切回原生界面时的画面焦点移交MicrophoneRequest甚至细化到回声消除EC与降噪ANC开关。投屏成功后车机会用这张测试图校验视频渲染通道6️⃣ navigation.proto让仪表盘学会导航MsgType定义了INSTRUMENT_CLUSTER_*系列消息开始/停止导航、下一转向详情左拐、环岛、上下匝道共 20 余种NextEvent、转弯距离与时间含米/英里/码等单位。手机端据此在方向盘后的仪表屏上显示转向图标。7️⃣ playback.proto 与 8️⃣ sensors.proto状态回传playback.protoMediaMetaData携带歌名、歌手、专辑封面MediaPlaybackStatus报告播放/暂停/随机模式车机媒体卡片由此更新sensors.protoSensorBatch是一个数据篮可批量装定位、车速、转速、油耗、档位含 P/R/N/D、GPS 卫星数等 21 种传感器注释还诚实标注了哪些传感器已可用/尚未支持。9️⃣ gen.sh一行命令生成全部 Java 类gen.sh 是 9 个文件中的第 9 位它调用protoc依次编译 8 个.proto文件把 Java 类输出到../java/源码目录。这正是定义即代码——协议变更时跑一次脚本序列化/反序列化代码自动就绪。一次投屏中这些消息如何流转手机 ⇄ 车机蓝牙/Wi-Fi 通道 1. WifiVersionRequest —— 交换协议版本 2. WifiInfoResponse —— 下发 SSID 与密码 3. WifiConnectStatus —— 手机回报入网成功 4. Version/ServiceDiscovery —— 车机申报身份与服务能力 5. ChannelOpenRequest —— 按服务打开数据通道 6. 流数据导航帧、媒体帧、传感器批次…… 7. Ping / ByeBye —— 保活与优雅断开控制平面的消息类型统一由 MsgType.kt 与 Channel.kt 做分发与映射想深入某条链路的处理逻辑可以从 aap/ 目录的AapMessageHandler.kt入手。写在最后9 个文件、不到 1500 行定义构成了 Open Headunit 与 Android Auto 手机端的完整契约。对于想理解 Android Auto 协议、或为自己车机做协议扩展的开发者从 common.proto 的错误码读起、再沿 control.proto 的服务发现走一遍是成本最低的一条学习路径。【免费下载链接】open-headunitHeadunit App for displaying Android Auto项目地址: https://gitcode.com/GitHub_Trending/he/open-headunit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/18 19:42:58

安卓GSI通用镜像刷入与第三方ROM移植Bug修复指南

玩安卓玩到一定阶段,早晚会碰到那道分水岭:原厂固件用腻了,社区里的整包ROM又迟迟等不到人适配自己手里的冷门机型。这时候很多人会把目光投向GSI,也就是通用系统镜像。它的思路很直接,把system分区做成一份相对通用的…

2026/9/18 19:42:58

SQL Server 2012 安装与启动:常见问题排查与配置指南

简介:这份 PDF 是一份面向数据库初学者的 SQL Server 2012 安装与启动图文指南,解决从零搭建数据库环境和首次连接管理的常见困惑。教程实测于 Win7 企业版 64 位与 Win10 专业版 64 位,安装环节从功能勾选“全部”讲起,重点说明了…

2026/9/18 23:03:07

WeWe RSS:把公众号变成 RSS 订阅源,5 分钟私有部署全记录

WeWe RSS:把公众号变成 RSS 订阅源,5 分钟私有部署全记录 【免费下载链接】wewe-rss 🤗更优雅的微信公众号订阅方式,支持私有化部署、微信公众号RSS生成(基于微信读书) 项目地址: https://gitcode.com/Gi…

2026/9/18 23:03:07

Python for循环中删除列表元素的正确姿势与迭代器原理

1. 先看一个最常见的翻车现场1.1 删除元素时的经典坑很多新手在刚接触Python的时候,都干过这么一件事:写一个for循环,想在循环里把满足条件的元素从列表里删掉。看起来逻辑没有任何问题,代码简洁,思路直接,…

2026/9/18 22:58:07

PyWxDump环境配置完全指南:4条命令跑起来,3件事用得安全

PyWxDump环境配置完全指南:4条命令跑起来,3件事用得安全 【免费下载链接】PyWxDump 删库 项目地址: https://gitcode.com/GitHub_Trending/py/PyWxDump 照着文档装完,终端里一敲 wxdump info 就抛 ImportError,这是装完 Py…

2026/9/18 14:13:01

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/18 0:01:09

Google Colab 实战:运行模型、数据加载与报错排查

1. 为什么我劝你先搞懂 Colab 的运行模型1.1 Colab 到底是什么,跟本地跑代码差在哪Google Colab 简单说就是一台跑在浏览器里的 Linux 虚拟机,你打开一个 Notebook,背后就连上了一台带 GPU 的远程机器。你在单元格里敲的每一行 Python&#x…

2026/9/18 0:01:09

C语言数据类型与表达式详解

1. C语言数据与数据类型概述在C语言编程中,数据是程序处理的核心对象。理解数据的分类和特性是掌握C语言的基础。C语言中的数据主要分为四大类:常量、变量、表达式和函数。这些数据类型构成了C语言程序的基本元素,每种类型都有其独特的特性和…

2026/9/18 0:01:09

SQL时间字段指定时间段查询:区间语义、索引与时区避坑

上周排查一个线上问题&#xff0c;用户反馈"昨天的订单一条都没查到"&#xff0c;但数据库里明明躺着两千多条。最后定位下来&#xff0c;不是数据丢了&#xff0c;也不是接口挂了&#xff0c;而是那个查询条件把时间段写成了> 2024-05-20 00:00:00 AND < 2024…

2026/9/18 14:13:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/18 14:13:02

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/18 14:13:02

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码