车机系统与 Android 的关系概述

前言:搞懂 Android 系统和汽车到底有什么关系。

文章目录

  • 一、基本概念
    • 1、Android Auto
      • 1)是什么
      • 2)功能
    • 2、Google Assistant
    • 3、Android Automotive
      • 1、Android Auto 和 Android Automotive 的区别
    • 4、App
      • 1)App 的开发
      • 2)App 的设计
  • 二、源码和架构
    • 1、Android Automative的整体架构
      • 1)Car App
      • 2)Car API
      • 3)Car Service
      • 4)Car Tool
        • a、VMS

一、基本概念

1、Android Auto

1)是什么

  • Android Atuo 是一个 Android 端的 app,专门为驾驶环境设计的;
  • 运行环境:需要在 Android 5.0 或者更高版本的系统,并且需要 Google 地图和 Google Play 音乐应用;

2)功能

  • Android Atuo 可以用来将 Android 设备上的部分功能映射到汽车屏幕上;
  • 满足了很多人在开车时会使用手机的需求;

2、Google Assistant

  • Google 将 GoofleAssistant 集成到 AndroidAuto 中;
  • 交互方式有键盘、触摸、语音等;
  • 对于汽车来说,语音无疑是比触摸更好的交互方式;
  • 在驾驶环境中,语音交换存在的优势
    • 用户不改变自身的物理姿势,这种交互方式不影响驾驶员对驾驶的操作;
    • 有需要多次触摸的交互时,可能只需要一条语音就可以完成;
    • 语音交互不存在入口的层次嵌套,数据更加扁平;
    • 优秀的语音系统可以利用对话的上下文完成任务,避免用户重复输入;

3、Android Automotive

1、Android Auto 和 Android Automotive 的区别

  • Android Auto 是以手机为中心的
    • 好处:数据和应用始终是一致的,不存在需要数据同步的问题,手机上装的软件和已有数据,接到汽车上就直接有了;
    • 坏处:每次都需要拿出手机,汽车只是作为手机的一个外设;这种模式不便于对于汽车本身的控制和相关数据的获取;
  • Android Automotive
    • 如果将系统直接内置于汽车中,会大大提升用户体验;
    • Android Automotive 就是面向这个方向进行设计的;
    • 一旦将系统内置于汽车,可以完成的功能就会大大增加;例如,直接在中控触摸屏上调整座椅和空调;同时,系统也能获取更多关于汽车的信息,例如:油耗水平、刹车使用等;

加两张中控和仪表的图片

4、App

1)App 的开发

  • Android Auto 目前仅支持两类第三方应用
    • 音频应用:允许用户浏览和播放汽车中的音乐和语音内容;
    • 消息应用:通过 text-to-speech 朗读消息并通过语音输入回复消息;

2)App 的设计

  • Google 专门为 Android Auto 上的 UI 设计做了一个指导网站:Auto UI guidelines;
  • 基本指导原则(车机交互系统的借鉴)
    • Android Auto 上的互动步调必须由驾驶员控制;
    • 汽车界面上的触摸目标必须足够大,以便可以轻松地浏览和点击;
    • 适当的私彩对比可以帮助驾驶员快速解读信息并做出决定;
    • 应用必须支持夜间模式,因为过高的强度可能会干扰注意力;
    • Roboto 字体在整个系统中用于保持一致性并帮助提高可读性;
    • 通过触摸来进行分页应用用来作为滑动翻页的补充;
    • 有节制地使用动画来描述两个状态间的变化;

二、源码和架构

1、Android Automative的整体架构

  • Android Automative 的源码包含在 AOSP 中;
  • Android Automative 是在原先 Android的 系统架构上增加了一些与车相关的(图中虚线框中绿色背景的)模块;
    • Car App:包括 OEM 和第三方开发的 App;
      • OEM:就是汽车厂商利用自身掌握的核心技术负责设计和开发新产品,而具体的生产制造任务则通过合同订购的方式委托给同类产品的其他厂家进行,最终产品会贴上汽车厂商自己的品牌商标。这种生产方式被称为定牌生产合作,俗称“贴牌”。承接这种加工任务的制造商就被称为OEM厂商,其生产的产品就是OEM产品;
    • Car API:提供给汽车 App 特有的接口;
    • Car Service:系统中与车相关的服务;
    • Vehicle Network Service:汽车的网络服务;
    • Vehicle HAL:汽车的硬件抽象层描述;

