安卓在SOA中的运用

安卓在运用SOA研发的过程中,会针对实际情况对研发的架构和流程进行优化,通过优化过的架构和实施方案,不仅可以大大提升了整车开发的效率和灵活行以及功能落地的稳定性,同时也增加了系统的向上兼容性。

目前基于车载SOA系统的研发,应用层和底层以太网之间的交互主要是基于JNI来实现的,JNI是将cpp的动态库内置到app或者系统目录下,供app进行使用,参考下图所示:

应用层:java/kotlin代码,各种系统/三方APP

应用框架层:java/C/C++代码 Framework API+JNI方法 服务端、客户端、Linux驱动。

在这层里定义的API都是用Java语言编写。但是又因为它包含了JNI的方法,JNIJava Native Interface)用C/C++编写接口,根据函数表查询调用核心库层里的底层方法,最终访问到 Linux 内核

本地依赖库/系统运行库层:C和C++

Android Runtime:核心库+Dalvik系统库

HAL(硬件抽象层):C++实现,HAL层是上层应用对底层硬件操作屏蔽的一个软件层次,就是上层应用不必关心底层硬件具体是如何工作的,只需要调用底层提供的统一接口即可。HAL层对接具体的硬件BSP接口,比如音视频接口、收音机接口、网络接口、spi接口等。

linux内核层:C语言

Android的第一层是有C语言实现,第二层由C和C++实现,第三、四层主要是有java实现的。

第1、2层之间,从linux的操作系统的角度来看,是由内核和用户空间的分界线,

第2、3层之间是本地代码层和java代码层的接口。

第3、4层之间,是android的系统API的接口。

技术难点

1.app和动态库相当于一体的,动态库中的报错也会导致app出现闪退等问题。JNI的实现方式是JVM有一套cpp和java的对应表,并依赖于JNIEnv,运行时错误很难及时定位。会大大增加系统的耦合度,也会增加调试的困难。

2.JNI的cpp是基于ndk的,并非以标准的cpp方式进行研发,与标准cpp写法有不同,需要重新熟悉。

3.车载系统服务的发布和订阅等,是通过OTA进行统一升级的,无法做到版本的记录和控制,目前的车载SOA系统会不会考虑到接口的向下兼容性。

技术实现要点

1.接口定义模块,在应用层中定义aidl接口并获取aidl接口文件,接口文件编译模块,编译aidl接口文件,生成cpp接口文件和cpp接口。hal层,用于接收应用层提供的cpp接口文件,建立hal层与cpp接口的对接渠道。

2.该架构的特征在于所述接口文件编译模块编译aidl接口文件后,自动生成java接口文件和java接口,所述java接口和cpp接口的功能定义相同;所述应用层接收java接口文件,以建立所述应用层与java接口的对接。通过上述技术方案,大大提升了接口定义的效率,且需要实现某项功能,并依赖与hal层时,可自己先定义该功能的java接口,并将生成的cpp接口文件提供给hal层,应用层自身先可按照该java接口来实现后续功能,并不耽误自己的功能实现,也不依赖对方的实现时间

3.binder模块,应用层实现java接口作为上层的client,hal层实现cpp接口作为底层server,应用层和hal层间通过binder模块以binder模式进行通信。通过上述技术方案,方便了当hal层向应用层的发送某些功能,加强了应用层与hal层之间的联系,所述binder模式通过binder driver实现,所述应用层获取hal层的一个接口作为代理接口;应用层调用代理接口并生成请求数据,发送给binder driver;hal层通过binder模块读取binder driver中的请求数据,处理并将结果返回。通过binder driver使hal层既可以读取应用层发出的请求,也可以将处理结果返回,方便了应用层和hal层之间的双向通信。在应用层中定义aidl接口并获取aidl接口文件的步骤之后包括:定义所述aidl接口文件版本号,hal层支持所有版本的服务接口。

技术总结:

