Android Automotive (一) 介绍

做了很久的Android Car开发的工作,趁着最近不太忙,总结一下。本文内容基于Android R。

Android Automotive起始于Android N(也就是Android 7.x 版本。 2016年5月19日谷歌在美国加州的山景城举办了 Google I/O 开发者大会中发布。)。Android O开始,Google对Car有了更多的支持,为汽车制定了更多的应用。提出了HIDL架构。Android P开始,对框架做了进一步完善。Android Q开始,官方API文档正式支持Android Automotive Library。

Android Automotive的代码是AndroidN首次发布(2016年5月18日).
第一笔提交在2015-07-11 03:21:47cc449f7941456a0133ff8a4b2e49737f0936c1d0

代码库下载方法
repo sync -c packages/services/Car

代码库配置文件

为什么Google推出Android Automotive?

我认为主要有以下几点:

  • 首先Google和苹果先后推出的 Android Auto 和 CarPlay 不能得到车厂的青睐,这种技术策略核心是投屏,将手机屏幕内容显示在车机上,不可避免的需要和手机交互。
  • 车厂不想汽车数据共享给互联网公司,车厂都会各自实现一套汽车软件方案,Google难以介入。
  • 传统的开发模式,开发成本高。
  • Google需要为不同的硬件迭代以及软件版本升级做更好的改善。

Android Automotive的优势:

  1. 免费
  2. 稳定的架构
  3. 为不同供应商的硬件和软件解耦

Android Automotive的劣势:

  1. 仍然没有一套完整的解决方案。包括升级和维护、版本管理
  2. 安全性低
  3. 测试门槛高,需要各种ecu联调

什么是 Android Automotive?

Android Automotive 是一个基本 Android 平台,可运行 IVI 系统中预安装的 Android 应用以及可选的第二方和第三方 Android 应用。

Android Automotive 可为车载信息娱乐系统和车机提供开放性、自定义和规模化特性。开放性在免费的开源代码库中提供基本的车载信息娱乐功能,可进一步提升效率。借助自定义特性,实现人员能够在适当的情况下实现商品的差异化。规模化特性是通过 Android 的通用框架、语言和 API 来实现的,所有这些都使得全球数十万 Android 开发者的开发专长和成品软件得以重复使用。

Android Automotive 和 Android

了解 Android Automotive 与整个 Android 生态系统之间的关系至关重要:

  • Android Automotive 就是 Android 平台。Android Automotive 并非 Android 的分支或并行开发版本。它与手机和平板电脑等设备上搭载的 Android 使用相同的代码库,位于同一个存储区中。它基于开发时间逾 10 载的强大平台和功能集构建而成,因此能够利用现有的安全模型、兼容性计划、开发者工具和基础架构,同时继续保持较高的可定制性和可移植性,完全免费提供并且开源。
  • Android Automotive 扩展了 Android 平台。在将 Android 打造为功能完善的信息娱乐平台的过程中,我们增加了对汽车特定要求、功能和技术的支持。Android Automotive 将是一个一站式全栈车载信息娱乐平台,就像现在的 Android 系统之于移动设备一样。

Android Automotive 和 Android Auto

两者的命名方式可能有点让人迷惑不解。下面介绍了它们之间的区别:

  • Android Auto 是一个基于用户的手机运行的平台,可通过 USB 连接将 Android Auto 用户体验投射到兼容的车载信息娱乐系统。Android Auto 支持专为车载用途而设计的应用。
  • Android Automotive 是直接基于车载硬件运行的操作系统和平台。它是一个可定制程度非常高的全栈开源平台,可为信息娱乐体验提供强大的技术支持。Android Automotive 支持专为 Android 打造的应用,以及专为 Android Auto 打造的应用。

Automotive架构

先来看Android的架构,Android将一个系统从上到下分为几层,依次是System Apps系统应用层,Java API Framework系统框架层,Native C/C++ Libraries本地共享库,Android Runtime系统运行库,Hardware Abstraction Layer硬件抽象层,Linux Kernel系统驱动层。

关于Android平台架构可以参考《Android Platform Architecture 安卓平台架构》

