车机系统与Android的关系概述
创作时间:
作者:
@小白创作中心
车机系统与Android的关系概述
引用
CSDN
1.
https://m.blog.csdn.net/weixin_39903708/article/details/137735150
随着智能汽车的普及,车机系统与Android的关系变得越来越重要。本文将为您详细介绍Android Auto、Google Assistant、Android Automotive等概念及其区别,并深入解析Android Automotive的源码和架构。
一、基本概念
1、Android Auto
1)是什么
- Android Auto 是一个专为驾驶环境设计的Android端应用;
- 运行环境:需要在Android 5.0或更高版本的系统,并且需要Google地图和Google Play音乐应用;
2)功能
- Android Auto可以将Android设备上的部分功能映射到汽车屏幕上;
- 满足了很多人在开车时使用手机的需求;
2、Google Assistant
- Google将Google Assistant集成到Android Auto中;
- 交互方式有键盘、触摸、语音等;
- 对于汽车来说,语音无疑是比触摸更好的交互方式;
- 在驾驶环境中,语音交互的优势:
- 用户不改变自身的物理姿势,这种交互方式不影响驾驶员对驾驶的操作;
- 有需要多次触摸的交互时,可能只需要一条语音就可以完成;
- 语音交互不存在入口的层次嵌套,数据更加扁平;
- 优秀的语音系统可以利用对话的上下文完成任务,避免用户重复输入;
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 Automotive的整体架构
- Android Automotive的源码包含在AOSP中;
- Android Automotive是在原先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接口用来供其他模块使用;
热门推荐
头晕想吐喝什么能缓解
大人拉肚子像拉水一样怎么办
德尔菲法(Delphi method)
管理学德尔菲法
如何解决舌苔充血和大便不成形的问题
南京必打卡的历史景区
菠菜怎么才能不涩
菠菜营养这么好,你知道焯水几秒能去除有害的草酸,并保留维C吗
档案补办,这些材料你都准备齐全了吗?
做好的欧包什么时候切
提升产品质量的有效工具:QC小组法解析
如何掌握电热水器的节能技巧并降低使用成本?这种掌握对能源节约有何意义?
4000年的洛阳,为何会得到历史上那么多朝代的钟爱?
欧洲预选H组赛事前瞻:圣马力诺VS罗马尼亚
什么是远期利率?远期利率的计算方法和作用是什么?
早八是什么意思?了解早八的含义和背景
早八是什么意思?了解早八的含义和背景
iPad辅助触控功能使用指南
心力衰竭:从儿童到老人的预防与治疗指南
徐州出租车收费标准详解
消费者维权时的有效证据及其法律意义
对比分析:电子膨胀阀、热力膨胀阀与毛细管
准备吧,进入存款“零利率”时代
手机设置无线路由器:详细步骤图解,轻松操作
古代官府为何选择施粥赈灾?背后蕴含多重考量
如何结识做项目的人员呢
未满十八岁可以考驾照吗
坦克400HI4T 用车一年心得分享
储能电池的充放电调整:能源效率提升的秘诀
商品房相关问题全解析:定义、改造与维权指南