1)Car App

  • /car_product/build/car.mk 这个文件中列出了汽车系统中专有的模块;

  • 列表中,首字母大写的模块基本上都是汽车系统中专有的 App;

  • App的源码都位于 /platform/packages/services/Car/ 目录下

    # Automotive specific packages
    PRODUCT_PACKAGES += \
        vehicle_monitor_service \
        CarService \
        CarTrustAgentService \
        CarDialerApp \
        CarRadioApp \
        OverviewApp \
        CarLensPickerApp \
        LocalMediaPlayer \
        CarMediaApp \
        CarMessengerApp \
        CarHvacApp \
        CarMapsPlaceholder \
        CarLatinIME \
        CarUsbHandler \
        android.car \
        libvehiclemonitor-native \
    

2)Car API

  • 开发汽车专有的App自然需要专有的API;
  • 这些API对于其他平台(例如手机和平板)通常是没有意义的;
  • 所以这些API没有包含在Android Framework SDK中;
  • 下图列出了所有的 Car API;
  • android.car:包含了与车相关的基本API。例如:车辆后视镜,门,座位,窗口等。
    • cabin:座舱相关API。
    • hvac:通风空调相关API。(hvac是Heating, ventilation and air conditioning的缩写)
    • property:属性相关API。
    • radio:收音机相关API。
    • pm:应用包相关API。
    • render:渲染相关API。
    • menu:车辆应用菜单相关API。
    • annotation:包含了两个注解。
    • app
    • cluster:仪表盘相关API。
    • content
    • diagnostic:包含与汽车诊断相关的API。
    • hardware:车辆硬件相关API。
    • input:输入相关API。
    • media:多媒体相关API。
    • navigation:导航相关API。
    • settings:设置相关API。
    • vms:汽车监测相关API。

3)Car Service

  • Car Service并非一个服务,而是一系列的服务。这些服务都在ICarImpl.java构造函数中列了出来;
public ICarImpl(Context serviceContext, IVehicle vehicle, SystemInterface systemInterface,
        CanBusErrorNotifier errorNotifier) {
    mContext = serviceContext;
    mHal = new VehicleHal(vehicle);
    mSystemActivityMonitoringService = new SystemActivityMonitoringService(serviceContext);
    mCarPowerManagementService = new CarPowerManagementService(
            mHal.getPowerHal(), systemInterface);
    mCarSensorService = new CarSensorService(serviceContext, mHal.getSensorHal());
    mCarPackageManagerService = new CarPackageManagerService(serviceContext, mCarSensorService,
            mSystemActivityMonitoringService);
    mCarInputService = new CarInputService(serviceContext, mHal.getInputHal());
    mCarProjectionService = new CarProjectionService(serviceContext, mCarInputService);
    mGarageModeService = new GarageModeService(mContext, mCarPowerManagementService);
    mCarInfoService = new CarInfoService(serviceContext, mHal.getInfoHal());
    mAppFocusService = new AppFocusService(serviceContext, mSystemActivityMonitoringService);
    mCarAudioService = new CarAudioService(serviceContext, mHal.getAudioHal(),
            mCarInputService, errorNotifier);
    mCarCabinService = new CarCabinService(serviceContext, mHal.getCabinHal());
    mCarHvacService = new CarHvacService(serviceContext, mHal.getHvacHal());
    mCarRadioService = new CarRadioService(serviceContext, mHal.getRadioHal());
    mCarNightService = new CarNightService(serviceContext, mCarSensorService);
    mInstrumentClusterService = new InstrumentClusterService(serviceContext,
            mAppFocusService, mCarInputService);
    mSystemStateControllerService = new SystemStateControllerService(serviceContext,
            mCarPowerManagementService, mCarAudioService, this);
    mCarVendorExtensionService = new CarVendorExtensionService(serviceContext,
            mHal.getVendorExtensionHal());
    mPerUserCarServiceHelper = new PerUserCarServiceHelper(serviceContext);
    mCarBluetoothService = new CarBluetoothService(serviceContext, mCarCabinService,
            mCarSensorService, mPerUserCarServiceHelper);
    if (FeatureConfiguration.ENABLE_VEHICLE_MAP_SERVICE) {
        mVmsSubscriberService = new VmsSubscriberService(serviceContext, mHal.getVmsHal());
        mVmsPublisherService = new VmsPublisherService(serviceContext, mHal.getVmsHal());
    }
    mCarDiagnosticService = new CarDiagnosticService(serviceContext, mHal.getDiagnosticHal());

4)Car Tool