Android Automotive是一个涉及系统应用层,系统框架层,本地共享库和硬件抽象层的模块。Android Automotive的系统架构如下

Android auto 第三方 androidautomotive_Android

Android Automotive 架构

  • Car API:包含Android Automotive功能的 API。
  • CarService:系统框架层的服务,处理Android Automotive功能的业务逻辑。
  • Vehicle HAL:用于定义 OEM 可以实现的车辆属性的接口。

Android Automotive的界面

Android Automotive为了区别于手机系统,重新设计了一些专门在汽车设备上显示的应用,包括桌面、空调、通知等。

桌面应用程序

Android auto 第三方 androidautomotive_automotive_02

空调应用程序

Android auto 第三方 androidautomotive_API_03

通知界面

Android auto 第三方 androidautomotive_API_04

常用术语

缩写

全称

说明

HAL

hardware abstraction layer

硬件抽象层

VHAL

Vehicle HAL

Android Automotive的硬件抽象层

RTOS

Real Time Operating System

实时操作系统

OEM

Original Equipment Manufacturer

原始设备制造商

MCU

Motor Control Unit

微控制器单元

CAN

Controller Area Network

制器域网

IVI

In-Vehicle Infotainment

车载信息娱乐

一些资料链接

官方api文档: https://developer.android.google.cn/reference/android/car/Car?hl=en

官方Car指导: https://source.android.google.cn/docs/devices/automotive

Android Car开发指南:https://developer.android.google.cn/training/cars

Android 汽车应用介绍https://developer.android.google.cn/cars

附 Android主流版本、发布时间和对应的API level

版本名称Code name

名称

版本

版本发布时间

对应API

(no code name)

1

2008年9月23日

API level 1

(no code name)

1.1

2009年2月2日

API level 2

Cupcake

纸杯蛋糕

1.5

2009年4月17日

API level 3,NDK 1

Donut

甜甜圈

1.6

2009年9月15日

API level 4,NDK 2

Eclair

松饼

2.0.1

2009年12月3日

API level 6

Eclair

松饼

2.1

2010年1月12日

API level 7,NDK3

Froyo

冻酸奶

2.2.x

2010年1月12日

API level 8,NDK 4

Gingerbread

姜饼

2.3

2011年1月1日

API level 9,NDK5

Gingerbread

姜饼

2.3.3

2011年9月2日

API level 10

Honeycomb

蜂巢

3

2011年2月24日

API level 11

Honeycomb

蜂巢

3.1

2011年5月10日

API level 12,NDK 6

Honeycomb

蜂巢

3.2.x

2011年7月15日

API level 13

Ice Cream Sandwich

冰激凌三明治

4

2011年10月19日

API level 14,NDK 7

Ice Cream Sandwich

冰激凌三明治

4.0.3

2012年2月6日

API level 15,NDK 8

Jelly Bean

果冻豆

4.1

2012年6月28日

API level 16

Jelly Bean

果冻豆

4.1.1

2012年6月28日

API level 16

Jelly Bean

果冻豆

4.2

2012年11月

API level 17

Jelly Bean

果冻豆

4.3

2013年7月

API level 18

KitKat

奇巧

4.4

2013年7月24日

API level 19

Kitkat Watch

4.4W

2014年6月

API level 20

Lollipop(Android L)

棒棒糖

5

2014年6月25日

API level 21

Lollipop(Android L)

棒棒糖

5.1

API level 22

Marshmallow(Android M)

棉花糖

6

2015年5月28日

API level 23

Nougat(Android N)

牛轧糖

7

2016年5月18日

API level 24

Nougat(Android N)

牛轧糖

7.1

2016年12月

API level 25

Oreo(Android O)

奥利奥

8

2017年8月22日

API level 26

Oreo(Android O)

奥利奥

8.1

2017年12月5日

API level 27

Pie (Android P)


9

2018年8月7日

API level 28

Q (Android Q)

10

2019年9月4日

API level 29

11(Android R)(Red Velvet Cake)

红丝绒蛋糕

11

2020年9月9日

API level 30

12(Android S)(Snow Cone)

刨冰

12

2021年5月19日

API level 31

13(Android T)(Tiramisu)

提拉米苏

13

2022年8月16日

API level 32