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:47
cc449f7941456a0133ff8a4b2e49737f0936c1d0
代码库下载方法
repo sync -c packages/services/Car
代码库配置文件
为什么Google推出Android Automotive?
我认为主要有以下几点:
- 首先Google和苹果先后推出的 Android Auto 和 CarPlay 不能得到车厂的青睐,这种技术策略核心是投屏,将手机屏幕内容显示在车机上,不可避免的需要和手机交互。
- 车厂不想汽车数据共享给互联网公司,车厂都会各自实现一套汽车软件方案,Google难以介入。
- 传统的开发模式,开发成本高。
- Google需要为不同的硬件迭代以及软件版本升级做更好的改善。
Android Automotive的优势:
- 免费
- 稳定的架构
- 为不同供应商的硬件和软件解耦
Android Automotive的劣势:
- 仍然没有一套完整的解决方案。包括升级和维护、版本管理
- 安全性低
- 测试门槛高,需要各种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 Automotive 架构
- Car API:包含Android Automotive功能的 API。
- CarService:系统框架层的服务,处理Android Automotive功能的业务逻辑。
- Vehicle HAL:用于定义 OEM 可以实现的车辆属性的接口。
Android Automotive的界面
Android Automotive为了区别于手机系统,重新设计了一些专门在汽车设备上显示的应用,包括桌面、空调、通知等。
桌面应用程序
空调应用程序
通知界面
常用术语
缩写 | 全称 | 说明 |
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 |