车机系统与 Android 的关系概述

news2024/12/24 3:01:59

前言:搞懂 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接口用来供其他模块使用;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaWeb开发02-MYSQL-DDL-DML-DQL-多表设计-多表查询-事务-索引

一、MySQL概述 通过SQL语句可以操作数据库 关系型数据库: 只要是关系型数据库就可以用SQL语句这一统一标准进行操作数据库 1.MYSQL数据模型 客户端通过SQL语句交给了数据库管理系统DBMS,进行相应操作,创建一个一个数据库,体现为一…

mysql使用逗号分隔的一行数据转多行数据

文章目录 学习链接准备建表插入数据 方法MySQL逗号拼接的列拆分为多行(不使用mysql.help_topic)遇到字段以逗号分隔符分号分隔符存放多个值,需要一行转化多行,以用来关联(使用mysql.help_topic)改为LEFT JO…

DevOps是什么?

DevOps是一系列实践、工具和文化理念的组合,旨在自动化并整合软件开发和信息技术运维团队之间的流程。以下是DevOps的几个关键点: 沟通与协作:DevOps强调开发和运维团队之间的沟通与合作,通过改善这两个部门间的协作关系&#xff…

OpenHarmony轻量系统开发【13】鸿蒙小车开发

13.1 小车介绍 基于鸿蒙系统 Hi3861 的WiFi小车 首先,我们得有一套WiFi小车套件,其实也是Hi3861 加上电机、循迹模块、超声波等模块。 小车安装完大概是这样: 13.2 电机驱动 我们这里先只做最简单的,驱动小车的电机&#xff…

奶酪——并查集,BFS,DFS(NOIP2017提高组)

目录 题目 思路 并查集 代码(java) BFS(DFS同理) 代码(C) 题目 思路 这个题目意思是有很多个球分布在一个三维空间内,如果这些球相切或者相交都可以互相到达,我们需要判断能否…

【python从入门到精通】-- 第五战:函数大总结

🌈 个人主页:白子寰 🔥 分类专栏:python从入门到精通,魔法指针,进阶C,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~ 💡 坚持创作博文…

元宇宙VR虚拟线上展馆满足企业快速布展的需要

想要拥有一个VR线上虚拟展馆,展现您的城市风采或企业特色吗? 相比实体展馆搭建,VR线上虚拟展馆投入资金少,回报周期短,只需几个月的时间,您就能开始资金回笼。那么一个VR线上虚拟展馆多少钱呢? 深圳VR公司华锐视点基…

C语言如何使⽤指针?

一、问题 指针变量在初始化以后就可以使⽤和参与操作了,那么就要⽤到对指针变量最常⽤的两个操作符——> * 和 & 。 二、解答 这⾥⼜要提到始终贯穿着指针的⼀个符号“ * ”,但是这⾥的“ * ”是作为指针运算符使⽤的,叫做取内…

三大常用自动化框架对比

上次发布过性能测试工具的对比后,有小伙伴后台留言,想了解一下自动化测试框架的对比,尤其是RobotFramework、pytest和unitest之间的优劣势情况。 这不我们今天就来分析一下他们之间的区别和各自的优缺点。 1 RobotFramework 优点:…

selenium 下载文件取消安全下载的方法

问题描述 我要从一个网站上下载文件,谷歌浏览器总是自动阻止下载,并询问我是否保留。 可是,我想要的是不要询问,默认下载即可。 运行环境 OS: macOSselenium: 4.19.0python: 3.10.11Chrome: 124.0.6367.62selenium chromedrive…

openEuler-23.03下载

下载地址:openEuler下载 | 欧拉系统ISO镜像 | openEuler社区官网 下载版本:openEuler-23.03-x86_64-dvd.iso

CTF中常见的四种python逆向

说在前面: 什么是pyc文件? pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高, pyc 文件是 Python 编译过的字节码文…

WdatePicker异常,无法弹出日期选择框

官网:My97日期控件官方网站 My97 DatePickerhttp://www.my97.net/ 可能使版本太老了,可以更新一下,然后根据官方的文件进行使用。 我的异常是因为在网上找的包里面缺少文件,去官网拉了一下最新的就行了。

【Linux驱动层】iTOP-RK3568学习之路(二):vscode中设置头文件路径-完成代码自动补全

在Ubuntu下用vscode写Linux驱动层的时候&#xff0c;需要添加头文件&#xff1a; #include<linux/module.h> #include<linux/init.h> #include<linux/kernel.h>但vscode没有智能提示&#xff0c;因此需要我们手动添加自己的头文件路径&#xff1a; topeetu…

Ubuntu 23.10.1 nginx源码安装

注&#xff1a;以下所有命令均在root管理员模式下&#xff0c;若不是&#xff0c;请在所有命令前加sudo 1、安装依赖库 1.1、安装gcc g的依赖库 apt-get install build-essential apt-get install libtool1.2、安装pcre依赖库 apt-get update apt-get install libpcre3 lib…

嵌入式科普(15)小米su7成本分析和拆解之智驶、座舱分析

目录 一、概述 二、小米su7成本分析 2.1 整车成本构成 2.2 三电系统 2.3 车身与底盘 2.3 智能网联 2.4 内外饰 三、小米su7拆解之智驶、座舱分析 3.1 主要芯片 3.2 智能驾驶&智能座舱 四、NXP S32K324汽车通用微控制器 嵌入式科普(15)小米su7成本分析和拆解之智…

【结构型模式】外观模式

​一、外观模式概述 外观模式定义与意图&#xff1a;外观类为复杂的子系统提供了一个统一的入口。外观模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用。&#xff08;对象结构型模式&#xff09; 外观模式的特点&#xff1a; 1.又叫做门面模式&#xf…

JRT在线初始化完善

之前实现的在线初始化留了个尾巴&#xff0c;那就是环境下载页构造zip包的时候没修改JRTBrowser的连接串地址为当前网站&#xff0c;这样就要求网站部署好之后给用户下载之前有人要把服务器的浏览器地址配置好。这样就增加一个运维工作&#xff0c;如果忘了或者不知道的人就会导…

在Windows安装R语言

直接安装R语言软件 下载网址&#xff1a;R: The R Project for Statistical Computing 下载点击install R for the first time 通过Anaconda下载RStudio 提前下载好Anaconda 点击Anaconda Navigate 点击RStudio的Install下载就好了

labelimg安装和使用(解决闪退问题)

&#x1f308;个人主页&#xff1a;Rookie Maker &#x1f525; 系列专栏&#xff1a;计算机视觉 &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于IT的优质内容&#xff01;&#x1f3c6;&#x1f3c6; &#x1f600;欢迎来到我的代码世界~ &#x1f601; 喜…