1、Android Automotive 概述:车载系统演进、Android Automotive 架构概览、与手机Android的区别

1.1 车载系统的演进之路

说实话,我入行那会儿,车载系统还处于「功能机」时代。那时候的车机,说白了就是个带屏幕的收音机加导航。我记得2015年第一次接触某德系车的IVI项目,系统还是基于QNX的,界面卡顿得让人抓狂。

车载系统的演进,大致经历了这么几个阶段:

  • 第一阶段:纯嵌入式系统(2000-2010年)
    封闭、定制化、无生态。每个车厂自己搞一套,互不兼容。我当年调一个CAN总线协议,整整折腾了两周。
  • 第二阶段:Linux/QNX + 中间件(2010-2017年)
    开始引入POSIX系统,但应用层还是各玩各的。GENIVI联盟就是这时候兴起的,不过说实话,生态碎片化太严重了。
  • 第三阶段:Android Automotive 时代(2017年至今)
    Google正式推出Android Automotive,把手机生态的成熟经验搬到了车上。嗯,这里要注意,Android Automotive和Android Auto完全是两码事,后面我会细说。

核心观点:车载系统的本质,正在从「硬实时控制」向「软实时服务」转变。你想想看,现在的用户要的不是一个能导航的车机,而是一个能跟手机、智能家居联动的「第三生活空间」。

1.2 Android Automotive 架构概览

Android Automotive的架构,说白了就是标准Android的「车载定制版」。我习惯把它分成四层来看:

层级 组件 说明
应用层 车载Launcher、设置、电话、媒体 基于CarAppLibrary开发,支持多窗口
框架层 CarService、CarPropertyManager 提供车辆硬件抽象接口
硬件抽象层 Vehicle HAL、Audio HAL 与ECU通信的桥梁
内核层 Linux Kernel + 车载驱动 支持CAN、以太网、电源管理

这里我想重点聊聊CarService。我在项目中遇到过一个问题:为什么手机上的Android不能直接用在车上?原因就在于CarService。它负责管理车辆状态,比如车速、车门、空调、方向盘按键等。没有它,你的App根本不知道车现在是在行驶还是停车。

个人经验:刚开始做车载开发时,我总把CarService当成普通的系统服务。后来发现,它的生命周期管理非常特殊——车辆熄火后,系统会进入深度睡眠,CarService必须能优雅地保存状态。我曾经因为没处理好这个,导致用户每次启动车机都要重新配对蓝牙,被测试团队追着骂了一周。

1.3 与手机Android的核心区别

很多人问我:「Android Automotive不就是Android加了个车载壳吗?」
我的回答是:差远了。说白了,这是两个完全不同的物种。

我总结了几个关键区别:

  • 窗口管理机制不同
    手机Android是「单窗口全屏」逻辑,而车载系统必须支持「多窗口叠加」。比如导航App常驻后台,音乐App在前台,还要支持画中画显示倒车影像。嗯,这个后面章节会详细讲。
  • 电源管理策略不同
    手机可以随时关机重启,但车机不行。车辆熄火后,系统要进入「深度睡眠」而不是关机,同时还要保持CAN总线监听,以便用户按钥匙时能秒级唤醒。我见过一个项目,因为电源管理没做好,导致车辆停放一晚后电瓶亏电——这可不是闹着玩的。
  • 安全优先级不同
    手机App崩溃了,大不了重启。车载App崩溃?尤其是在高速行驶时导航突然黑屏,那后果就严重了。所以Android Automotive引入了「安全关键路径」的概念,某些系统进程是禁止被杀死的。
  • 硬件抽象层不同
    手机只需要管理触摸屏、摄像头、传感器。车机要管理的东西就多了:CAN总线、以太网AVB、车载麦克风阵列、多屏输出(仪表盘+中控+副驾屏+后排屏)。

避坑指南:我曾经接手过一个项目,团队直接把手机上的AOSP代码移植到车机上,结果发现车载的「多用户切换」逻辑完全不对。手机的多用户是给不同人用的,而车载的多用户是给「驾驶模式」和「停车模式」用的。这两个场景下的窗口策略完全不同——驾驶模式下,视频播放App必须被强制暂停。这个坑,我踩过,希望你别踩。

1.4 为什么选择Android Automotive?

你可能会问:既然QNX和Linux也能做车机,为什么Google要搞Android Automotive?

我个人觉得,核心原因就两个:

  1. 生态优势——全球有数百万Android开发者,车厂不需要重新培养一个车载开发团队。我见过很多传统车厂,招一个QNX工程师要等半年,而Android工程师一抓一大把。
  2. 迭代速度——手机Android每年一个大版本,车载系统也能跟上。传统嵌入式系统,一个版本用三年,等你想升级的时候,硬件已经过时了。

当然,Android Automotive也有它的短板。比如实时性不如QNX,安全认证流程复杂。但说实话,对于90%的车载场景,Android Automotive已经足够用了。

好了,这一章就到这里。下一章我会深入讲解Android Automotive的窗口管理核心——WindowManagerService在车载环境下的特殊实现。到时候我会分享一些我在实际项目中踩过的坑,比如多屏显示时的焦点管理问题,保证让你有收获。