AndroidAutomotive模块介绍(一)整体介绍

前言

Android Automotive 是一个基本 Android 平台,可运行 IVI 系统中预安装的 Android 应用以及可选的第二方和第三方 Android 应用。

本系列文档将会系统的介绍 Android Automotive 的功能、架构、逻辑等。模块逻辑将从 应用api接口、系统服务、底层服务,各层展开介绍。本篇文档将从整体的角度描述 Android Automotive,例如,定义、功能、架构等,后续将从各层展开详细描述。
下一篇:AndroidAutomotive模块介绍(二)应用及接口介绍

正文

1、介绍

1.1 定义

什么是 Android Automotive?

Android Automotive 是一个基本 Android 平台,可运行 IVI (In-Vehicle Infotainment)系统中预安装的 Android 应用以及可选的第二方和第三方 Android 应用。

Android Automotive 可为车载信息娱乐系统和车机提供开放性、自定义和规模化特性。开放性在免费的开源代码库中提供基本的车载信息娱乐功能,可进一步提升效率。借助自定义特性,实现人员能够在适当的情况下实现商品的差异化。规模化特性是通过 Android 的通用框架、语言和 API 来实现的,所有这些都使得全球数十万 Android 开发者的开发专长和成品软件得以重复使用。

1.2 发展

1.2.1 Android O 版本特性

Google 在 Android O 版本上新增了 Treble 化,对 Android 系统的框架进行了一次较大的改变,打算彻底解决 Android 系统碎片化的问题,让制造商以更低的成本、更轻松、更快速的将设备升级到新版的 Android 系统,Google 称这个架构为 Treble 架构。Android O 版本之前的系统架构中,Android Framework 与 Android Hal 是打包成一个 system.img 的,Framework 与 Hal 之间是紧耦合的,通过链接对应的硬件 so 库的方式建立功能交互,所以 Android Framework 的升级的同时也需要对 Android Hal 进行升级。

Android O 版本之前通信架构:
在这里插入图片描述

Android O 之后的版本,Android 更新了系统框架设计,成为 Treble 架构,架构将 Hal 层与 Framework 层分离,将 Android 系统层服务打包到 system.img 中,Android Hal 打包到 vendor.img 中。引入了 HIDL 的接口语言来处理 Framework 与 Hal 之间的通信。

Android O 版本之后的通信架构:
在这里插入图片描述

1.2.2 Android Automotive 发展

Android O 版本中推出了 Treble 架构的同时又推出了 Android Automotive 功能,该功能是专门为车载而设计的一个功能模块。同时也表示 Google 正式进军汽车车载领域。

Android Automotive 就是 Android 平台,在 Android 强大的功能基础上扩展了 Android 在车载上的功能,增加了对汽车特定要求、功能和技术的支持,成为一个一站式全栈车载信息娱乐平台。

Google 在多年前已经布局车载领域,2014 年推出了 Android Auto,专门为驾驶环境而设计的一个 APP。功能是将手机端的应用投屏到车机上,在有线或者无线连接的基础上,将手机端的应用、信息、界面显示到车机屏幕上,扩展车机的功能使用。

基于手机端的 Android Auto 方案,Google 将适合车载的功能集成在车载 Android 系统,推出了 Android Automotive,这样解决了需要有线或者无线连接的通信介质,这样开发的重点就在车机端,可以和车身信号进行交互,做到车机与各 ECU 件之间功能的完美融合,但是对于应用来说,车机端的应用还是依赖各厂商的定制,提供的原生应用比较少。

2、架构

2.1 原生架构图

这里引用一张原生的架构图,来看下 Android Automotive 架构:
在这里插入图片描述

从上面的原生架构图中,我们可以发现,Google 把 Android Automotive 分为 System Apps、Android Framewrok API、Android System Servies、Vehicle Hal 四层功能。

  • System Apps:车载上层的应用软件,主要用于实现人机交互功能,包括空调显示、车辆健康、泊车辅助等。
  • Android Framework API:提供给上层应用的车辆 API 接口。
  • Android System Services:系统中与车相关的服务,可以统称为 CarService,由很多个子 Service 组成,包括 CarHavcService、CarSensorService 等。
  • Vehicle Hal:用于定义 OEM 可以实现的车辆属性的接口。Android Automotive 的硬件抽象层 (HAL) 为 Android 框架提供了一致的接口。系统集成商可以将特定于功能的平台 HAL 接口(如 HVAC)与特定于技术的网络接口(如 CAN 总线)连接,以实现车载 HAL 模块。典型的实现可能包括运行专有实时操作系统 (RTOS) 的专用微控制器单元 (MCU),该微控制器单元用于 CAN 总线访问或类似操作,可通过串行链路连接到运行 Android Automotive 的 CPU。除了专用 MCU,还可以将总线访问作为虚拟 CPU 来实现。只要实现符合车载 HAL 的接口要求,每个合作伙伴都可以选择适合硬件的架构。

