车载应用技术——Android Automotive系统

黄金赛道

在智能手机行业初兴起时,包括BAT在内许多传统互联网企业都曾布局手机产业,但是随着手机市场的基本定型,造车似乎又成了各大资本下一个追逐的方向。百度、小米先后宣布造车,阿里巴巴则与上汽集团共同投资创立了,面向汽车全行业提供智能汽车操作系统和智能网联汽车整体解决方案的斑马网络,一时间造车俨然成了资本市场的下一个风口。

而作为移动端操作系统的霸主 - Android,也以一种新的姿态高调侵入造车领域,这就是 Android 车载信息娱乐系统 - Android Automotive。

Android automotive简介

Android Automotive作为车载信息娱乐系统必须具备查看、控制整车其它子系统(如 空调)的能力,但是不同的制造商提供的总线类型和协议之间有很大差异,例如控制器局域网 (CAN) 总线、区域互连网路 (LIN) 总线、面向媒体的系统传输 (MOST) 总线以及汽车级以太网和 TCP/IP 网络(如 BroadR-Reach)。

Android Automotive 的硬件抽象层 (HAL) 为 Android 框架提供了一致的接口(无需考虑物理传输层),系统集成商可以将特定功能的平台 HAL 接口(如 空调)与特定于技术的网络接口(如 CAN 总线)连接,以实现车载 HAL 模块。

Android automotive的系统架构图如下:Android Automative是在原先Android的系统架构上增加了一些与车相关的模块。
车载应用技术——Android Automotive系统_第1张图片

  • Car App:包括OEM和第三方开发的App
  • Car API:提供给汽车App特有的接口
  • Car Service:系统中与车相关的服务
  • Vehicle Network Service:汽车的网络服务
  • Vehicle HAL:汽车的硬件抽象层描述

模块介绍

1.1 Car App

包括 OEM厂商和第三方的apk,声明代码路径如下,car_base下主要是系统的基础平台,car.mk为添加的所有汽车制造的通用制造文件,这个列表中,首字母大写的模块基本上都是汽车系统中专有的App。源码位于android/packages/services/Car,当然我们自己也可以添加apk,这部分相对来说用到java比较多,后面有机会往更深层的学习。

1.2 Car ApI

提供给汽车app特有的接口。这些API是提供给Android automotive系统的app,对于其他平台(例如手机和平板)通常是没有意义的,所以这些API没有包含在Android Framework SDK中。如图是几乎涵盖了Android automotive所有的api接口。
车载应用技术——Android Automotive系统_第2张图片

代码的路径位于:
车载应用技术——Android Automotive系统_第3张图片

下面介绍一下关键的接口:

car.java:包含了与车相关的基本API。例如:车辆后视镜,门,座位,窗口等。

  • app →menu:车辆应用菜单相关API。
  • cluster:仪表盘相关API。
  • media:多媒体相关API。
  • hardware:车辆硬件相关API。
  • navigation:导航相关API。
  • settings:设置相关API。

1.3 Car Services

Android Automative中的Car Service集中在一个App中。可以想象,这个App需要非常高的权限,所以这是一个系统App。Car Service并非一个服务,而是一系列的服务。这些服务都在ICarImpl.java构造函数中列了出来。

还有几个模块没有出现在上面的架构图中。但它们也包含在了Android Automative系统中,这里一并介绍一下。

  • VMS:vehicle monitor service, 汽车其他服务监测,主要是监测其他进程。
  • ODB2: ODB全称是On-Board Diagnostics。这是一种装置于车中用以监控车辆运行状态和回报异常的系统,可于车辆的子系统出现问题时,产生故障代码和提醒讯号通知车主和车厂诊断维修
  • VNS: Vehicle Network Service,

1.4 Vehicle HAL

车载HAL使用以下接口:

  • vehicle_prop_config_t const *(list_properties)(…, int num_properties) 列出车载 HAL 所支持的所有属性的配置。车辆网络服务只会使用受支持的属性。
  • (*get)(…, vehicle_prop_value_t data) 读取属性的当前值。对于区域属性,每个区域都可能具有不同的值。
  • (*set)(…, const vehicle_prop_value_t data) 为属性写入相应值。写入的结果是按属性进行定义。
  • (subscribe)(…, int32_t prop, float sample_rate, int32_t zones) 监视属性值的变化,回调见下文。
  • (release_memory_from_get)(struct vehicle_hw_device device, vehicle_prop_value_t *data) 释放从 get 调用分配的内存。

车载HAL使用以下回调接口:

  • (*vehicle_event_callback_fn)(const vehicle_prop_value_t event_data) 通知车辆属性值的变化。
  • (*vehicle_error_callback_fn)(int32_t error_code, int32_t property, int32_t operation) 返回全局车载 HAL级错误或每个属性的错误。全局错误会导致HAL重新启动,这可能导致包括应用在内的其他组件重新启动。
    车载应用技术——Android Automotive系统_第4张图片

以上是对Android automotive的简单介绍以及他的模块划分;车机技术在现在这个节点无疑是一个“黄金赛道”,之所以很多Android应用开发转车载系统应用工程师;肯定是看到了这个行业前景。

还有对行业迷茫的Android开发人员,一定要抓住行业机遇;对此我推荐这个车载学习资料《车载系统开发技术PDF》;希望能够利用好,对大家有很大帮助!

随着燃油车的退场;迎来新能源汽车普及。跟着国家的号召绝对是正确选择!市场决定岗位发展。

你可能感兴趣的:(Android开发,Android车载开发,android,车载技术,程序员,IT,移动开发)