当前位置: 首页 > news >正文

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模块介绍(二)应用及接口介绍

相关文章:

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

前言 Android Automotive 是一个基本 Android 平台,可运行 IVI 系统中预安装的 Android 应用以及可选的第二方和第三方 Android 应用。 本系列文档将会系统的介绍 Android Automotive 的功能、架构、逻辑等。模块逻辑将从 应用api接口、系统服务、底层服务&#x…...

【开发问题记录】Nacos修改服务实例权重时报错

问题记录 一、问题描述1.1 产生原因1.2 产生问题 二、问题解决2.1 docker部署的nacos解决方案2.1.1 进入nacos容器2.1.2 查看当前目录2.1.3 进入data文件夹2.1.4 删除protocol文件2.2 本地部署的nacos 一、问题描述 1.1 产生原因 在运行项目时,在本地启动了一个服务…...

高级IO和5种IO模型

目录 1. 高级IO1.1 IO的基本概念1.2 OS如何得知外设当中有数据可读取1.3 OS如何处理从网卡中读取到的数据包1.4 IO的步骤 2. 五种IO模型2.1 利用钓鱼来理解2.2 阻塞IO2.3 非阻塞IO2.4 信号驱动IO2.5 IO多路转接2.6 异步IO 3. 高级IO的概念3.1 同步通信 VS 异步通信3.2 阻塞 VS …...

OpenHarmony轻量系统开发【7】驱动之I2C显示OLED屏幕

7.1实验效果 Hispark WiFi开发套件又提供一个oled屏幕,但是鸿蒙源码中没有这个屏幕的驱动,我们需要自己去移植。 以下是移植效果: 接口:I2C 使用引脚:HI_IO_NAME_GPIO_13 、 HI_IO_NAME_GPIO_14 7.2代码 这里我直…...

C#:循环中断

任务描述 实现九九乘法表,按照编程要求,使用break跳出循环 测试说明 测试过程: 平台将编译用户补全代码,并根据程序的输出判断程序是否正确。 以下是测试样例: 测试输入: 预期输出: we found…...

34. UE5 RPG实现鼠标点击移动

在前面,我们实现过使用键盘按键wasd去实现控制角色的移动,现在,我们实现了InputAction按键触发,后面,实现一下通过鼠标点击地面实现角色移动。 我们将实现两种效果的切换,如果你点击地面快速松开&#xff0…...

《二》Qt Creator工具介绍与使用

一、关于界面 点击文件--->新建文件或项目会出现如下图: 我们选择第一个 点击下一步下一步: 继续下一步直到结束: 二,具体文件介绍 我们点击pro查看以下 QT core gui第1行 表示使用qt的core和gui库,如果以后…...

20240415金融读报:市场信贷不能过于宽松声音碳领域新增文件

