车机系统与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/542191.html

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

相关文章

【生产案例面试题】JVM调优

写作目的 最近上线了一个需求,遇到了一个JVM报警的问题,很荣幸能遇到,在此分享一下整个调优的过程。 背景 我们是中台服务,我们的甲方就是上游不同的业务。中台原则上是业务和能力分离,但是不可避免的是分不开&…

网络通信三要素:IP、端口和协议

IP:设备在网络中的地址,是唯一的标识 IP:全程”互联网协议地址“,是分配给上网设备的唯一标志 IP地址有两种形式: IPv4:32位 IPv6:共128位。分成8段表示,每取四位编码成一个16进制…

全新付费进群系统源码 带定位完整版 附教程

搭建教程 Nginx1.2 PHP5.6-7.2均可 最好是7.2 第一步上传文件程序到网站根目录解压 第二步导入数据库(dkewl.sql) 第三步修改/config/database.php里面的数据库地址 第四步修改/config/extra/ip.php里面的域名 第四步设置伪静态thinkphp 总后台账…

大厂Java笔试题之百钱买百鸡问题

题目:公元五世纪,我国古代数学家张丘建在《算经》一书中提出了"百鸡问题":鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。 百钱买百鸡,问鸡翁、鸡母、鸡雏各几何? 现要求你打印出所有花一…

HarmonyOS实战开发-如何实现wlan激活和关闭、扫描和连接WIFI功能

介绍 本示例通过ohos.wifiManager 相关API实现wlan激活和关闭、扫描和连接WIFI等功能。 效果预览 使用说明 启动应用后会判断WLAN是否激活,如果是激活状态,会扫描并展示可用WiFi列表,同时获取已连接WiFi信息并展示;点击界面的S…

跨平台桌面应用 Electron 入门学习

本文章主要为该视频的学习笔记,如果侵权会速删。 Electron 01 课程介绍_哔哩哔哩_bilibiliElectron 01 课程介绍, 视频播放量 3046、弹幕量 0、点赞数 75、投硬币枚数 43、收藏人数 179、转发人数 2, 视频作者 极客丶张德龙, 作者简介 当你的能力还不足以撑起自己的…

基于博客系统的功能测试和性能测试

目录 项目介绍 项目功能 设计测试用例 功能测试--自动化测试 测试代码 登录测试 博客详情页测试 发布博客测试 删除博客测试 退出账号测试 性能测试 项目介绍 1.博客系统采用前后端分离的方法来实现,同时使用了数据库来存储相关的数据,同时将…

【一刷《剑指Offer》】面试题 3:二维数组中的查找

力扣对应题目链接:240. 搜索二维矩阵 II - 力扣(LeetCode) 核心考点:数组相关,特性观察,时间复杂度把握。 一、《剑指Offer》对应内容 二、分析题目 正常查找的过程本质就是排除的过程,谁排除…

AIGC专栏10——EasyAnimate 一个新的类SORA文生视频模型 轻松文生视频

AIGC专栏10——EasyAnimate 一个新的类SORA文生视频模型 📺轻松文生视频 学习前言源码下载地址技术原理储备(DIT/Lora/Motion Module)什么是Diffusion Transformer (DiT)LoraMotion Module EasyAnimate简介EasyAnimate原理界面展示快速启动云…

RUM 最佳实践-交互延迟的探索与发现

FID 在互联网高速发展的时代,用户体验已成为企业竞争的关键所在。网页性能作为用户体验的重要组成部分,直接影响着用户的满意度和工作效率。First Input Delay(FID)作为衡量网页性能的重要指标,越来越受到业界关注。今…

万字长文深入理解Docker镜像分层原理、容器数据卷、网络通信架构(Docker系列第2章,共3章)

镜像分层的简单直观体现 在执行docker pull时,会发现多个Pull complete 字样,就能体现分层,如果是一个文件,只会有一个Pull complete 。 docker pull redis Using default tag: latest latest: Pulling from library/redis a2ab…

数据治理专家岗位的能力模型

数据治理专家的角色要求其具备全方位的专业素养与技能,不仅要有深厚的业务理解与数据技术功底,还需展现出卓越的领导力、团队协作与沟通能力,以驱动组织内部数据治理工作的高效运行与持续优化。以下是对数据治理专家各项能力的深入解读&#…

STM32H743VIT6使用STM32CubeMX通过I2S驱动WM8978(5)

接前一篇文章:STM32H743VIT6使用STM32CubeMX通过I2S驱动WM8978(4) 本文参考以下文章及视频: STM32CbueIDE Audio播放音频 WM8978 I2S_stm32 cube配置i2s录音和播放-CSDN博客 STM32第二十二课(I2S,HAL&am…

C++学习进阶:哈希思想的进一步体现

目录 前言 1.位图 1.1.位图的实现与原理 1.2.如何使用位图处理海量数据 2.布隆过滤器 2.1.知识引入 2.2.布隆过滤器的实现 2.3.布隆过滤器的应用 3.哈希切割 前言 我们在之前对哈希表的学习,明白了哈希的本质就是一种映射!!&#xf…

安达发|APS智能优化排产软件之模具约束

在制造业中,模具是生产过程中不可或缺的重要工具。然而,由于模具的制造周期长、成本高以及生产过程中的复杂性,如何合理安排模具的使用和生产计划成为了一个关键问题。为了解决这个问题,许多企业开始采用APS(高级计划与…

主干网络篇 | YOLOv8更换主干网络之VanillaNet | 华为方舟实验室提出全新轻量级骨干架构

前言:Hello大家好,我是小哥谈。华为方舟实验室所提出的VanillaNet架构克服了固有复杂性的挑战,使其成为资源受限环境的理想选择。其易于理解和高度简化的架构为高效部署开辟了新的可能性。广泛的实验表明,VanillaNet提供的性能与著名的深度神经网络和vision transformers相…

深度剖析Java中的String类

目录 引言 String类的特性 String类的部分实现代码: 不可变性: 补充: 常量池: 不可变性的好处 创建String对象 创建String对象的常用的三种方法如下: 使用常量串构造(最常用)&#xf…

帝国cms仿《鳄鱼下载站》网站源码

仿《鳄鱼下载站》网站源码手机安卓软件网站模版 PHP网站源码 帝国cms内核 采用帝国cms7.5 环境PHPmysql 恢复数据库后如何修改密码: 双击表,进入对应的详细数据表,然后找到:www_96kaifa_com_enewsuser这个表,双击打开修改&…

SAP SD学习笔记06 - 受注的据否,受注的理由,简易变更(一括处理)

上文讲了一括处理和Block(冻结)处理。 SAP SD学习笔记05 - SD中的一括处理(集中处理),出荷和请求的冻结(替代实现承认功能)-CSDN博客 本章继续讲SAP的流程中一些常用的操作。 1,受注…

【算法】分治-快排

个人主页 : zxctscl 如有转载请先通知 题目 前言1. 75. 颜色分类1.1 分析1.2 代码 2. 912. 排序数组2.1 分析2.2 代码 3. 215. 数组中的第K个最大元素3.1 分析3.2 代码 4. LCR 159. 库存管理 III4.1 分析4.2 代码 前言 分治就是分而治之 1. 75. 颜色分类 1.1 分析…