第一章:Android Automotive 概述

大家好,我是你们这门课的老朋友。在车载领域摸爬滚打了几年,踩过不少坑,也积累了一些心得。今天咱们就从零开始,聊聊 Android Automotive 到底是什么。

1.1 什么是 Android Automotive?

说白了,Android Automotive 就是一个跑在汽车中控上的完整 Android 系统。它不是手机投屏,也不是一个 App,而是一个独立的操作系统。

我刚开始接触这个领域时,也以为它和手机版 Android 差不多。后来才发现,这里面的门道可多了。举个例子,手机可以随便关机重启,但车机不行——你总不能让车主在高速上等系统重启吧?

核心要点:Android Automotive 是 Google 官方为汽车量身定制的 Android 系统。它从底层就考虑了车载场景的特殊需求。

1.2 与 Android Auto 的区别

很多新手容易把这两个概念搞混。我当年面试时也被问过这个问题,当时还答错了,挺尴尬的。

对比项 Android Automotive Android Auto
运行位置 车机本地 手机端
是否需要手机 不需要 需要连接手机
系统独立性 完整独立系统 手机投屏模式
应用生态 车载专用 App 手机 App 适配
典型场景 特斯拉、Polestar 2 大部分支持 Android Auto 的车型

你想想看,Android Auto 就像是你手机的一个外接显示器,而 Android Automotive 则是一台独立的车载电脑。两者虽然名字像,但本质完全不同。

个人经验:我在做项目时发现,很多客户一开始说要开发 Android Auto 功能,聊着聊着才发现他们其实需要的是 Android Automotive。所以,搞清楚这两个概念,能帮你少走很多弯路。

1.3 车载系统架构概览

Android Automotive 的架构,说白了就是在标准 Android 架构上加了车载特有的模块。我习惯把它分成三层来看:

  • 应用层:包括车载 Launcher、设置、电话、媒体等系统 App,以及第三方车载应用
  • 框架层:新增了 Car API、Vehicle HAL、Car Service 等车载核心服务
  • 硬件层:通过 Vehicle HAL 与车载 CAN 总线、传感器等硬件交互

嗯,这里要注意,Vehicle HAL 是整个系统的关键。它就像是一个翻译官,把 Android 的指令转成汽车能理解的信号。

应用层 车载 Launcher | 设置 | 电话 | 媒体 | 第三方 App 框架层 Car Service | Vehicle HAL | Car API 权限管理 | 车辆属性 | 驾驶模式 硬件层 CAN 总线 | 传感器 | 车载 ECU | 显示屏 Android Automotive 系统架构分层示意图

为什么会这样设计?因为汽车不像手机,它需要和物理硬件深度绑定。比如,你要读取车速信息,不能像手机那样用 GPS 凑合,必须通过 CAN 总线获取精确数据。

避坑指南:我曾经在开发一个导航应用时,直接用了手机的定位 API。结果在隧道里完全失效,还被测试同事吐槽了。后来才明白,车载场景必须结合轮速传感器和陀螺仪做融合定位。

1.4 开发环境搭建

好了,理论说完了,咱们来点实际的。搭建开发环境是第一步,也是很多人容易卡住的地方。

1.4.1 Android Studio 配置

我个人习惯用最新稳定版的 Android Studio。目前推荐 Arctic Fox 或更高版本。安装时记得勾选 Android Automotive 相关组件。

// 在 build.gradle 中配置 Automotive 依赖
dependencies {
    implementation 'androidx.car.app:app:1.3.0'
    implementation 'androidx.car.app:app-projected:1.3.0'
}

1.4.2 SDK 与模拟器

你需要安装 Android Automotive 的 SDK 和系统镜像。具体步骤如下:

  1. 打开 SDK Manager,选择 SDK Platforms 标签
  2. 勾选 Android 12 (API 31) 或更高版本
  3. 在 SDK Tools 中勾选 Android Automotive Emulator
  4. 创建 AVD 时,选择 Automotive 设备类型

小技巧:我建议你至少准备两个模拟器配置:一个带 Google Play 服务的,用于测试完整功能;一个不带 Google 服务的,用于测试纯 AOSP 环境。这样能覆盖更多实际场景。

1.4.3 模拟器使用要点

模拟器启动后,你会发现界面和手机完全不同。它模拟了车载中控的横屏显示,还提供了虚拟的车辆控制面板。

// 通过 adb 模拟车辆速度变化
adb shell dumpsys car_service --set-speed 60

// 模拟车辆点火/熄火
adb shell dumpsys car_service --set-ignition on

嗯,这里要注意,模拟器毕竟不是真车。有些传感器数据是模拟出来的,和真实硬件有差距。我在项目初期就吃过这个亏——模拟器上跑得好好的,一上真车就各种问题。

核心建议:开发阶段多用模拟器验证逻辑,但关键功能一定要在真车上测试。特别是涉及车辆控制、安全相关的功能,马虎不得。

好了,第一章的内容就到这里。环境搭好了,咱们后面就能动手写代码了。记住,车载开发是个细致活,别着急,慢慢来。

公众号:蓝海资料掘金营,微信deep3321