今天在 GitHub Trending 上看到一个有意思的项目:Headunit Revived,它可以将任意 Android 平板或手机"变身"为 Android Auto 的车机大屏,无需购买专用车机,一句话总结——用开源方案把平板装进车里。
一、项目概述
Headunit Revived 最早基于 Michael Reid 的原始 headunit 项目,由社区接手并持续维护至今(最新版本 3.0.1)。项目解决了安卓生态中一个经典痛点:Android Auto 默认只能在车机或特定设备上运行,而很多车主手里有闲置的 Android 平板,想把它们利用起来充当车机屏幕却苦于没有官方支持。
核心特性一览
- 有线 USB 连接:即插即用,连接稳定,适合对延迟敏感的场景
- 无线 Wi-Fi 连接:支持传统 Wireless Launcher、Native Headunit Server,以及推荐的 Wireless Helper 伴侣应用,可实现自动发现和连接
- Android Auto 全功能:支持导航(Google Maps、Waze)、音乐(Spotify、YouTube Music)、语音助手等完整 Android Auto 功能
- 竖屏/横屏双模式:支持横屏(车机主流)和竖屏(平板仪表盘)两种布局
- 高度可定制:DPI 分辨率、码率、编码器、UI 缩放、键盘映射、夜间模式等丰富配置
- 多设备蓝牙支持:可同时连接多个蓝牙设备,支持方向盘按键映射和旋钮控制
- 自动化集成:支持 Tasker、MacroDroid 等自动化工具,以及 ADB Intent 触发无线连接
二、技术原理
整体架构
Headunit Revived 本质上是一个 Android Auto 协议客户端(Headunit Desktop Protocol, HDP)。Android Auto 在车机上运行时,实际上手机作为"投射端"(Projection Provider),车机作为"接收端"(Headunit),两者通过 USB 或 Wi-Fi 传输音视频流和触控事件。
[Android 手机] --USB/Wi-Fi--> [Android 平板运行 Headunit Revived] --HDMI/屏幕--> [车机显示屏]
(投射端) (接收端/HDP Client) (输出设备)
核心技术实现
1. 通信协议层
项目内部实现了 Android Auto HDP 协议的核心握手流程,包括:
- USB 或 TCP Socket 建立连接
- SSL/TLS 加密通道建立(项目在 3.0.0 中重构了 SSL 库,提升稳定性和可维护性)
- 音视频编解码协商(支持 H.264、H.265 视频编码)
- 触控和音频双向交互
2. 视频解码与渲染
// TextureView 渲染模式(v1.10.0 起成为默认渲染器)
// 相比 SurfaceView 有更好的设备兼容性
TextureView textureView = new TextureView(context);
textureView.setSurfaceTextureListener(new SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
// 初始化视频解码器,投射内容渲染到平板屏幕
videoDecoder.init(surface, width, height);
}
});
项目支持两种渲染模式:TextureView(默认,兼容性更好)和 GLES20 渲染器(v1.9.0 引入,修复了部分老旧车机的黑屏/花屏问题)。
3. 音频路由
音频处理是项目中最复杂的一环。Android Auto 要求音频必须路由到 Headunit 端而非手机端。v1.14.1 版本引入的 MediaSession 机制彻底解决了音频路由问题:
// MediaSession 初始化(v1.14.1+)
MediaSessionCompat mediaSession = new MediaSessionCompat(context, "HeadunitRevived");
mediaSession.setCallback(new MediaSessionCompat.Callback() {
@Override
public boolean onMediaButtonEvent(Intent mediaButtonEvent) {
// 将媒体按键事件转发给 Android Auto
forwardToAndroidAuto(mediaButtonEvent);
return true;
}
});
mediaSession.setActive(true);
项目还实现了独立的音频缓冲区(Audio Buffer)和音频混流器(Audio Mixer,v2.3.1 引入),解决了部分设备上的音频卡顿问题。
4. 无线连接核心
无线模式的核心依赖 Android Auto 内置的 Headunit Server。项目支持三种无线方式:
- Native Headunit Server:调用手机内置的 Android Auto 开发者设置中的 Headunit Server(仅部分设备支持)
- Wireless Launcher:第三方应用(如 Emil Borconi 的 Wi-Fi Launcher)
- Wireless Helper(推荐):社区开发的配套应用,支持 NSD/mDNS 自动发现、Wi-Fi Direct 自动连接和蓝牙自动启动,是目前最可靠的无线方案
5. 连接稳定性保障
项目在多年迭代中积累了丰富的稳定性保障机制:
// USB 软重置逻辑(v1.14.1+)
// 遇到 USB 假死时自动恢复,无需用户手动拔插
if (usbConnection.isStalled()) {
usbConnection.softReset(); // 保持 8 秒重置窗口,处理 USB Dongle 重启
reconnectWithBackoff();
}
CommManager 重构(v2.0.0)是项目的重要里程碑,将连接核心完全重写,引入了协程(Kotlin Coroutines)管理,显著提升了握手速度和异常恢复能力。
三、安装与快速开始
环境要求
- Headunit 端(平板):Android 5.0(API 21)及以上,推荐 Android 10+
- 手机端(投射端):Android 5.0 及以上,安装有 Android Auto 应用
- USB 线(建议 USB-A to USB-A 或 USB-A to USB-C,视设备接口而定)
安装步骤
方式一:从 Google Play 安装(推荐)
直接在 Headunit 平板上安装 Headunit Revived 和配套的 Wireless Helper 应用。
方式二:从 GitHub Release 下载 APK
# 克隆仓库
git clone https://github.com/andreknieriem/headunit-revived.git
cd headunit-revived
# 编译 Release 版本
# 需要配置 keystore(详见 CONTRIBUTING 文档)
./gradlew assembleRelease
有线连接快速开始
- 用 USB 线连接手机和平板
- 在平板上打开 Headunit Revived,点击 USB 按钮
- 在列表中找到你的手机,点击右侧按钮允许连接
- 从列表中选择你的手机,等待 Android Auto 启动
无线连接快速开始(推荐 Wireless Helper)
- 在平板上打开 Headunit Revived,进入设置
- 将 Wireless Mode 设置为 Helper Mode
- 确保平板和手机在同一 Wi-Fi 网络(或开启手机热点)
- 在手机上打开 Wireless Helper 应用,点击开始
- Headunit Revived 自动发现平板并建立连接
ADB 手动触发无线连接(高级用户)
# 通过 ADB 触发无线连接
adb shell am start -a android.intent.action.VIEW \
-d "headunit://connect?ip=192.168.1.25"
这对于 Tasker、MacroDroid 等自动化工具集成非常有用。
四、使用方法与实战
基础配置建议
首次设置推荐使用自动优化向导
Headunit Revived 内置了 Auto-Optimization Wizard,会根据你的平板硬件自动推荐最佳分辨率、DPI 和编码器设置。建议首次使用时直接运行向导:
Settings → Auto-Optimization Wizard → Run
分辨率与 DPI 调整
如果在 Android Auto 中发现 Google Maps 在竖屏模式下触控异常,尝试将 DPI 调低到 200 以下(推荐 190),可以恢复触控功能。
方向盘/按键映射
Headunit Revived 支持配置方向盘按键和旋钮:
- 进入 Settings → Keymap
- 使用内置的 Key-Sniffer 实时捕获按键事件
- 将捕获到的按键映射到 Android Auto 的对应操作(Dpad、媒体控制等)
// keymap 配置示例(基于社区贡献的 Rotary Knob 支持)
{
"key_map": [
{"android_keycode": 66, "aa_action": "dpad_center"}, // 旋钮按压 → 确认
{"android_keycode": 20, "aa_action": "dpad_down"}, // 旋钮下转 → 向下
{"android_keycode": 19, "aa_action": "dpad_up"} // 旋钮上转 → 向上
]
}
多设备蓝牙自动连接
v2.3.1 引入了多设备蓝牙自动连接功能,对于有多辆车或多个平板的用户非常实用。可以在设置中保存多个蓝牙设备,切换时自动重连。
音频混流(Audio Mixer)
v2.3.1 新增的 Audio Mixer 可以同时混合多个音频轨,适合需要在导航播报的同时保持音乐播放的场景。
Tasker 集成示例
在 Tasker 中创建一个自动化任务,实现上车自动连接:
触发条件: 蓝牙连接到车载音响
操作:
1. Launch App: Headunit Revived
2. Wait: 3 seconds
3. ADB Intent: headunit://connect?ip=<平板IP>
五、常见问题与解决方案
Q1: Google Maps 在竖屏模式下无法触控
原因:竖屏模式下 Google Maps 的触控区域坐标映射有问题。
解决方案:进入设置,将 Pixel Density (DPI) 调低到 200 以下(推荐 190),重启应用。
Q2: 无线连接频繁掉线
原因:手机上的 Wi-Fi Assistant 或网络自动切换功能会在检测到"无互联网"时断开连接。
解决方案:
- 在手机 Wi-Fi 设置中关闭 Wi-Fi Assistant 和 Switch between networks
- 同时检查手机省电策略,确保 Headunit Revived 相关进程不被后台杀掉
- 推荐使用 Wireless Helper 模式,比传统无线模式稳定得多
Q3: Android 10 及以下无法自动触发无线投射
原因:Android Auto 从 16.4 版本起在 Android 10 及以下禁用了自动无线投射启动。
解决方案:
- 使用 Wireless Helper 模式绕过限制
- 或者手动开启手机上的 Android Auto 内置 Headunit Server,然后通过 Wi-Fi 模式(回环地址 127.0.0.1)连接
Q4: 音频从手机扬声器播放而非平板
原因:音频路由未正确设置,MediaSession 未获得音频焦点。
解决方案:v1.14.1 及以上版本已彻底修复此问题。如果仍有问题,检查平板是否有多媒体音量,尝试在设置中启用 Static Audio Focus Toggle。
Q5: USB 连接时随机断开
解决方案:
- v3.0.1 增强了 USB 工作流,减少了随机断开
- 如果问题持续,尝试更换 USB 线(推荐带数据线的 USB-A to USB-A 或高质量数据线)
- 检查手机的 Host Mode 是否正确开启
六、总结
Headunit Revived 是 Android Auto 开源生态中最成熟、维护最活跃的第三方车机替代方案。它不仅复活了原始 headunit 项目的生命力,更通过持续迭代引入了竖屏模式、Wi-Fi Direct、自动优化向导、音频混流等大量实用功能。项目在 GitHub 上拥有活跃的社区,贡献者涵盖全球多国语言本地化团队。
如果你手头有闲置的 Android 平板,不妨试试 Headunit Revived——用它做车机大屏,导航、音乐、语音助手一个不落,比大多数原厂车机的体验还要流畅。
📦 GitHub 地址:andreknieriem/headunit-revived 📱 Google Play:Headunit Revived 📖 详细文档:项目 Wiki