a、VMS
  • VMS全称是Vehicle Monitor Service。正如其名称所示,这个服务用来监测其他进程;
  • 在运行时,这个服务是一个独立的进程,在init.car.rc中有关于它的配置
service vms /system/bin/vehicle_monitor_service
   class core
   user root
   group root
   critical

on boot
    start vms
  • 这是一个Binder服务,并提供了C++和Java的Binder接口用来供其他模块使用;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/544370.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【VS2019】x64 Native Tools Command Prompt for Vs 2019使用conda命令进入环境

【VS2019】x64 Native Tools Command Prompt for Vs 2019使用conda命令进入环境 安装完VS2019后,打开终端x64 Native Tools Command Prompt for Vs 2019,直接运行conda会出现‘conda’ 不是内部或外部命令,也不是可运行的程序 原因分析&am…

Kafka 架构深入介绍 及搭建Filebeat+Kafka+ELK

目录 一 架构深入介绍 (一)Kafka 工作流程及文件存储机制 (二)数据可靠性保证 (三)数据一致性问题 (四)故障问题 (五)ack 应答机制 二 实…

YOLOv1精读笔记

YOLO系列 摘要1. 将目标检测视为一个回归问题2. 定位准确率不如 SOTA,但背景错误率更低3. 泛化能力强 1.引言1.1 YOLO 速度很快1.2 全局推理 2. Unified Detection2.1 网络设计2.2 训练YOLOv1模型损失函数的选择和其潜在的问题YOLOv1模型如何改进其损失函数来更好地…

深入理解信号上升沿与带宽的关系

信号的上升时间,对于理解信号完整性问题至关重要,高速pcb设计中的绝大多数问题都和它有关,很多信号完整性问题都是由信号上升时间短引起的,你必须对他足够重视。 信号上升时间并不是信号从低电平上升到高电平所经历的时间&#xf…

五、Jenkins、Docker、SpringClound持续集成

Jenkins、Docker、SpringClound持续集成 一、部署介绍1.部署图2.微服务项目结构3.项目启动顺序 二、微服务项目在Windows运行1.配置java、maven环境2.初始化数据库表/数据2.1 tensquare_gathering服务表2.2 tensquare_gathering服务表 3.启动微服务4.微服务接口测试4.1 获取用户…

陇剑杯 ios 流量分析

