第一章:车载系统概述
Android Automotive OS 到底是什么?
说实话,我第一次接触 Android Automotive OS 的时候,也以为它就是把手机上的 Android 直接塞进车里。后来才发现,这事儿没那么简单。
Android Automotive OS,简称 AAOS,是 Google 专门为汽车打造的操作系统。它不是 Android Auto——那个只是手机投屏到车机上的功能。AAOS 是真正跑在车机硬件上的完整系统,不依赖手机。
我参与的第一个车载项目,客户就问过我:「能不能直接把手机 ROM 刷到车机上?」我当时就笑了,但笑完之后得认真解释:这两者从底层架构上就有本质区别。
核心区别一句话总结:Android Auto 是手机的「投影」,AAOS 是汽车的「大脑」。
车载系统架构长什么样?
AAOS 的架构,说白了就是 Android 的「魔改版」。它保留了 Android 的核心框架,但针对汽车场景做了大量定制。
从上到下,大概分这么几层:
- 应用层:包括系统应用(设置、电话、媒体)和第三方应用。但注意,不是所有手机应用都能直接跑,Google 有严格的认证。
- 应用框架层:Android 原生的 ActivityManager、WindowManager 都在,但多了 CarService——这是车载的核心服务。
- 硬件抽象层(HAL):汽车特有的硬件,比如空调、方向盘按键、仪表盘,都需要通过 HAL 层对接。
- 内核层:Linux 内核,但增加了车载相关的驱动,比如 CAN 总线、车载以太网。
我记得有一次,团队里新来的同事问我:「为什么车机上的导航不能像手机一样直接全屏?」我告诉他,因为车机要同时显示导航、音乐、空调状态,这涉及到多窗口管理和安全约束——这些都是 AAOS 特有的。
和手机 Android 到底差在哪?
这个问题我经常被问到。我一般会从三个角度来对比:
| 对比维度 | 手机 Android | Android Automotive OS |
|---|---|---|
| 启动方式 | 按电源键开机 | 汽车上电即启动,要求 3 秒内亮屏 |
| 交互方式 | 触摸为主 | 触摸 + 旋钮 + 方向盘按键 + 语音 |
| 应用管理 | 用户可以随意安装卸载 | 预装为主,严格控制,保证安全 |
| 系统更新 | OTA 更新,用户决定时机 | OTA 更新,但必须保证车辆安全 |
| 电源管理 | 电池供电,省电优先 | 汽车供电,性能优先,但需考虑休眠 |
你想想看,手机死机了,长按电源键重启就行。车机死机了怎么办?总不能把车停在高速上重启吧?所以 AAOS 对稳定性要求极高,这也是为什么开发环境搭建起来比手机复杂得多。
避坑指南:我曾经在项目初期忽略了车机的「快速启动」要求,结果系统启动花了 8 秒,客户直接拒收。后来才知道,AAOS 有专门的「系统就绪」机制,必须在 3 秒内完成核心服务的启动。
开发环境搭建,我踩过的坑
搭建 AAOS 的开发环境,说实话比手机 Android 要麻烦一些。但别怕,我带你一步步来。
你需要准备什么?
- 一台性能还行的电脑:建议 16GB 内存以上,SSD 硬盘。我刚开始用 8GB 的笔记本编译,一次编译要 3 个小时,后来换了 32GB 的机器,40 分钟搞定。
- Ubuntu 18.04 或 20.04:AAOS 官方推荐。Windows 和 macOS 也能搞,但需要 Docker 或者虚拟机,我个人不建议,坑太多。
- Android 源码:大概 80GB 左右。记得预留足够的磁盘空间。
- 车载模拟器:Google 提供了 Automotive 模拟器镜像,可以在没有真车的情况下调试。
搭建步骤(精简版)
# 1. 安装依赖
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
# 2. 安装 repo 工具
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
# 3. 下载 AAOS 源码(以 Android 12 为例)
mkdir aaos-12
cd aaos-12
repo init -u https://android.googlesource.com/platform/manifest -b android-12.0.0_r32
repo sync -j4
# 4. 编译
source build/envsetup.sh
lunch aosp_car_x86_64-userdebug
make -j8
注意:第一次编译可能需要 2-3 小时,取决于你的电脑配置。我建议你找个周末,泡杯咖啡,慢慢等。编译过程中如果报错,多半是依赖没装全,别慌,看日志修就行。
模拟器启动
编译完成后,启动模拟器也很简单:
emulator -avd AutomotiveAVD -gpu host
嗯,这里要注意,模拟器默认是横屏的,而且会模拟车载的旋钮交互。我第一次启动的时候,还纳闷怎么鼠标点不动,后来才发现要用键盘的方向键来模拟旋钮。
我的小技巧:如果你没有真车,模拟器其实够用了。但记得在模拟器里测试一下多窗口、语音交互这些车载特有的功能。我曾经在模拟器上跑得好好的,上了真车就崩了——原因是真车的屏幕分辨率不一样。
写在第一章的最后
这一章我们聊了 AAOS 是什么、架构长什么样、和手机 Android 的区别,以及怎么搭建开发环境。说白了,就是给后面的实战打个基础。
下一章,我们会真正开始写代码——创建一个车载应用,跑在模拟器上。到时候你会发现,其实 AAOS 开发没那么神秘,就是 Android 开发加了一些车载的「调料」而已。
对了,如果你在搭建环境时遇到问题,别一个人死磕。我当年也是踩了无数坑才走过来的。记住,编译报错不可怕,可怕的是不敢动手试。