Android 手机端车辆互联与 TPMS 仪表实验项目,重点面向 2015/2016 Hyundai Tucson TL 1.6T G4FJ 与支持百度 CarLife 的现代/起亚车机。
这是一个面向自有车辆、互操作研究和停车调试的实验项目。它不是百度官方 CarLife 客户端,也无法把 Android 手机合法地伪装成 Apple CarPlay 设备。
当前源码版本:0.19.0(开发版本,Android 8.0+,当前 APK 仅包含 ARM64)。最近完整设备验证记录对应 0.18.0。
电脑端 CarLife 模拟接收器与用法见 desktop-headunit,支持通过 ADB 接收手机或 Android 模拟器上的 APP 视频,也可在没有手机时运行本地自检。
0.15.0 手机首页实机截图,背景延伸到顶部状态栏与底部手势区。
- 支持实验性导航投屏:系统授权共享导航应用或屏幕后,通过现有 CarLife 视频通道显示;可恢复胎压仪表,后台车辆采集继续运行。
- Android 前台服务维持 CarLife TCP 通道和 WiFi ELM327 连接,并持有 CPU / WiFi 锁。
- 在手机与 CarLife 车机之间建立本地 TCP 通道,发送 H.264 仪表画面。
- 通过 WiFi ELM327 轮询 Hyundai Mode 21 TPMS 数据,分别显示四轮胎压与胎温。
- 读取标准 OBD-II 燃油数据,显示实时油耗、本次消耗量、油价和本次消费;胎压不可用时继续读取燃油。
- 六个手机页面采用液态玻璃风格卡片、渐变背景与自适应操作区;手机仪表采用浅色玻璃,车机仪表保持深色玻璃。
- 页面背景延伸到状态栏和手势区,按钮与输入区避开系统栏、摄像头和软键盘。
- 手机首页提供唯一的功能入口;连接页支持独立轮胎卡片、可折叠日志和后台运行设置。
- 支持自定义欢迎标题、油价省份和汽油标号,保存 ELM327 地址与端口。
- 缺失或过期数据显示 N/A 或“—”;胎压异常以颜色区分。
- 已实现独立车载桌面和高德独立导航:地点搜索、驾车算路、模拟导航、地图与胎压侧栏,以及手机端导航语音。
- 独立画面不依赖手机屏幕共享;小米 14 Ultra 配合 Windows 模拟车机的熄屏传输、暂停恢复和重连已有验证记录。
- 原胎压仪表连接已有用户确认的稳定运行记录;实际 GPS 行驶、后台持续定位和独立导航在真实车机上的解码、延迟与稳定性仍待验证。
- 尚未实现车机音频通道、触摸反控、语音搜索和多路线选择。
- 0.19.0 是当前源码版本号,不代表新增功能或实车验收已完成;0.18.0 的设备验证时间为 2026-10-18。
高德导航需要在本地 local.properties 配置 amap.api.key,包名与签名须匹配高德控制台。未配置 Key 仍可构建,但无法初始化导航。Key、签名和安装包不提交到仓库。
- 使用用户提供的蓝色现代汽车图标替换桌面图标、圆形图标和首页图标;功能沿用 0.16.0。
- 车辆连接页增加“开始导航投屏”和“恢复胎压仪表”;车机视频通道就绪后开放投屏入口。
- 新增 Surface 输入的 H.264 屏幕共享编码路径,按车机协商的尺寸发送画面,并在关键帧前携带编码参数。
- 处理 Android 14 屏幕共享授权及前台服务类型;每次重新投屏都申请新授权,不保存或重放授权 token。
- 主动停止、系统终止共享、编码失败时恢复仪表;车机停止视频或断开时结束共享,恢复连接后需重新授权。
- 本轮仅传输画面,导航操作仍在手机完成;不包含导航声音传输、车机反控、导航与仪表同屏或熄屏持续投屏。
- 使用步骤与实车验证清单见 导航投屏说明。
- 重构首页、车辆连接、仪表预览、USB 诊断、协议扫描与通道检查的全部页面。
- 操作按钮保持至少 48dp 的触控尺寸;窄屏或大字体时,多列操作自动改为纵向排列。
- 重新安排音乐控制与日志按钮,取消播放器负边距,避免控件挤压与重叠。
- 修正高密度 Android 屏幕上的 WebView 渲染比例,避免预览文字变大、卡片溢出。
- 支持透明状态栏和手势区,按系统安全区域与键盘高度调整内容留白。
- 新增蓝紫渐变汽车图标、自适应启动图标、Android 13 单色图标和独立通知图标。
- 保留现有连接参数、数据读取和后台服务行为;内部版本号提升到 25。
- 内部版本号提升到 24,支持覆盖安装内部版本号为 23 的旧调试包;功能沿用 0.14.0。
- 删除手机首页重复的功能按钮,统一界面配色与布局。
- 打通燃油读取到手机和车机显示的链路,兼容多种标准 OBD 响应格式。
- 胎温换算从
raw - 40修正为raw - 50,消除已知的 10°C 偏差;独立处理每轮缺失温度,拒绝不完整或乱序报文。 - 系统重启后台服务时恢复保存的连接地址,重新进入页面时恢复服务状态和最后读数。
- 增加省电限制状态与系统设置入口;停止服务时取消任务并释放资源,连接日志限制长度。
- 修复蓝牙权限及 USB 广播注册的静态检查错误。
项目此前面向 2015/2016 Hyundai Tucson TL 1.6T G4FJ、原生支持 CarLife 的 800×480 车机及 WiFi ELM327 进行开发与调试。最低系统版本为 Android 8.0(API 26)。TPMS 使用请求头 7D6、请求 21 06、响应 61 06。
0.15.0 已在小米 14 Ultra 上覆盖安装并逐页检查六个页面。普通字体、1.3 倍字体、320dp 窄屏大字体及 914dp 横屏模拟共 24 次页面测量,按钮无重叠、无文字裁切,触控尺寸达到 48dp。仪表另通过五种尺寸的浏览器检查、17 项标准 OBD / TPMS / 模拟 ELM 回归、APK 构建与 Android Lint。详见 界面检查记录。
上述为历史界面验证记录;最新导航验证范围见“当前进度”及对应版本文档,电脑接收通过不等于真实车机通过。
不同市场、年款、ECU、车机固件和适配器可能使用不同端口、CAN 地址或数据布局。请先保存原始日志,再修改协议代码。
要求 JDK 17、Android SDK Platform 35 和对应的 Build Tools。Gradle Wrapper 会下载项目指定的 Gradle 版本;首次构建需要网络及已接受的 SDK 许可。
Windows 原生构建入口:
.\gradlew.bat assembleDebug testDebugUnitTest lintDebugAPK 默认写入 app\build\outputs\apk\debug\app-debug.apk。交付物按日期保存至 D:\CodexMigration\outputs\ 的主题子目录。
调试 APK 保留迁移后单独配置的原项目调试签名。覆盖安装需要与旧版使用相同的签名,仅文件名和版本号一致并不足以保证可覆盖安装。
- 手机连接 WiFi ELM327。
- 打开 CarLink Lab,点击“连接车辆与实时仪表”。
- 设置欢迎标题、油价省份、汽油标号、ELM327 IP 和端口。
- 允许应用通知,点击“开始”,确认前台服务通知出现。
- 在手机开发者选项中启用 USB 调试。
- 通过 USB 连接车机并启动车机端 CarLife。
- 停车状态下确认 TPMS、燃油和视频画面。
“仪表外观预览 · 演示数据”使用模拟数据;真实车辆读数位于连接页面及 CarLife 车机画面。
在连接页点击“后台运行设置”,按系统提示允许忽略电池优化;在应用信息中将省电策略设为“无限制”,允许后台自启动,并保留应用通知。菜单名称可能随 HyperOS 版本变化,以手机实际设置为准。
启动连接后,锁屏数分钟,再打开应用确认数据继续更新。前台服务与唤醒锁不能保证绕过所有厂商后台限制;系统强制停止应用后需手动重新启动。
WiFi ELM327 -- OBD/TPMS --> TucsonTpmsDataSource
|
v
TpmsSnapshot
|
CarLife head unit <-- H.264 <-- H264FrameEncoder
^
|
WebViewDashboardRenderer
^
|
app/src/main/assets/tpms_template.html
详细说明见 docs/ARCHITECTURE.md。
本项目当前针对目标车辆使用:
- 压力:rawPressure / 4 * 6.894757 kPa
- 温度:rawTemperature - 50 摄氏度
- 轮位:记录 1-4 对应左前、右前、左后、右后
- 燃油流量:优先
015E;不可用时使用0110MAF 估算。 - MAF 假设:汽油空燃比 14.7、密度 745 g/L;流量为
MAF / 14.7 / 745 × 3600L/h。 - 实时油耗:车速
010D大于 5 km/h 时,显示流量 / 车速 × 100L/100km;不超过 5 km/h 时显示 L/h。 - 缺失车速时不显示瞬时油耗;缺失流量时不沿用旧值,不完整采样或断连期间不累计该段燃油。
- 页面在读数超过约 30 秒未更新时清除过期数据显示。
- 油价默认使用第三方接口,可在设置中更换省份和汽油标号
温度偏移参考 OBDb Tucson 协议定义。该公开定义与项目既有传感器 ID 布局存在差异,当前保留原有压力与轮位布局,具体 ECU 版本需要用实车 2106 报文核对。修正偏移意味着原来的 43°C 将变为约 33°C;不能据此保证读数与环境温度一致。
燃油流量的 MAF 备用计算及累计消耗量属于估算,不能替代车辆标定数据。第三方油价接口可能随时变更或不可用,项目不保证其持续工作。
- 不包含遥测、账号系统或广告 SDK。
- 不主动上传车辆数据。
- 运行时会访问用户配置的 ELM327 地址和第三方油价接口。
- 提交 Issue 前请删除日志中的 VIN、位置、手机号、IP、车牌和账号信息。
- 不要把签名密钥、token、密码或原始私有日志提交到 Git。
- 与 Baidu、Apple、Hyundai、Kia 或其关联公司无隶属或授权关系。
- CarLife、CarPlay、Hyundai、Kia 等名称和商标归各自权利人所有。
- 本项目不包含第三方固件、官方客户端代码或认证芯片绕过方案。
- 协议逆向仅用于互操作研究和用户自有车辆。
- 使用者需自行确认当地法律、车辆保修条款和第三方服务条款。
- 禁止在驾驶过程中操作手机或调试界面。
- 不得将本项目用于未授权车辆、绕过安全认证或破坏车辆系统。
完整说明见 docs/LEGAL.md。
请先阅读 CONTRIBUTING.md、SECURITY.md 和 CODE_OF_CONDUCT.md。
提交协议适配时,请提供可复现步骤和数据来源,不要提交 VIN 或其他隐私信息。发布前检查 docs/OPEN_SOURCE_CHECKLIST.md。
MIT License,见 LICENSE。第三方依赖和商标不适用 MIT License。

