1. Android Automotive 网络架构概览

大家好,我是这次课程的主讲人。在车载领域摸爬滚打了十来年,我见过太多因为网络架构设计不合理导致的翻车事故。今天咱们就来聊聊 Android Automotive 的网络架构,把这个基础打牢。

说实话,车载网络和手机网络完全是两码事。手机嘛,信号不好最多刷不出视频。但在车上,网络出问题可能直接影响安全。我有个项目,就因为网络拓扑没规划好,导致 OTA 升级时车机直接变砖,那叫一个惨。

车载网络拓扑:比你想象的要复杂

先说说车载网络长什么样。你想想看,一辆智能汽车里有多少个电子控制单元?少说几十个,多则上百个。它们怎么连在一起?

  • 域控制器架构:现在主流方案。把整车分成几个域,比如智能座舱域、自动驾驶域、车身控制域。每个域有自己的主控芯片,域间通过以太网通信。
  • 混合拓扑:实际项目中,往往是多种拓扑混着用。CAN 总线控制车窗、门锁这些实时性要求高的设备,以太网负责大数据量的传输。
  • 网关角色:车载网关就像个翻译官。CAN 和以太网之间怎么通信?全靠它。我习惯把网关看作整个网络的交通枢纽。

关键点:Android Automotive 通常运行在智能座舱域控制器上。它需要和 T-Box(远程通信模块)、ADAS(高级驾驶辅助系统)等模块打交道。

网络分层模型:别被七层吓到

说到网络分层,很多人第一反应就是 OSI 七层模型。但在车载领域,我们更关注实际落地的 TCP/IP 四层模型。

层级 车载场景 我踩过的坑
应用层 HTTP/HTTPS、MQTT、SOME/IP MQTT 的 QoS 等级选不对,丢消息是常事
传输层 TCP、UDP 视频流用 TCP?卡死你,必须上 UDP
网络层 IPv4、IPv6、路由协议 IPv6 地址分配搞不好,设备之间互相冲突
链路层 以太网、CAN、LIN 以太网线束屏蔽没做好,EMC 测试直接挂

嗯,这里要注意。车载网络有个特殊的地方——确定性网络。普通网络丢包了重传就行,但车载网络里,刹车信号不能等重传。所以 SOME/IP、DOIP 这些协议都做了专门的优化。

核心组件介绍:谁在管网络?

Android Automotive 的网络架构里,有几个关键角色。我一个个说。

ConnectivityService

这是 Android 系统的网络管家。它管理 Wi-Fi、蜂窝数据、以太网等所有网络接口。在车载场景下,它需要处理多网络同时在线的情况。比如车同时连着 Wi-Fi 和 4G,怎么选?

我的经验:ConnectivityService 的评分机制很关键。我建议把蜂窝网络的优先级设高一些,因为车载 Wi-Fi 往往是热点,稳定性不如蜂窝。

NetworkStack

网络栈,负责 IP 分配、DNS 解析、路由表维护。在车上,IP 地址分配是个头疼事。为什么?因为车会移动,网络环境一直在变。

// 车载网络配置示例
// 我个人习惯用静态 IP 分配内部网络
NetworkConfig config = new NetworkConfig.Builder()
    .setIpAssignment(IpAssignment.STATIC)
    .setStaticIpAddress("192.168.1.100")
    .setGateway("192.168.1.1")
    .setDnsServers(new String[]{"8.8.8.8", "114.114.114.114"})
    .build();

TelephonyManager

这个组件管的是蜂窝网络。在车上,它不仅要处理语音通话,还要管理数据连接。我曾经遇到过一个坑:某些运营商的 SIM 卡在漫游状态下,数据连接会频繁断开。

避坑指南:我曾经在项目里发现,TelephonyManager 的 onDataConnectionStateChanged 回调在车载场景下触发频率异常高。后来排查发现是信号切换导致的。解决方案是加一个去抖逻辑,500ms 内的状态变化只处理一次。

WifiManager

车载 Wi-Fi 和手机 Wi-Fi 不太一样。车上的 Wi-Fi 既要当客户端(连家里的热点),又要当热点(给乘客用)。这种双模式切换,处理不好就会出问题。

  • Station 模式:车机连外部 Wi-Fi,用于 OTA 下载
  • SoftAP 模式:车机开热点,给后排乘客用
  • P2P 模式:车机和手机直连,用于投屏

网络连接的生命周期

说白了,车载网络连接不是一锤子买卖。车启动、行驶、熄火,每个阶段网络状态都不一样。

  1. 上电阶段:网络模块初始化,建立连接
  2. 行驶阶段:网络切换(比如从地库出来,信号从无到有)
  3. 休眠阶段:部分网络模块进入低功耗模式
  4. 唤醒阶段:收到远程指令,网络模块快速恢复

我记得有个项目,客户反映车停了一晚上后,远程控车功能就失效了。查来查去,发现是网络模块进入休眠后,TCP 连接被服务器端断开了。解决方案是在休眠前主动发送 keepalive 包。

小结

好了,这一章的内容就这些。Android Automotive 的网络架构,说白了就是要在移动的、多变的、安全要求极高的环境里,保证网络连接稳定可靠。下一章我会深入讲讲网络连接管理的具体实现,包括怎么处理多网络切换、怎么优化连接速度。

记住一句话:车载网络没有银弹。每个方案都有取舍,关键是要理解业务场景。你想想看,导航丢包和音乐丢包,哪个更不能忍?想清楚这个,架构设计就有方向了。