车载智能系统技术领域,公开了一种基于Android AIDL的车载SOA分层开发架构及方法,方法包括在应用层中定义AIDL接口并获取AIDL接口文件;编译AIDL接口文件,获取CPP接口文件并生成CPP接口,获取JAVA接口文件并生成JAVA接口;应用层将CPP接口文件提供给HAL层,以建立HAL层与CPP接口的对接;应用层接收JAVA接口文件,以建立应用层与JAVA接口的对接。存在应用层和HAL层两个进程,大大提升了架构的清晰度,降低了耦合度,同时也提升了稳定性,使运行错误时容易进行定位,大大降低调试难度。

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

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

相关文章

记一个CSS样式实现思路(鼠标聚焦时完整内容,失焦时只显示部分)

效果图 默认状态 鼠标悬浮时 缓慢展示完整内容 实现方法 方法一 使用max-width,当鼠标悬浮时&#xff0c;设置max-width为一个足够大的数值 <div class"flex justify-center align-center mt-20px"><div v-for"(item, key) in ssoList" :key&q…

HTML----JavaScript操作对象BOM对象

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 本章要求 了解BOM模型掌握BOM模型实际应用 一.BOM模型概述 BOM&#xff08;浏览器对象模型&#xff09;是JavaScript中的一个重要概念&#xff0c;它提供了一组用于控制浏览器窗口和页面内容的…

基于 ESP32-C3 开启 Flash 加密和安全启动并进行 OTA 测试

软件&#xff1a; esp-idf v5.1.2 硬件&#xff1a; ESP32-C3 board 1. 首先&#xff0c;准备一个明文固件 hello-world.bin 基于 esp-idf-v5.1.2\examples\get-started\hello_world 例程&#xff0c;使用如下指令&#xff0c;直接编译&#xff0c;获取明文固件 hello-worl…

大数据时代快速获取数据方法,爬虫技术理论剖析与实战演练

一、教程描述 人工智能和机器学习&#xff0c;都离不开数据&#xff0c;若是没有数据&#xff0c;再好的算法&#xff0c;再好的模型&#xff0c;都没有用武之地。数据不仅是指现成的数据库&#xff0c;更加是指每天增加的海量互联网数据。本套教程将通过多个实战项目&#xf…

2024上海国际智慧城市,物联网,大数据博览会(上海智博会)

随着科技的飞速发展&#xff0c;智慧城市、物联网与大数据已经成为当今社会发展的重要驱动力。作为国内最具影响力的科技展会之一&#xff0c;2024上海国际智慧城市,物联网,大数据博览会&#xff08;简称:世亚智博会&#xff09;汇聚了全球顶尖的智慧城市、物联网与大数据技术&…

JMeter之测试WebService接口

JMeter之测试WebService接口 1 背景2 目的3 介绍4 具体操作4.1 soapUI调用4.2 JMeter工具调用4.3 操作步骤流程4.3 重点 1 背景 WebService应用的范围是非常广&#xff0c;任何需要跨平台、跨系统进行数据交换和功能调用的场景都可以用此来实现&#xff0c;在实际的工作中也常常…

k8s-yaml格式

三种常见的项目发布方式&#xff1a; 蓝绿发布&#xff1a; 金丝雀发布&#xff08;灰度发布&#xff09;&#xff1a; 滚动发布&#xff1a; 应用程序升级&#xff0c;面临的最大的问题&#xff0c;就是新旧业务的更换&#xff0c;立项--定稿--需求发布--开发--测试--发布&…

有效边表填充算法

有效边表填充算法 如何填充示例三角形 按照扫描线从上往下的顺序&#xff0c;依次处理和多边形相交的扫描线&#xff0c;对于当前处理的扫描线找到和它相交的所有边的交点&#xff0c;按照交点横坐标从小到大的顺序&#xff0c;两个两个配对&#xff0c;配对之后填充每对交点之…

踩了Vue2运行机制的坑-响应式原理

最近遇到一个很奇怪的bug&#xff1a; 前置&#xff1a;后端接口返回的数据是这样的&#xff1a; ①首先在store中取出后端返回的数据Ares.data&#xff0c;在这里打印输出是正常的 ②然后在vue页面上再取出A.data也就是res.data.data&#xff0c;以及其它几个字段即res.data.X…

