Android AutoMotive --CarService
1、AAOS概述
Android AutoMotive OS是谷歌针对车机使用场景打造的操作系统,它是基于现有Android系统的基础上增加了新特性,最主要的就是增加了CarService(汽车服务)模块。我们很容易把Android AutoMotive和Android Auto搞混,前者是基于源代码的扩展,是系统级的,编译后运行在车上的系统;而后者是谷歌推出的一款将手机内容投射到兼容的车机屏幕上的产品,主要的运算任务是在手机端,就类似于苹果的Carplay一样。
说回AAOS,其中的CarService是以独立APK的方式存在,使用system UID权限运行。总体关系如下:

2、CarService服务和API
Carservice内部包括了很多子服务,较为核心和常用的服务有:
| 服务名称 | 业务内容 |
|---|---|
| CarPropertyService | 汽车属性服务 |
| CarAudioService | 汽车音频服务 |
| CarPowerManagerService | 汽车电源管理服务 |
| CarPackageMangerService | 汽车包管理服务 |
| CarDrivingStateService | 汽车行驶状态服务 |
| CarUxRestrictionsManagerService | 汽车限制规则服务,针对行车中视频的限制等 |
| CarInputService | 汽车输入服务,针对车上的硬按键 |
当然,对于应用来说,是通过Car API的方式去调用以上的服务,这是典型的Android Binder通信机制的使用。API中以各种Manager的方式对外提供,主要包括:
| API名称 | 业务内容 |
|---|---|
| CarPropertyManager | 汽车属性管理API |
| CarInfoManager | 汽车信息管理API |
| CarSensorManager | 传感器管理API |
| CarHvacManager | 空调控制API |
| CarCabinManager | 座舱控制API |
| CarVendorExtentionManger | 外设管理API |
| CarAudioManager | 车辆音频管理API |
| CarPowerManager | 车辆电源管理API |
| CarPackageManager | 车辆包管理API |
其中的CarInfoManager、CarSensorManager、CarHvacManager、CarCabinManager、CarVendorExtentionManger以及CarPropertyManager在服务端都是对应的CarPropertyService。但是在Android11中,CarInfoManager、CarSensorManager、CarHvacManager、CarCabinManager、等细分的Manager已经被标记为了过时的状态,谷歌还是建议大家直接使用CarPropertyManager去操作各个车辆的属性,这样能够更好地适应变化。
3、Car API的使用方式
应用使用Car API链接CarService对应的服务端,有两种方式,一种是传统的异步方式,一种是简化的同步方式。
3.1 异步方式:
首先通过Car.createCar创建Car对象:
Car mCar = Car.createCar(mContext, mServiceConnection);
并且还要主动调用Car的connect方法发起连接流程:
mCar.connect();
在连接上CarService之后,mServiceConnection会做回调:
private final ServiceConnection mServiceConnection = new ServiceConnection( ) {@Overridepublic void onServiceConnected(CompenentName name, IBinder service) {try {mCarInfoManager =(CarInfoManager) mCar.getCarManager(Car.INFO_SERVICE);} catch(CarNotConnectedException e) {LOG.e(“”,e);}}
}@OverridePublic void onServiceDeisconnected(ComponentName name) {}
}
这里是用CarInfoManager做例子,其他的Manager也同样是这样的方式获取。
3.2 同步的方式:
这种方式,应用不必在连接并接收到回调之后才能使用Car API,可以直接同步获取,如下:
mCar = Car.createCar(this);
mCarInfoManager = (CarInfoManager) mCar.getCarManager(Car.INFO_SERVICE);
4、 CarService启动流程
CarService的启动流程流程和其他系统服务的类似,都是在开机的时候由SystemServer启动,不同的是CarService是运行在单独的进程,并且中间会有一个CarServiceHelperService做一个桥接,把位于单独仓库中的Carservice黏合进来,流程图如下:

CarService,在最新的Android14版本中,所有的工作已经交给CarServiceImpl完成。
在CarServiceImpl的onCreate方法中,会获取到HAL层的Vehicle的客户端对象,然后实例化ICarImpl,而在ICarImpl里面又会去初始化具体的各个服务,比如:
//packages/services/Car/service/src/com/android/car/ICarImpl.java
private ICarImpl(Builder builder) {
mCarPowerManagementService = constructWithTrace(t, CarPowerManagementService.class,() -> new CarPowerManagementService.Builder().setContext(mContext).setPowerHalService(mHal.getPowerHal()).setSystemInterface(mSystemInterface).setCarUserService(mCarUserService).setPowerPolicyDaemon(builder.mPowerPolicyDaemon).setFeatureFlags(mFeatureFlags).build(),allServices);mCarPropertyService = constructWithTrace(t, CarPropertyService.class,() -> new CarPropertyService.Builder().setContext(mContext).setPropertyHalService(mHal.getPropertyHal()).build(), allServices);
}
当客户端通过Car去获取对应Manager时,就会返回对应的服务:
// packages/services/Car/car-lib/src/android/car/Car.java
public Object getCarManager(String serviceName) {IBinder binder = mService.getCarService(serviceName);
}
服务端对应:
//packages/services/Car/service/src/com/android/car/ICarImpl.java
public IBinder getCarService(String serviceName) {switch (serviceName) {case Car.AUDIO_SERVICE:return mCarAudioService;case Car.APP_FOCUS_SERVICE:return mAppFocusService;case Car.PACKAGE_SERVICE:return mCarPackageManagerService;case Car.POWER_SERVICE:return mCarPowerManagementService;case Car.CABIN_SERVICE:case Car.HVAC_SERVICE:case Car.INFO_SERVICE:case Car.PROPERTY_SERVICE:case Car.SENSOR_SERVICE:case Car.VENDOR_EXTENSION_SERVICE:return mCarPropertyService;
}
}相关文章:
Android AutoMotive --CarService
1、AAOS概述 Android AutoMotive OS是谷歌针对车机使用场景打造的操作系统,它是基于现有Android系统的基础上增加了新特性,最主要的就是增加了CarService(汽车服务)模块。我们很容易把Android AutoMotive和Android Auto搞混&…...
K8S中Service详解(三)
HeadLiness类型的Service 在某些场景中,开发人员可能不想使用Service提供的负载均衡功能,而希望自己来控制负载均衡策略,针对这种情况,kubernetes提供了HeadLiness Service,这类Service不会分配Cluster IP,…...
C++----STL(vector)
vector的介绍 vector的文档介绍:cplusplus.com/reference/vector/vector/ 1.基本概念 简单来说,vector是表示可以改变大小的数组的顺序容器。使用连续的存储位置来存储元素,因此可以通过常规指针的偏移量来高效访问。 2.内部机制 vector…...
Ubuntu24.04初始化MySQL报错 error while loading shared libraries libaio.so.1
Ubuntu24.04初始化MySQL报错 error while loading shared libraries: libaio.so.1 问题一:libaio1不存在 # 提示libaio1不存在 [rootzabbix-mysql-master.example.com x86_64-linux-gnu]#apt install numactl libaio1 Reading package lists... Done Building depe…...
初探大数据流式处理
文章目录 初探大数据流式处理批式处理系统特点流式处理系统特点大批次计算微批次计算适用场景 流式计算的应用场景流式大数据的特征流式计算的关键技术流式处理框架的特征三大流式数据处理框架 初探大数据流式处理 大数据处理系统主要分为批式处理和流式处理两类。批式处理将大…...
【Linux】Linux入门(三)权限
目录 前提权限概念whoami指令 Linux权限管理文件访问者的分类(人)file指令权限信息权限的表示方法 chmod指令 更改权限chown指令 修改文件,文件夹所属用户和用户组 权限掩码umask(权限掩码) 粘滞位 前提 请先看下面这…...
html,css,js的粒子效果
这段代码实现了一个基于HTML5 Canvas的高级粒子效果,用户可以通过鼠标与粒子进行交互。下面是对代码的详细解析: HTML部分 使用<!DOCTYPE html>声明文档类型。<html>标签内包含了整个网页的内容。<head>部分定义了网页的标题&#x…...
Spring Boot + Netty + WebSocket 实现消息推送
1、关于Netty Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。 2、Maven依赖 <dependencies><!-- https://mvnrepository.com/artifact/io.netty/netty-all --><dependency><gr…...
Python3 【字符串】:方法和函数使用示例手册
Python3 【字符串】:方法和函数使用示例手册 Python 提供了丰富的字符串处理方法和函数,以下是一些常用的方法和函数分类整理,并提供详细使用示例,简单易懂,值得收藏。 1. 字符串大小写转换 str.upper():…...
数据结构与算法整理复习(一):数据结构概念与线性表
目录 第一章:绪论 1.1 数据结构的基本概念 1.2 算法与算法评价 第二章:线性表 2.1 线性表的定义和基本操作 2.2 线性表的顺序表示(顺序表) 应用题 2.3 线性表的链式表达(链表) 2.3.1 单链表 2.3.2…...
【Block总结】PConv风车卷积,更大的感受野,提高特征提取能力|即插即用
论文信息 论文标题:《Pinwheel-shaped Convolution and Scale-based Dynamic Loss for Infrared Small Target Detection》 论文链接:https://arxiv.org/pdf/2412.16986 GitHub链接:https://github.com/JN-Yang/PConv-SDloss-Data 创新点 …...
Python新春烟花
目录 系列文章 写在前面 技术需求 完整代码 下载代码 代码分析 1. 程序初始化与显示设置 2. 烟花类 (Firework) 3. 粒子类 (Particle) 4. 痕迹类 (Trail) 5. 烟花更新与显示 6. 主函数 (fire) 7. 游戏循环 8. 总结 注意事项 写在后面 系列文章 序号直达链接爱…...
VirtualBox can‘t enable the AMD-V extension
个人博客地址:VirtualBox cant enable the AMD-V extension | 一张假钞的真实世界 最近一次完成Deepin的系统更新后,进入VirtualBox创建的虚拟机(Widows10)时,出现以下错误: 根据网址“https://askubuntu.…...
掘金--创意标题匹配问题
问题描述 在广告平台中,为了给广告主一定的自由性和效率,允许广告主在创造标题的时候以通配符的方式进行创意提交。线上服务的时候,会根据用户的搜索词触发的 bidword 对创意中的通配符(通配符是用成对 {} 括起来的字符串&#x…...
OBU和T-Box
OBU(On-Board Unit,车载单元)和T-Box(Telematics Box,远程信息处理控制单元)都是用于车联网和智能交通系统的车载设备,但它们的功能、应用场景和技术特点存在显著差异。以下是两者的详细对比&am…...
【PVE】Proxmox VE8.0+创建LXC容器安装docker
为了不影响PVE宿主机,通常使用套娃的形式安装Docker容器,再安装相关docker应用。首先在CT模板中创建 Linux 容器,推荐使用Debian。开启ssh登录,修改debian配置,安装docker 一、创建 LXC 容器 1、CT模板下载 点击“模…...
一文大白话讲清楚webpack基本使用——11——chunkIds和runtimeChunk
文章目录 一文大白话讲清楚webpack基本使用——11——chunkIds和runtimeChunk1. 建议按文章顺序从头看,一看到底,豁然开朗2. 啥是chunkIds3.怎么使用chunkIds4. 啥是runtimeChunk5. 怎么使用runtimeChunk 一文大白话讲清楚webpack基本使用——11——chun…...
Java 中的设计模式:经典与现代实践
Java 中的设计模式:经典与现代实践 1. 设计模式简介 设计模式是一种软件开发中的思想,它为我们提供了一些经过验证的、能够应对常见问题的解决方案。学习和掌握设计模式能够让开发者在面对复杂的需求时,能够设计出更加灵活、可维护的代码。…...
DRG_DIP 2.0时代医院程序结构转型与数据结构优化研究
一、引言 1.1 DRG_DIP 2.0 改革背景与意义 医保支付方式改革在医疗保障制度改革中占据着极为关键的地位,是推动医疗领域变革的核心力量。它犹如一把精准的手术刀,对医疗资源的合理分配、医疗服务质量的稳步提升以及医疗费用的有效控制起着决定性作用。…...
一部手机如何配置内网电脑同时访问内外网
做过运维的朋友都知道,最麻烦的是运维电脑不能远程,每次都得现场进行维护,明明客户那边有可以访问内网的电脑,怎么操作能将这台电脑能访问跟到外网呢,这样不就能通过远程软件远程了吗?嘿嘿。按以下步骤试试…...
SN74181芯片逻辑图解析:从Cn+1进位信号看加法器设计
SN74181芯片逻辑图解析:从Cn1进位信号看加法器设计 在数字电路设计的经典教材中,SN74181算术逻辑单元(ALU)芯片总是占据着重要位置。这款诞生于上世纪60年代的4位ALU芯片,至今仍是理解计算机算术运算基础的绝佳案例。特别是其进位信号Cn1的生…...
CHORD-X视觉战术指挥系统固件升级方案:远程安全更新边缘设备
CHORD-X视觉战术指挥系统固件升级方案:远程安全更新边缘设备 最近和几个做边缘计算设备的朋友聊天,大家普遍头疼一个问题:设备一旦部署出去,特别是像智能摄像头、单兵终端这类在户外或复杂环境下的设备,后续的固件更新…...
5分钟搞定OpenClaw+Qwen3.5-9B:飞书机器人自动化办公配置
5分钟搞定OpenClawQwen3.5-9B:飞书机器人自动化办公配置 1. 为什么选择OpenClawQwen3.5-9B组合 上周五下午4点,当我第7次手动整理会议纪要时,突然意识到一个问题:为什么不让AI帮我完成这些重复性工作?经过周末两天的…...
CCS12.2搭配C2000ware 4.03导入工程报错?手把手教你修复头文件路径变量(MATLAB 2023b适用)
CCS12.2与C2000ware 4.03工程导入报错全解析:从路径变量修复到MATLAB 2023b联调实战 当你满怀期待地将MATLAB 2023b生成的代码导入CCS12.2,准备与C2000ware 4.03来场完美邂逅时,编译器却毫不留情地抛出一连串头文件找不到的错误——这种从云端…...
罗技PUBG鼠标宏压枪脚本技术解析:后坐力控制算法实现与架构设计
罗技PUBG鼠标宏压枪脚本技术解析:后坐力控制算法实现与架构设计 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在FPS游戏《绝地求生…...
seo综合查询工具和网站分析工具有什么区别_seo综合查询工具如何分析网站关键词排名
SEO综合查询工具和网站分析工具有什么区别 在当今的数字营销环境中,SEO(搜索引擎优化)工具是企业和营销人员提升网站排名的关键。其中,SEO综合查询工具和网站分析工具虽然都在帮助提升网站的搜索引擎排名,但它们之间有…...
关键词SEO服务对网站排名有什么影响_关键词SEO服务与移动端优化有什么关系
SEO服务对网站排名有什么影响 在当前数字化时代,网站排名的重要性不言而喻。无论是企业、个人博客还是新媒体,网站的流量直接关系到业务的发展和品牌的影响力。而在这其中,关键词SEO服务起到了至关重要的作用。关键词SEO服务对网站排名究竟有…...
Java学习——数据类型
目录 一、概述 二、基本数据类型 1、数值型 2、字符型 3、布尔型 三、引用数据类(后期补充) 1、类 2、接口 3、数组 4、枚举 5、注解 四、数据类型转换 1、概述 2、隐式转换(自动类型转换) 3、显式转换(…...
深入Linux 0.11内核:从_syscall1宏到系统调用表的完整链路拆解
深入Linux 0.11内核:从_syscall1宏到系统调用表的完整链路拆解 在操作系统的演进历程中,系统调用机制始终扮演着用户程序与内核服务之间的关键桥梁角色。对于希望真正理解计算机系统底层运作的开发者而言,掌握系统调用的完整实现链路不仅是提…...
深入解析 OpenSTLinux 6.6 Yocto SDK 环境配置与 BSP 源码部署 - STM32MP2 实战(基于STM32CubeMX)
1. OpenSTLinux 6.6 Yocto SDK环境配置全攻略 刚拿到STM32MP2开发板时,最让人头疼的就是搭建开发环境。我花了整整三天时间才把Yocto SDK环境配置明白,今天就把这些实战经验分享给大家,让你少走弯路。 首先需要下载两个关键文件:S…...
