CarService的构成和初始化分析

news2024/11/17 16:19:35

以下分析,基于安卓13的AAOS。

代码构成

packages/services/Car CarService相关代码,主要是在这个目录下

frameworks/opt/car/services 主要是carservice启动相关。

其它目录:audio_policy_configuration.xml和car_audio_configuration.xml;property相关的types.hal。

相关产物

packages/services/Car/service-builtin的产物为/system/priv-app/CarService/CarService.apk

packages/services/Car/service的产物为/system/priv-app/CarServiceUpdatableNonModule/CarServiceUpdatableNonModule.apk

packages/services/Car/car-lib编译完成后,打印的日志显示产物为out/target/product/qssi/system/framework/android.car.jar。同事反馈,在其中修改代码后,编译并将android.car.jar文件push进系统即可。但我实测在CarPropertyManager.java中添加日志,编译并push后并未生效,甚至将out/target/product/qssi/system/framework/中所有产物push进去也无效。目前修改car-lib后,还是采用整体编译的方式进行验证。注意这个jar包是不能给APP使用的,其在Android Studio中看到内容如下图

修改接口文件后,一般要提供给APP的jar包/out/soong/.intermediates/packages/services/Car/car-lib/android.car/android_common/javac/android.car.jar

这个jar包可以用来import android.car.Car;在Android Studio中看到内容如下图

启动流程

SystemServer 会在启动系统服务的过程中依据 FEATURE_AUTOMOTIVE 的特性决定是否启动 AAOS 的系统服务 CarServiceHelperService。后续流程见下图。

上图中已经画出关键的调用链,就不再赘述。以下只说明其中个别重点步骤。

CarServiceHelperServiceUpdatableImpl的onStart中通过bindService() 绑定 action 为 “android.car.ICar”、package 为 “com.android.car” 的 Service,即 CarService 组件(可以在Car\service-builtin\AndroidManifest.xml中看到“.CarService”的intent-filter为android.car.ICar)。

CarService 的实现都在父类 ServiceProxy 中,比如首先被调用的 onCreate()。

ServiceProxy在Car/service-builtin目录。它通过java的反射,调用Car/service的CarServiceImpl。通过adb shell pm list packages -f命令可以看到,CarService.apk(com.android.car)和CarServiceUpdatableNonModule.apk(com.android.car.updatable)都被系统安装了。但ps -A可以看到,只有com.android.car的进程。

CarServiceImpl的init()中会启动所有服务。上图中只画出CarPropertyService举例,实际上此时启动的还有CarAudioService,CarInputService,CarPowerManagementService等所有服务。

附上上面CarService启动流程图的plantuml代码

@startuml
'https://plantuml.com/sequence-diagram

autonumber

SystemServer -> CarServiceHelperService: mSystemServiceManager.startService
CarServiceHelperService -> CarServiceHelperServiceUpdatable: onStart
CarServiceHelperServiceUpdatable -> CarServiceHelperServiceUpdatableImpl: onStart
'绑定服务,进入carservice进程
CarServiceHelperServiceUpdatableImpl -> CarService : bindService
CarService -> ServiceProxy : onCreate
ServiceProxy -> ServiceProxy : init
'通过java的反射,调用CarServiceImpl
ServiceProxy -> CarServiceImpl : onCreate
CarServiceImpl -> ICarImpl : init
'ICarImpl中启动所有子服务,例如CarPropertyService
ICarImpl -> CarPropertyService : init

@enduml

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

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

相关文章

<Rust><iced>基于rust使用iced构建GUI实例:如何将svg格式转为ico格式图片?

前言 本专栏是Rust实例应用。 环境配置 平台:windows 软件:vscode 语言:rust 库:iced、iced_aw 概述 本文是专栏第4篇实例,依旧是一个图像格式转换程序,基于rust的svg库resvg、图像处理库image以及文件处理库rfd。 流程是先用resvg获取svg图片的数据并将其转为png数据…

llama-factory微调chatglm3

一、定义 案例/多卡 二、实现 案例 1. 下载chatglm3-6b-32k模型 2. 配置数据集微调指令 CUDA_VISIBLE_DEVICES0,1 llamafactory-cli train \--stage sft \--do_train True \--model_name_or_path /home/chatglm3-6b-32k \--finetuning_type lora \--template chatglm3 \--d…

零基础入门学用Arduino 第四部分(三)

重要的内容写在前面: 该系列是以up主太极创客的零基础入门学用Arduino教程为基础制作的学习笔记。个人把这个教程学完之后,整体感觉是很好的,如果有条件的可以先学习一些相关课程,学起来会更加轻松,相关课程有数字电路…

nodejs爬取小红书图片

昨天的文章已经描述了可以抓取评论区内容, 抓取图片内容和抓取评论区的内容基本一致 我们可以看到接口信息中含有图片链接,我们要做的就是爬取图片链接然后下载 这边要用到的模块为const downloadrequire(download) 将爬到的图片链接存放到images数组…

STM8单片机的GPIO口介绍