Spring技术内幕笔记之IOC的实现

IOC容器的实现 依赖反转&#xff1a; 依赖对象的获得被反转了&#xff0c;于是依赖反转更名为&#xff1a;依赖注入。许多应用都是由两个或者多个类通过彼此的合作来实现业务逻辑的&#xff0c;这使得每个对象都需要与其合作的对象的引用&#xff0c;如果这个获取过程需要自身…

解决报错:找不到显卡

今天做实验碰到一个问题&#xff1a;torch找不到显卡&#xff1a; 打开任务管理器&#xff0c;独显直接没了&#xff0c;一度以为是要去修电脑了&#xff0c;突然想到上次做实验爆显存&#xff0c;屏蔽了gpu用cpu训练&#xff1a; import os os.environ["CUDA_DEVICE_OR…

线性代数笔记3 1.1

学习视频&#xff1a; 2.2 矩阵运算&#xff08;二&#xff09;_哔哩哔哩_bilibili 包括内容&#xff1a; p10矩阵运算&#xff08;二&#xff09; p11特殊矩阵 p12逆矩阵&#xff08;一&#xff09; p13逆矩阵&#xff08;二&#xff09;

网络四元组

文章目录 网络四元组 今天我们来聊聊 网络四元组 网络四元组 四元组&#xff0c;简单理解就是在 TCP 协议中&#xff0c;去确定一个客户端连接的组成要素&#xff0c;它包括源 IP 地址、目标 IP 地址、源端口号、目标端口号。 正常情况下&#xff0c;我们对于网络通信的认识可…

【C语言】Ubuntu 22上用GTK写GUI程序

一、GTK介绍 GTK (GIMP Toolkit) 是一个多平台的图形用户界面工具包。它最初是为图像处理程序 GIMP 开发的&#xff0c;后来演变成为许多操作系统上开发图形界面应用程序的通用库。GTK 是用C语言编写的&#xff0c;并且是自由和开源软件&#xff0c;遵循LGPL (GNU Lesser Gene…

Go中interface != nil不一定不是nil

摘要&#xff1a; interface{} 值 ! nil不一定不是nil&#xff0c;应使用reflect库判断是否是nil。 测试示例&#xff1a; // todo interface ! nil 不一定 不是nil var value map[string]interface{} reqMap : make(map[string]interface{}) reqMap["key"] valu…

计算机网络学习笔记(四)

文章目录 1.介绍一下HTTPS的流程。2.介绍一下HTTP的失败码。3.说一说你知道的http状态码。4. 301和302有什么区别&#xff1f;5.302和304有什么区别&#xff1f;6. 请描述一次完整的HTTP请求的过程。7.什么是重定向&#xff1f;8. 重定向和请求转发有什么区别&#xff1f;9.介绍…

计算机毕业设计 基于SSM的果蔬作物疾病防治系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

【Amazon Bedrock】体验 Bedrock 的基本功能,为构建强大安全的LLM应用而准备

文章目录 一、什么是Amazon Bedrock&#xff1f;二、为什么选择 Amazon Bedrock三、访问Amazon Bedrock UI四、与Amazon Bedrock 聊天五、对比Amazon Bedrock 不同基础模型的返回结果六、让Amazon Bedrock处理文本七、利用Amazon Bedrock生成图片八、参考链接 一、什么是Amazon…

Wnmp本地部署结合内网穿透实现任意浏览器远程访问本地服务

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1…

从信号处理角度彻底理解FFT

只想速览公式可以转到简明FFT公式 一、FFT起初用于解决的问题 分解复合信号 将复合信号视为若干正弦波与余弦波的叠加&#xff0c;如何得知某个正弦波/余弦波在该信号中的强度&#xff1f; 二、即答 用特定频率的正弦波/余弦波&#xff08;设其为a&#xff09;乘上复合信号…
最新文章