车机系统与 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_serviceclass coreuser rootgroup rootcriticalon bootstart vms
  • 这是一个Binder服务,并提供了C++和Java的Binder接口用来供其他模块使用;

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

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

相关文章

亚马逊云科技CTO带你学习云计算降本增效秘诀

2023亚马逊云科技一年一度的重磅春晚--Re:invent上有诸多不同话题的主题Keynote,这次小李哥带大家复盘来自亚马逊CTO: Wener博士的主题演讲: 云架构节俭之道1️⃣节俭对于云计算为什么重要? ▶️企业基础设施投入大,利用好降本策略可以减少巨…

个人笔记目录

目录 一、lora 微调 alpaca 笔记 二、全量微调 Llama2-7b笔记 三、Huggingface trainer 与 from_pretrained简单介绍(笔记) 四、vscode调试launch.json常用格式 五、huggingface generate函数简介 六、Trl: llama2-7b-hf使用QLora 4bit量化后ds zer…

Java项目-源码!大学生兼职信息系统

大学生兼职信息系统 1、功能介绍1.1、演示视频 2、系统部分功能展示2.1、管理员登录2.2、管理员功能模块2.2.1、轮播图管理2.2.2、招聘信息管理2.2.3、企业信息管理 3、系统概述4、开发环境 1、功能介绍 本文以Java为开发技术,实现了一个大学生兼职信息系统。 功能…

RestTemplate详解

一、概述 文章参考Spring之RestTemplate详解 1.1介绍 现如今的 IT 项目,由服务端向外发起网络请求的场景,基本上处处可见! 传统情况下,在服务端代码里访问 http 服务时,一般会使用 JDK 的 HttpURLConnection 或者 A…

kali工具----网络映射器(Network Mapper)系统指纹

系统指纹识别 现在一些便携式计算机操作系统使用指纹识别来验证密码进行登录。指纹识别是识别系统的一个典型模式,包括指纹图像获取、处理、特征提取和对等模块。如果要做渗透测试,需要了解要渗透测试的操作系统的类型才可以。本节将介绍使用Nmap工具测试…

【OTA】STM32-OTA升级——持续更新

【OTA】STM32-OTA升级——持续更新 文章目录 前言一、ymodem串口协议1、Ymodem 协议2、PC3、蓝牙4、WIFI云平台 二、UDS车载协议1.UDS协议 总结 前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、ymodem串口协议 1、Ymodem 协议 STM32 Ymodem …

【第三十篇】并发插件 turbo intruder 安装及使用教程

文章目录 安装使用本篇主要介绍turbo intruder的两种安装方式及使用教程。 安装 1、在BurpSuite的扩展模块的BAPP商店中找到turbo intruder,点击安装即可使用: 2、若在BurpSuite中无法直接安装,可手动添加该插件。 具体操作: 进入Github中安装: https://github.com/Po…

代码随想录算法训练营三刷day53 | 动态规划之子序列 1143.最长公共子序列 1035.不相交的线 53. 最大子序和

day53 1143.最长公共子序列1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组 1035.不相交的线53. 最大子序和1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如…

FireProx:一款功能强大的AWS API网关管理与IP地址轮换代理工具

关于FireProx FireProx是一款功能强大的AWS API网关安全管理工具,该工具可以帮助广大研究人员创建实现唯一IP地址轮换的实时HTTP转发代理。 在发送网络请求或进行网络交互时,实现源IP地址轮换是一个非常复杂的过程,虽然社区中也有相关的工具…

【STL详解 —— stack和queue的介绍及使用】

STL详解 —— stack和queue的介绍及使用 stackstack的定义方式stack的使用 queuequeue的定义方式queue的使用 stack stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其只能从容器的一端进行元素的插入与提取操作。 stack的定义方式 首…

前端三剑客 —— JavaScript (第六节)

目录 内容回顾 BOM编程 DOM编程* document对象 document对象的属性 document对象的方法 DOM对象节点 操作DOM对象内容 操作DOM对象的属性 --- DOM对象.属性名称 --- DOM对象[属性名称] --- 调用系统API (Application Program interface)&#…

Linux登录访问限制

Linux系统下,用户密码的有效期可以通过编辑/etc/login.defs文件控制;密码复杂度规则设定需要通过/etc/pam.d/system-auth文件控制;登录失败次数限制通常由/etc/pam.d/login文件限制,可使用pam_tally2模块进行设置。 Linux系统下的…

爬虫 | 网易新闻热点数据的获取与保存

Hi,大家好,我是半亩花海。本项目是一个简单的网络爬虫,用于从网易新闻的热点新闻列表中提取标题和对应的链接,并将提取到的数据保存到一个 CSV 文件中。 目录 一、技术栈 二、功能说明 三、注意事项 四、代码解析 1. 导入所需…

Playwright安装和基本使用(ui/web自动化)

1.简介 Playwright是2021年微软开源的一个项目「playwright-python」。针对 Python 语言的纯自动化工具,它可以通过单个API自动执行 Chromium,Firefox 和 WebKit 浏览器,同时支持以无头模式、有头模式运行。 Playwright(Git&…

springboot汽车企业公司网站的系统设计ssm-java

框架:SSM/springboot都有 jdk版本:1.8 及以上 ide工具:IDEA 或者eclipse 数据库: mysql 编程语言: java 前端:layuibootstrapjsp 详细技术:HTMLCSSJSjspspringmvcmybatisMYSQLMAVENtomcat 开发工具 IntelliJ IDEA: 一…

【学习】软件测试人员使用Loadrunner进行性能测试的优势

在软件测试领域,性能测试是一项至关重要的环节,它关乎到软件系统的稳定性和用户体验。而在这其中,Loadrunner作为一款久经考验的性能测试工具,凭借其独特的优势,成为了众多企业和开发者眼中的“得力助手”。 首先&…

1036: 寻找整数序列的主元素

解法&#xff1a; #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() {int n;cin >> n;vector<int> arr(n);vector<int> tong(1000);for (auto& x : arr) {cin >> x;tong[x];}int pma…

Guava里一些比较常用的工具

随着java版本的更新提供了越来越多的语法和工具来简化日常开发&#xff0c;但是我们一般用的比较早的版本所以体验不到。这时就用到了guava这个包。guava提供了很多方便的工具方法&#xff0c;solar框架就依赖了guava的16.0.1版本&#xff0c;这里稍微介绍下。 一、集合工具类…

vue3 uniapp微信登录

根据最新的微信小程序官方的规定&#xff0c;uniapp中的uni.getUserInfo方法不再返回用户头像和昵称、以及手机号 首先&#xff0c;需获取appID&#xff0c;appSecret&#xff0c;如下图 先调用uni.getUserInfo方法获取code&#xff0c;然后调用后台的api&#xff0c;传入code&…

大模型项目整体规划、技术选型和案例分析经验分享

1 项目整体规划 1.1 明确场景 toB or toC&#xff08;面向企业还是面向消费者&#xff09; toB&#xff08;面向企业&#xff09;&#xff1a;指的是产品或服务主要面向其他企业或组织。这类产品通常需要解决特定的商业问题&#xff0c;强调效率和集成性&#xff0c;并且可能需…