谷歌的 Android Auto 应用程序将智能手机上的内容投射到汽车主机显示屏上。官方而言,这些内容包括导航(例如,Google 地图和 Waze)、媒体播放器(例如,VLC、Spotify)和消息应用程序。该应用程序非常有用,但如果您可以在主机显示屏上播放电影或将其用作管理多个摄像头、GPS 等的自定义车载计算机的界面,那就更好了。
本文将演示 Android Auto 客户端-服务器 (AACS),这是一个我正在开发的早期阶段应用程序,旨在完成这些任务。
如何破解 Android Auto
在主机屏幕上显示其他内容有两种方法:您可以破解 Android Auto 应用程序,或者您可以从头开始重新实现协议。第一种方法似乎更简单,但有点冒险:它可能使用谷歌的知识产权,因此可能受到法律诉讼,并且可能会在新版本的 Android Auto 中失效(尤其是在谷歌积极努力实现这一目标的情况下)。
因此,从头开始重新实现协议是长远来看更安全的方法。Android Auto 协议的其中一种实现是 OpenAuto,这是 Michal Szwaj 开发的主机模拟器。然而,本文利用了通信接口的另一侧——协议的移动设备侧。
Android Auto 客户端-服务器 (AACS)
AACS 目前由三个核心模块和一个外部模块组成,这些模块在基于 ARM 的单板计算机 ODROID N2 上运行
- AAServer 是 Android Auto 协议 (AAP) 的一个实现,它与汽车的主机通信。它处理加密的 AAP-over-USB 通信,并通过 Unix 套接字将其暴露出来,供其他模块使用。
- AAClient 是 AAP 的一个实现,它与可能连接到 ODROID N2 的手机通信,并将所有流量转发到 AAServer。通过使用 AAClient,您无需选择是连接您的手机还是 ODROID N2——您可以同时连接两者。
- AAVideoSink 是一个 GStreamer sink,它将视频从 GStreamer Gst 管道发送到 AAServer。与其他 Gst 元素(例如 ximagesrc)结合使用,它允许您将任何应用程序投射到汽车的主机上。
- GetEvents 是一个应用程序,它连接到 AAServer 并使用 X Server 的 XTest 扩展将来自汽车主机触摸屏的触摸事件转发到选定的应用程序窗口。
尝试一下
要尝试 AACS,您需要以下硬件
- 一台带电源的 ODROID N2
- 一张 SD 卡(16GB 应该足够开始使用;建议 32GB)和一个 USB SD 卡读卡器
- 一根 USB Type-A 转 Micro USB 数据线
- 一根点烟器插头转 2.1/5.5 毫米插头电缆(用于在汽车中为 ODROID 供电)
- 一个 GPS USB 接收器(我测试过 u-blox 7);这不是测试 AACS 所必需的,但它很有用
一旦您拥有了硬件
- 获取最新的 AACS 版本.
- 连接这些文件,解压缩它们,并将结果复制到 SD 卡
$ cat \ aacs_image_20201029.img.xz.aa \ aacs_image_20201029.img.xz.ab \ aacs_image_20201029.img.xz.ac \ aacs_image_20201029.img.xz.ad | \ unxz | dd of=/dev/sdX bs=1M
- 将卡移动到 ODROID N2。确保 ODROID 通过以太网连接到网络并将其打开。
- 获取 ODROID 的 IP 地址并通过 虚拟网络计算 连接到它。密码是
odroid
。 - 您应该看到 OsmAnd 启动屏幕。下载合适的地图和其他文件,然后关闭 ODROID。
- 前往您的汽车,将汽车的日期更改为 2014 年 7 月 3 日至 2020 年 4 月 6 日之间的某个日期(这些是证书有效期)。
- 将 USB 和电源连接到您的 ODROID。尝试使用 Android Auto 从主机连接到 ODROID。大约 30 秒后,您将在主机上看到一个控制视频,再过几分钟,您将看到导航 (OsmAnd)。
开发状态
请注意,这还不是生产质量的软件。它更接近于概念验证,因此我想邀请其他人参与其开发。
目前,该软件具有以下限制
- 它仅在一个主机上进行了测试——2019 年 SEAT Ateca 中的 LG 主机——应该在其他主机上测试 AACS。
- 开箱即用的唯一应用程序是在 Anbox 上运行的 OsmAnd。如果 AACS 上有其他应用程序可用于管理摄像头(录制、道路标志识别)、电话通话支持(通过蓝牙连接多部手机)、付费停车区应用程序等,那就太好了。
- 它仅在 ODROID N2 上进行了测试。如果您将其移植到其他单板计算机,请提交补丁。
- 它仅支持输入和视频通道。如果能够支持音频、语音输入和其他通道,那就太好了。
如果该项目对您来说很有趣,请 在 Github 上加入我,提交想法、补丁、报告问题或帮助推广该项目。
评论已关闭。