2.2 架构图

那么将原生架构图扩展开来,整体架构图如下所示:
在这里插入图片描述

上图中是 Android Automotive 的架构图,上层的 CarServiceApp 通过 CarServiceApi 接口调用到 Framework 服务中,中间通过 Aidl 通信方式交互。Framework CarService 服务通过 android.hardware.automotive.vehicle 库 Hidl 方式与 Vehicle Hal 层交互。Vehicle Hal 层下是与 OEM 厂商建立交互逻辑,实现方式多样。
在这里插入图片描述

上图在架构上对于 Car API 与 Car Service 展开子模块描述,Android Automotive 中 APP、Service 包含许多子模块,后续将会展开描述

2.3 架构简要描述

2.3.1 Car Service App

Car Service App 代码路径为:/android/packages/apps/Car。

路径下包含许多应用,Android Automotive 为系统定制了一些专门适用车载系统的应用,以代替传统的手机应用模块。
在这里插入图片描述

2.3.2 Car Service Api

Car Service Api 代码路径为:/android/packages/services/Car/car-lib。

系统应用或者 OEM 三方应用通过 Car Service Api 调用 Car Service 功能。
在这里插入图片描述

2.3.3 Car Service

Car Service 代码路径为:/android/packages/services/Car。

系统框架层提供了多个模块,来对 Android Automotive 进行支持,最重要的有一个服务CarService (com.android.car)。

CarService 是一个类似 Android 系统中 SystemSever 的服务。它由一个服务启动,而里面又控制着数十个子模块服务。CarService 中 CarService 只作为服务的入口,具体的业务逻辑都在内部的子服务中处理。
在这里插入图片描述
在这里插入图片描述

2.3.4 Vehicle Hal

Vehicle Hal 代码路径为:/android/hardware/interfaces/automotive。

VehicleService是一个native服务,代码实现在目录 /android/hardware/interfaces/automotive/vehicle/2.0/default。

硬件抽象层主要是提供了一个native服务android.hardware.automotive.vehicle@2.0-service,负责处理车辆相关的业务。

3、总结

本篇文档中主要从整体的角度分析 Android Automotive,包括系统架构以及架构各层之间的交互,简要描述架构各层的功能及代码路径。后续将会对于各层功能展开描述。

下一篇:AndroidAutomotive模块介绍(二)应用及接口介绍

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

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

相关文章

2024.4.12每日一题

今天上午参加了蓝桥杯,只会暴力,还需努力学习 LeetCode 找到冠军 || 题目链接:2924. 找到冠军 II - 力扣(LeetCode) 题目描述 一场比赛中共有 n 支队伍,按从 0 到 n - 1 编号。每支队伍也是 有向无环图…

泰坦尼克号幸存者预测

泰坦尼克号幸存者预测 1、特征工程概述2、数据预处理3、特征选择与提取4、建模与预测 1、特征工程概述 在上篇 泰坦尼克号幸存者数据分析 中,我们对泰坦尼克号的幸存者做了数据分析,通过性别、年龄、船舱等级等不同维度对幸存者进行了分类统计&#xff0…

Traefik的前世今生

Traefik 是一款现代的反向代理和负载均衡器,它的设计专门针对微服务架构和容器技术,如 Docker 🐳 和 Kubernetes 🎯。自从其首次发布以来,Traefik 已经迅速成为云原生生态系统中不可或缺的一部分。在这篇文章中&#x…

上位机图像处理和嵌入式模块部署(qmacvisual缺失的颜色检测)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在图像处理当中,对颜色的处理是非常重要的。当然,这要建立在拍摄图片是彩色图片的基础之上。工业上面,虽然是黑…

第三次作业

创建了一个教务管理系统的登录页面,其中包含左侧的图片以及右侧的表单容器,当鼠标悬停在表单容器上时,会稍微变大,并且图片容器会相应的缩小,是通过css的transition以及fiex属性实现。 表单容器包含用户名和密码的输入…

基于linux进一步理解核间通讯

芯片架构分为同构和异构: 如下图TC397: 如下图TDA4: 如下图STM32MP157: 非对称多处理结构(AMP): AMP 结构是指每个内核运行自己的 OS 或同一 OS 的独立实例&#

番茄 abogus rpc调用

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wx a15018601872 本文章…

生产者和消费者模型 | 阻塞队列 | 信号量 | 环形队列

