
























今天在 GitHub Trending 上看到一个有意思的项目:Headunit Revived,它可以将任意 Android 平板或手机"变身"为 Android Auto 的车机大屏,无需购买专用车机,一句话总结——用开源方案把平板装进车里。
Headunit Revived 最早基于 Michael Reid 的原始 headunit 项目,由社区接手并持续维护至今(最新版本 3.0.1)。项目解决了安卓生态中一个经典痛点:Android Auto 默认只能在车机或特定设备上运行,而很多车主手里有闲置的 Android 平板,想把它们利用起来充当车机屏幕却苦于没有官方支持。
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 协议的核心握手流程,包括:
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。项目支持三种无线方式:
5. 连接稳定性保障
项目在多年迭代中积累了丰富的稳定性保障机制:
// USB 软重置逻辑(v1.14.1+)
// 遇到 USB 假死时自动恢复,无需用户手动拔插
if (usbConnection.isStalled()) {
usbConnection.softReset(); // 保持 8 秒重置窗口,处理 USB Dongle 重启
reconnectWithBackoff();
}
CommManager 重构(v2.0.0)是项目的重要里程碑,将连接核心完全重写,引入了协程(Kotlin Coroutines)管理,显著提升了握手速度和异常恢复能力。
方式一:从 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
# 通过 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 支持配置方向盘按键和旋钮:
// 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 引入了多设备蓝牙自动连接功能,对于有多辆车或多个平板的用户非常实用。可以在设置中保存多个蓝牙设备,切换时自动重连。
v2.3.1 新增的 Audio Mixer 可以同时混合多个音频轨,适合需要在导航播报的同时保持音乐播放的场景。
在 Tasker 中创建一个自动化任务,实现上车自动连接:
触发条件: 蓝牙连接到车载音响
操作:
1. Launch App: Headunit Revived
2. Wait: 3 seconds
3. ADB Intent: headunit://connect?ip=<平板IP>
原因:竖屏模式下 Google Maps 的触控区域坐标映射有问题。
解决方案:进入设置,将 Pixel Density (DPI) 调低到 200 以下(推荐 190),重启应用。
原因:手机上的 Wi-Fi Assistant 或网络自动切换功能会在检测到"无互联网"时断开连接。
解决方案:
原因:Android Auto 从 16.4 版本起在 Android 10 及以下禁用了自动无线投射启动。
解决方案:
原因:音频路由未正确设置,MediaSession 未获得音频焦点。
解决方案:v1.14.1 及以上版本已彻底修复此问题。如果仍有问题,检查平板是否有多媒体音量,尝试在设置中启用 Static Audio Focus Toggle。
解决方案:
Headunit Revived 是 Android Auto 开源生态中最成熟、维护最活跃的第三方车机替代方案。它不仅复活了原始 headunit 项目的生命力,更通过持续迭代引入了竖屏模式、Wi-Fi Direct、自动优化向导、音频混流等大量实用功能。项目在 GitHub 上拥有活跃的社区,贡献者涵盖全球多国语言本地化团队。
如果你手头有闲置的 Android 平板,不妨试试 Headunit Revived——用它做车机大屏,导航、音乐、语音助手一个不落,比大多数原厂车机的体验还要流畅。
📦 GitHub 地址:andreknieriem/headunit-revived 📱 Google Play:Headunit Revived 📖 详细文档:项目 Wiki
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。