本篇文章依托于stm8单片机和lora模块 目录 一、GPIO口测试相关硬件电路图 (a)USB转串口底板PA3控制LED6 (b)Lora模块底板PA3接口 (c)LED灯电路 二、参考官方例程实现GPIO口的输出 三、GPIO相关函数的了解 (1&a…

docker安装使用

文章目录 docker产生的原因传统虚拟机容器化技术 docker组成安装docker镜像加速docker安装过程中遇到的问题以及解决办法Errors during downloading metadata for repository root_:Failed to set locale, defaulting to C.UTF-8 docker产生的原因 传统虚拟机 在不使用docker…

从“野人饭”走红,探索品牌户外化营销趋势丨小红书内容分析

wildeat,户外是人的天性的回归 近来,“wildeat(户外野吃)”的风潮在小红书逐渐兴起。越来越多的人选择到户外吃一顿,做一次“野人”,主打一个只要氛围到了,就地开饭,不愁吃什么&…

AI智能写作工具, 免费在线智能创作内容网站

对于需要创作内容的同学,选择一款适合自己的AI写作工具可以极大的提高创作效率。下面小编就来和大家分享几款可以生成高质量原创内容的AI写作工具。 1. Kimi智能助手 Kimi智能助手是一款集成了先进算法的AI工具,它能够理解复杂的语言模式,生…

如何用Vue3和ApexCharts打造引人注目的3D径向条形图

本文由ScriptEcho平台提供技术支持 项目地址:传送门 使用 ApexCharts 构建美观的 Vue.js 径向条形图 应用场景 径向条形图是一种用于可视化单一数据点及其与目标或理想值的关系的图表类型。它在显示进度、完成率或其他类似度量时非常有用。 基本功能 这段代码…

划分子网和构造超网的学习

子网掩码长度=32位 某位=1:IP地址中的对应位为网络号和子网号 某位=0:IP地址中的对应位为主机号 从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。 使用子网掩码(subnet mask)可…

EasyCVR/EasyDSS无人机直播技术助力野生动物监测

近日有新闻报道,一名挖掘机师傅在清理河道时,意外挖出一只稀有的扬子鳄,挖机师傅小心翼翼地将其放在一边,扬子鳄也顺势游回一旁的河道中。 随着人类对自然环境的不断探索和开发,野生动物及其栖息地的保护显得愈发重要。…

AI产品组件——TTS产品

语音合成TTS 序列猴子TTS,每个发音人付费标准不同,通过序列猴子开放平台使用。 微软TTS,采用信用卡后付费模式。Speech Studio,付费模式采用统一付费的形式,音效有一款女声效果逼真。 女声:晓晓&#xff…

三天带你快速入门Transformer,真的太牛了

前言 听说Transformer很火?但感觉它好复杂?别担心,三天时间,你也可以轻松入门Transformer! 第一天,我们先来了解Transformer的“骨架”。简单来说,它就像是一个双层机器,上面一层…

mysql5.7windows安装修改密码

mysql5.7windows安装修改密码 1.首先下载Windows 64位安装包2.安装服务3.my.ini4.初始化4.做成Windows服务5.重置密码 1.首先下载Windows 64位安装包 2.安装服务 双击运行安装服务,一直next; 在Choose Setup Type界面中 选择Custom选项,意思…

万界星空科技QMS质量管理介绍

产品的生产质量是企业发展之根本,对所有企业来说,建立完善质量控制体系,对企业生产经营以及发展竞争具有至关重要的影响,可以说是企业质量保证的防火墙。QMS质量管理系统对任何一家企业都具有重要意义,可帮助企业提高生…

nextjs(持续学习中)

return ( <p className{${lusitana.className} text-xl text-gray-800 md:text-3xl md:leading-normal}> Welcome to Acme. This is the example for the{’ } Next.js Learn Course , brought to you by Vercel. ); } 在顶级 /public 文件夹下提供静态资产 **默认 /…

Linux磁盘格式化与重新分区

1.df -BG查看磁盘挂载情况 2.fdisk -l查看磁盘详细信息 3.sudo mkfs.ext4 /path 格式化磁盘 4.挂载格式化后磁盘 挂载成功

《化工设计通讯》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《化工设计通讯》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊 问&#xff1a;《化工设计通讯》级别&#xff1f; 答&#xff1a;省级。主办单位&#xff1a;湖南化工设计院有限公司 主管单位&#xff1…

jeecg spring数据源用户名和密码加密 避免明文安全漏洞

1.目的 由于系统部署在互联网&#xff0c;配置文件中的数据库账号密码使用明文&#xff0c;存在安全隐患&#xff0c;做等保测试时要求对其加密。 2.实现方法 Jeecg框架本身有PasswordUtil可以使用PBEWITHMD5andDES进行加密&#xff0c;这里为方便改造&#xff0c;且安全性较…

andrio复习

第2章 Android常见界面布局 View View与ViewGroup View&#xff1a;按钮&#xff08;Button&#xff09;、文本框&#xff08;TextView&#xff09;和图像视图&#xff08;ImageView&#xff09;等 ViewGroup&#xff1a;LinearLayout、RelativeLayout、FrameLayout等都是Vi…