南昌做网站哪个公司好,玉溪市住房和城乡建设局网站,东莞软件开发企业,质感企业网站导航用ps怎么做安卓在运用SOA研发的过程中#xff0c;会针对实际情况对研发的架构和流程进行优化#xff0c;通过优化过的架构和实施方案#xff0c;不仅可以大大提升了整车开发的效率和灵活行以及功能落地的稳定性#xff0c;同时也增加了系统的向上兼容性。
目前基于车载SOA系统的研发…安卓在运用SOA研发的过程中会针对实际情况对研发的架构和流程进行优化通过优化过的架构和实施方案不仅可以大大提升了整车开发的效率和灵活行以及功能落地的稳定性同时也增加了系统的向上兼容性。
目前基于车载SOA系统的研发应用层和底层以太网之间的交互主要是基于JNI来实现的JNI是将cpp的动态库内置到app或者系统目录下供app进行使用参考下图所示 应用层java/kotlin代码各种系统/三方APP
应用框架层java/C/C代码 Framework APIJNI方法 服务端、客户端、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接口作为上层的clienthal层实现cpp接口作为底层server应用层和hal层间通过binder模块以binder模式进行通信。通过上述技术方案方便了当hal层向应用层的发送某些功能加强了应用层与hal层之间的联系所述binder模式通过binder driver实现所述应用层获取hal层的一个接口作为代理接口应用层调用代理接口并生成请求数据发送给binder driverhal层通过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层两个进程大大提升了架构的清晰度降低了耦合度同时也提升了稳定性使运行错误时容易进行定位大大降低调试难度。