1、市场普遍认为,在经济转型背景下,当前的社会融资规模和信贷增长有助于经济高质量发展,过于宽松并不利于经济发展。(已经有这个声音了,是不是说明我们已经脱离了U型曲线的最低点,在或快接近其后半段的1/2处…...

2024年第十五届蓝桥杯研究生组题目总结(Java、Python、C++)

2024年十五届蓝桥杯研究生组 今年的题较去年难度降低了很多,题量也少了2道。 Q1 劲舞团 读文件,找到最长的满足条件的子数组的长度 答案是:9 BufferedReader,fopen,open Q2 召唤数学精灵 找规律,周期…...

MindOpt APL向量化建模语法的介绍与应用(2)

前言 在数据科学、工程优化和其他科学计算领域中,向量和矩阵的运算是核心组成部分。MAPL作为一种数学规划语言,为这些领域的专业人员提供了强大的工具,通过向量式和矩阵式变量声明以及丰富的内置数学运算支持,大大简化了数学建模…...

深入理解图形处理器(GPU):加速人工智能和大数据计算的引擎

文章目录 1. 什么是GPU?2. GPU的工作原理3. GPU的应用领域4. GPU与CPU的比较参考与推荐 前言: 图形处理器(GPU)不再仅仅是用于图形渲染的硬件设备。如今,GPU已经成为加速人工智能、大数据计算和科学研究的关键引擎。本…...

【Java探索之旅】数组使用 初探JVM内存布局

🎥 屿小夏 : 个人主页 🔥个人专栏 : Java编程秘籍 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一、数组的使用1.1 元素访问1.2 数组遍历 二、JVM的内存布局🌤️全篇总结 …...

RabbitMQ消息模型之Simple消息模型

simple消息模型 生产者 package com.example.demo02.mq.simple;import com.example.demo02.mq.util.ConnectionUtils; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection;import java.io.IOException;/*** author Allen* 4/10/2024 8:07 PM* versi…...

设计模式系列:简单工厂模式

作者持续关注 WPS二次开发专题系列,持续为大家带来更多有价值的WPS二次开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397) 目录 定义 特点 使用场景 优缺点 (1) 优点…...

解决 windows+Ubuntu 时间不同步问题

本文所使用的 Ubuntu 系统版本是 Ubuntu 22.04 ! 如果你的电脑装了 Windows Ubuntu 系统,肯定会遇到时间不同步的问题。那么如何解决呢?参考步骤如下: # 步骤一:进入到 Ubuntu 系统# 步骤二:执行如下三条命令即可 sud…...

Learn SRP 01

学习链接:Custom Render Pipeline (catlikecoding.com) 使用Unity版本:Unity 2022.3.5f1 1.A new Render Pipeline 1.1Project Setup 创建一个默认的3D项目,项目打开后可以到默认的包管理器删掉所有不需要的包,我们只使用Unit…...

NL2SQL进阶系列(4):ConvAI、DIN-SQL、C3-浙大、DAIL-SQL-阿里等16个业界开源应用实践详解[Text2SQL]

NL2SQL进阶系列(4):ConvAI、DIN-SQL等16个业界开源应用实践详解[Text2SQL] NL2SQL基础系列(1):业界顶尖排行榜、权威测评数据集及LLM大模型(Spider vs BIRD)全面对比优劣分析[Text2SQL、Text2DSL] NL2SQL基础系列(2)&#xff1a…...

Python统计分析库之statsmodels使用详解

概要 Python statsmodels是一个强大的统计分析库,提供了丰富的统计模型和数据处理功能,可用于数据分析、预测建模等多个领域。本文将介绍statsmodels库的安装、特性、基本功能、高级功能、实际应用场景等方面。 安装 安装statsmodels库非常简单,可以使用pip命令进行安装:…...

A Learning-Based Approach for IP Geolocation(2010年)

下载地址:Towards IP geolocation using delay and topology measurements | Proceedings of the 6th ACM SIGCOMM conference on Internet measurement 被引次数:185 Eriksson B, Barford P, Sommers J, et al. A learning-based approach for IP geolocation[C]//Passive …...

高创新 | [24年新算法]NRBO-XGBoost回归+交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测

高创新 | [24年新算法]NRBO-XGBoost回归交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测 目录 高创新 | [24年新算法]NRBO-XGBoost回归交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现 [24年新算…...

开源协作平台Polar:一体化设计如何重塑开发者工作流

1. 项目概述:一个面向开发者的开源协作平台最近在和一些独立开发者朋友聊天时,大家普遍提到一个痛点:当你想启动一个开源项目,或者和几个朋友一起搞点小东西时,整个协作流程其实挺割裂的。代码托管在GitHub或GitLab&am…...

AI 术语通俗词典:贝叶斯估计

贝叶斯估计是统计学、机器学习、概率推断和人工智能中非常重要的一个术语。它用来描述一种在已有认识的基础上,根据新数据更新参数判断的方法。换句话说,贝叶斯估计是在回答:我们原来对参数有一个初步判断,现在看到了一批数据&…...

魔兽争霸3优化指南:5个常见问题与WarcraftHelper解决方案

魔兽争霸3优化指南:5个常见问题与WarcraftHelper解决方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否在玩《魔兽争霸3》时遇到过…...

浏览器缓存揭秘:它什么时候“自动”生效?

🚀 浏览器缓存揭秘:它什么时候“自动”生效? 🤔 什么是浏览器缓存? 简单来说,浏览器缓存就是浏览器把下载过的资源(HTML, CSS, JS, 图片等)保存在本地硬盘或内存中。当再次请求相同…...

MCP密钥安全管理的无侵入解决方案:mcp-safe-run工具详解

1. 项目概述:告别硬编码,拥抱安全的MCP密钥管理如果你和我一样,日常开发中深度依赖Claude、Cursor、Windsurf这类智能编码助手,那你肯定对Model Context Protocol(MCP)不陌生。MCP作为连接AI模型与外部工具…...

开源OmenSuperHub:解决惠普OMEN笔记本性能限制的完整技术方案

开源OmenSuperHub:解决惠普OMEN笔记本性能限制的完整技术方案 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 第一部分:技术挑战分…...

3分钟完成Windows和Office永久激活:KMS智能激活脚本终极指南

3分钟完成Windows和Office永久激活:KMS智能激活脚本终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活烦恼吗?Office突然变成只读模式让你工…...

Enzyme协议:DeFi资产管理智能合约架构与实战指南

1. 项目概述:当智能合约遇上资产管理如果你在区块链领域,特别是DeFi(去中心化金融)生态里待过一段时间,大概率听说过“Enzyme”这个名字。它不是一个新概念,但绝对是DeFi乐高积木中一块承重墙级别的组件。简…...

Happy Island Designer完整指南:免费在线岛屿设计工具终极教程

Happy Island Designer完整指南:免费在线岛屿设计工具终极教程 【免费下载链接】HappyIslandDesigner "Happy Island Designer (Alpha)",是一个在线工具,它允许用户设计和定制自己的岛屿。这个工具是受游戏《动物森友会》(Animal C…...

妙趣AI:开源Agent工具链与AI导航平台的工程实践

1. 妙趣AI:一个AI工具导航与开源Agent生态的实践如果你和我一样,每天被各种新冒出来的AI工具、模型和概念搞得眼花缭乱,同时又对“AI Agent”这个听起来很酷但落地很虚的东西充满好奇,那么“妙趣AI”这个项目可能正是你需要的。它…...