文章目录 1.生产者和消费者模型2.生产者和消费者模型优点3.阻塞队列4.POSIX信号量5.基于环形队列的生产消费模型 本文完整的代码放在了这: Gitee链接 1.生产者和消费者模型 生产者和消费者模型,概括起来其实是一个321原则:3是:三…

如何恢复未保存或删除/丢失的Word文件?

关闭 Word 应用程序而不保存文档?误删Word文档?许多用户会在不同的情况下丢失Word文档。如果不幸遇到此类问题,如何恢复已删除或未保存的 Word 文档?有一些方法可以恢复未保存/删除的文档。此外,您还可以使用Word文件恢…

前端 接口返回来的照片太大 加载慢如何解决

现象 解决 1. 添加图片懒加载 背景图懒加载 对背景图懒加载做的解释 和图片懒加载不同&#xff0c;背景图懒加载需要使用 v-lazy:background-image&#xff0c;值设置为背景图片的地址&#xff0c;需要注意的是必须声明容器高度。 <div v-for"img in imageList&quo…

【论文笔记】PointMamba: A Simple State Space Model for Point Cloud Analysis

原文链接&#xff1a;https://arxiv.org/abs/2402.10739 1. 引言 基于Transformer的点云分析方法有二次时空复杂度&#xff0c;一些方法通过限制感受野降低计算。这引出了一个问题&#xff1a;如何设计方法实现线性复杂度并有全局感受野。 状态空间模型&#xff08;SSM&…

微服务-2 Eureka

Eureka 启动页面&#xff1a; 同理再注册完order-service后&#xff0c;刷新启动页面&#xff1a; userservice 启动多台服务&#xff1a; [ 代码 ]&#xff1a;orderService.java&#xff08;用 RestTemplate 调其他服务&#xff0c;用 userservice 代替 localhost:8081&…

二叉树——存储结构

二叉树的存储结构 二叉树一般可以使用两种结构存储&#xff0c;一种是顺序结构&#xff0c;另一种是链式结构。 一、顺序存储 二叉树的顺序存储是指用一组连续的存储单元依次自上而下、自左至右存储完全二叉树上的结点元素&#xff0c;即将完全二叉树上编号为i的结点元素存储…

LeetCode 142.环形链表II(数学公式推导)

给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整…

python图书馆图书借阅系统含网上商城管理系统7d538

&#xff0c;python语言&#xff0c;django框架进行开发&#xff0c;后台使用MySQL数据库进行信息管理&#xff0c;设计开发的图书管理系统。通过调研和分析&#xff0c;系统拥有管理员和用户两个角色&#xff0c;主要具备注册登录、个人信息修改、用户、图书分类、图书信息、借…

多模块项目使用springboot框架进行业务处理

项目目录 1、在Result定义返回结果 package com.edu.result;import lombok.Data;import java.io.Serializable;/*** 后端统一返回结果* param <T>*/ Data public class Result<T> implements Serializable {private Integer code; //编码&#xff1a;1成功&#xf…

【U8+】用友固定资产卡片拆分提示:未设置对象变量或With block变量。

【问题描述】 用友U8软件中&#xff0c; 操作固定资产模块&#xff0c;针对所有资产进行卡片拆分的时候&#xff0c; 提示&#xff1a;未设置对象变量或With block变量。 确定后仍然能打开卡片拆分界面&#xff0c;但是界面显示异常看不到拆分明细信息&#xff0c;并且保存后拆…

LeetCode-Java:303、304区域检索(前缀和)

文章目录 题目303、区域和检索&#xff08;数组不可变&#xff09;304、二维区域和检索&#xff08;矩阵不可变&#xff09; 解①303&#xff0c;一维前缀和②304&#xff0c;二维前缀和 算法前缀和一维前缀和二维前缀和 题目 303、区域和检索&#xff08;数组不可变&#xff…

一些 VLP 下游任务的相关探索

一、Image-Text Retrieval (ITR , 图像文本检索) 任务目的&#xff1a; 检索与给定文本最匹配的图像&#xff0c;或者给定图像最匹配的文本。 跨模态图像-文本检索&#xff08;ITR&#xff09;是根据用户给定的一种模态中的表达&#xff0c;从另一模态中检索出相关样本&#x…

工厂方法模式:解锁灵活的对象创建策略

在软件设计中&#xff0c;工厂方法模式是一种非常实用的创建型设计模式&#xff0c;它不仅提升了系统的灵活性&#xff0c;还简化了对象的创建过程。本文将详细探讨工厂方法模式的核心概念、实现方式、应用场景以及与其他设计模式的对比&#xff0c;旨在提供一份全面且实用的指…