陇剑杯 ios 流量分析 ios 一位ios的安全研究员在家中使用手机联网被黑,不仅被窃密还丢失比特币若干,根据流量分析完成ios1-8 ios 1 ios-1:黑客所控制的C&C服务器IP是_____________。 什么是C&C服务器? C&C(Com…

回溯算法中常见的使用方法逻辑整理

回溯算法 常见的使用方法逻辑整理 1. 回溯算法 特点 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法&#xff0…

乐写9612手写板实测故障

闲鱼上淘了二手的 ①需要驱动很强的usb口,老usb口会不识别,尤其是笔记本容易不识别,非常容易出现下面这种问题: ②需要microsoft2013以上的,兼容性做的比较差 ③由于可视化,导致数据线容易烧,…

stm32报错问题集锦

PS:本文负责记录本人日常遇到的报错问题,以及问题描述、原因以及解决办法等,解决办法百分百亲测有效。本篇会不定期更新,更新频率就看遇到的问题多不多了 更换工程芯片型号 问题描述 例程最开始用的芯片型号是STM32F103VE&#…

CentOS 7安装Nginx

说明:本文介绍如何在CentOS 7操作系统中安装Nginx 下载安装 首先,去官网上下载Nginx压缩包,官网地址:https://nginx.org/en/download.html,我这里下载稳定版1.24.0; 上传到云服务器上,解压&am…

数据可视化基础与应用-04-seaborn库人口普查分析--如何做人口年龄层结构金字塔

总结 本系列是数据可视化基础与应用的第04篇seaborn,是seaborn从入门到精通系列第3篇。本系列主要介绍基于seaborn实现数据可视化。 参考 参考:我分享了一个项目给你《seaborn篇人口普查分析–如何做人口年龄层结构金字塔》,快来看看吧 数据集地址 h…

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题5

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题5 第一阶段竞赛项目试题 本文件为信息安全管理与评估项目竞赛-第一阶段试题,第一阶段内容包括:网络平台搭建与设备安全防护。 本次比赛时间为180分钟。 介绍 竞赛阶段…

Unity 人形骨骼动画模型嘴巴张开

最近搞Daz3D玩,导入后挂上动画模型嘴巴张开,其丑无比。 Google了一下,得知原因是Unity没有对下巴那根骨骼做控制,动画系统就会把它放到默认的位置,嘴巴就张开了。找到了3种解决办法。 1.移除动画中对下巴这个骨骼的转…

简单认识Git(dirsearch、githack下载),git泄露(ctfhub)

目录 dirsearch下载地址: githack下载(一次不成功可多试几次) 一、什么是Git 1.git结构 2.git常用命令及示例 3.Git泄露原理 二、Git泄露 1.Log 2.Stash 3.Index 工具准备:dirsearch、githack dirsearch下载地址: GitHub - mauroso…

数据库SQL语言实战(二)

目录 检索查询 题目一 题目二 题目三 题目四 题目五 题目六 题目七 题目八 题目九(本篇最难的题目) 分析 实现(两种方式) 模板 总结 检索查询 按照要求查找数据库中的数据 题目一 找出没有选修任何课程的学…

02 MySQL 之 DQL专题

3. 数据库中仅有月薪字段(month_salary),要求查询所有员工的年薪,并以年薪(year_salary)输出: 分析: 查询操作中,字段可以参与数学运算as 起别名,但实际上可以省略 #以下两句效果…

深入了解数据结构第四弹——排序(1)——插入排序和希尔排序

前言: 从本篇开始,我们就开始进入排序的学习,在结束完二叉树的学习之后,相信我们对数据在内存中的存储结构有了新的认识,今天开始,我们将进入排序的学习,今天来学习第一篇——插入排序 目录 什…

使用DockerCompose安装Redis

本文使用docker-compose的方式安装Redis,如何未安装docker-compose,可以参考这篇文章进行安装【在Ubuntu上安装Docker Compose】 一、创建一个DockerCompose配置文件 第一步:创建相关目录文件 为了更好的组织管理Docker容器的配置文件和映射…

毕业后个人档案如何查询

毕业后个人档案查询通常需要在所在学校的学籍管理部门或学生事务处进行查询。具体步骤如下: 1. 准备相关材料:身份证或护照复印件,毕业证书复印件,学号等相关信息。 2. 前往学校学籍管理部门或学生事务处,咨询个人档案…

C语言中局部变量和全局变量是否可以重名?为什么?

可以重名 在C语言中, 局部变量指的是定义在函数内的变量, 全局变量指的是定义在函数外的变量 他们在程序中的使用方法是不同的, 当重名时, 局部变量在其所在的作用域内具有更高的优先级, 会覆盖或者说隐藏同名的全局变量 具体来说: 局部变量的生命周期只在函数内部,如果出了…