基于银河锐华终端操作系统的C++适配层研究

2023-10-23 02:58麦秀青
计算机时代 2023年10期
关键词:库中桥接管理器

王 千,麦秀青,陆 平

(中国电子科技集团公司第三十二研究所基础软件部,上海 201808)

0 引言

近年来,我国与欧美一些国家之间以操作系统为核心的技术生态体系竞争日益显现[1-2]。Android 从移动设备、穿戴设备、智能家居全方位打造的生态圈已经相当成熟[3],在我国的移动终端市场占有极大的比例,甚至一些安全要求高的专用领域也在使用Android系统,如北斗导航、警用搜救、军用作战等[4-5],这无疑在安全性、知识产权等多方面都存在巨大风险[6]。在此背景下,银河锐华终端操作系统(YROS)就成为了很好的国产化替代方案。

银河锐华终端操作系统是国防科技大学与中国电子科技集团第三十二研究所自主研发的智能移动终端操作系统,使用Linux+HTML5 的实现方案,适用于智能手持、平板、可穿戴等移动终端设备[7]。

银河锐华终端操作系统应用是使用HTML5+JavaScript+CSS 的模式开发的,这种开发模式具有界面适配灵活、可移植性强的特点[8-10],但是用于开发移动终端应用也存在较多问题,诸如运行效率较低、可调试性差、对底层的操控性差等[11]。此外,由于一些专用领域已在使用基于Android开发的软件,这些Android应用多为Java+Native 模式开发,即有很多对性能要求较高的核心功能是通过JNI 的方式在Native 层实现的[12-13],而将这部分代码通过JavaScript 的方式移植到银河锐华终端操作系统上往往是不现实的。若能够提供一种切实可行的移植方案,则能加快国产化移动操作系统的普及以及生态的建立。

综上所述,在银河锐华终端操作系统上实现应用的C++/JavaScrip 混合开发是非常有必要的。基于此,本文进行基于银河锐华终端操作系统的C++适配层研究,通过对系统框架层与系统接口进行扩展,实现C++与JavaScript的交互调用。

1 C++适配层框架

基于银河锐华终端操作系统的C++适配层通过插件的方式,动态加载按照特定方式实现的功能性C++插件库文件,并以系统接口的形式实现JavaScript 与C++插件库之间的交互调用。

在银河锐华终端操作系统的框架层拓展插件库模块管理器与插件库对象管理器。其中插件库模块管理器对所有的C++插件库以模块的形式进行动态管理;而插件库对象管理器则隶属于每一个应用进程,用于JavaScript对C++插件库的具体调用。

C++适配层的架构图如图1所示。

图1 C++适配层架构图

1.1 C++插件库

C++插件库需要按照特定的方式进行开发。

C++适配层提供了一个插件库的基类,C++插件库应继承该基类根据具体功能需求实现一个桥接类,该桥接类将作为C++插件库接收JavaScrip 调用指令的入口。桥接类的主要功能包括插件的初始化与插件的方法调用。继承插件库基类实现桥接类的关键在于调用方法的重载实现,调用方法接收JavaScrip 传递的操作指令以及指令参数,根据指令进行相应操作决策,并将执行的最终结果返回到JavaScrip。由于指令参数在数量以及类型上均存在不确定性,因此在C++插件库基类声明了一个字符串作为指令参数,应用开发时,可以根据实际情况在传入时对参数列表进行编码,并在C++适配层中进行相应的解码工作,以保证参数的正确传递。

C++插件库需要按照约定声明一个全局插件实例,该实例将在C++插件库加载时被初始化,该实例的指针将向外提供,用于对插件库中的方法进行调用。

此外,C++适配层还为C++插件库提供一个接口用于其对JavaScript的回调。在该回调方法中,将通过回调ID惟一标示每一次回调过程。

1.2 插件库模块管理器

插件库模块管理器将每个C++插件库作为一个模块进行动态管理,插件模块中保存有系统调用该C++插件库时所需的信息,具体如下:

插件库句柄:用于保存C++插件库的句柄。

插件库桥接类实例指针:用于保存桥接类的实例。

回调方法指针:用于保存C++插件库发起对JavaScript调用的入口方法。

注册回调指针方法:用于系统向插件库中进行回调方法的注册。

删除回调指针方法:用于系统移出插件库中的回调方法。

调用方法:用于系统发起对C++插件库的调用。

每当应用使用JavaScript 发起加载一个C++插件库的请求时,系统为该插件库动态生成插件模块进行保存;当JavaScript 进行C++插件库功能调用时,插件库模块管理器将通过C++插件库的句柄进行方法调用;若C++插件库需要进行回调,需要JavaScript 首先向插件库中注册回调方法指针进行保存,插件库通过插件模块中保存的回调方法指针进行回调。

1.3 插件库对象管理器

每个应用将独立拥有一个专属于自己的插件库对象管理器,插件库对象管理器向应用提供用于与C++插件库进行交互的系统接口,这些接口主要包括:

C++插件库初始化接口(init):用于动态加载指定C++插件库,创建该库的模块实例;

C++插件库调用接口(exec):用于调用C++插件库中的指定功能;

注册回调方法接口(addListener):用于注册接收并处理C++插件库回调事件的方法;

移除回调方法接口(removeListener):用于停止接收C++插件库中的回调事件;

检测库是否加载接口(isloadedlibrary):用于检测某指定C++插件库是否被成功加载;

卸载C++插件库接口(unloadlibrary):用于卸载指定的C++插件库。

1.4 应用与C++插件库的交互调用

C++适配层通过拓展系统JavaScript 接口向应用提供与C++插件库的交互调用功能。

首先应用通过初始化接口(init)加载指定路径的C++插件库,并为该C++插件库指定一个惟一的标示符;再通过调用接口(exec)指定操作字段,调用C++插件库的指定功能;应用注册回调事件处理方法(addListener),用于接收处理C++插件库的回调事件,回调事件中包括用于标示每个回调的惟一ID,以及传递的参数,回调事件处理方法通过识别不同的回调ID来进行不同的处理;当应用与C++插件库的交互调用结束时,通过调用移除回调方法接口(removeListener)结束对C++插件库回调的监听,并最后通过调用卸载库接口卸载指定C++插件库。应用与C++插件库的交互流程图如图2所示。

图2 应用与C++插件库交互调用流程图

2 应用C++/JavaScript混合开发实现

在银河锐华终端操作系统中增加C++适配层框架后,便能够对银河锐华终端操作系统应用进行C++/JavaScript 开发。本章节将使用该模式进行一个简单加减法计算应用的开发,其中加减法的运算逻辑功能在C++插件库中设置,而应用通过JavaScript使用系统接口实现对C++插件库的功能调用。

2.1 C++插件库的实现

应用通过继承C++适配层提供的基类按照功能需求实现自己的C++插件库。该插件类的实现关键在于对方法Execute的重载实现,该方法的核心在于通过对指令参数的解析来选择需要执行的处理流程,并解析传入参数进行相应的处理。

在该实现过程中,使用“ADD”、“MIN 作为操作指令,并将参数列表按照JSON 格式进行解析;在进行相应的功能操作后将结果同样进行JSON封装后返回。

Calculator.h实现的伪代码如“代码1”所示。

2.2 应用与C++插件库交互调用的实现

应用通过插件库对象管理器加载C++插件库,并对C++插件库进行调用,添加回调监听器来监听并处理C++插件库中的回调事件。

一个简单的对上述加、减运算C++插件库的交互JavaScript 示例如代码3 所示。首先应用需要实例化一个插件库对象管理器,并调用初始化接口对C++插件库进行初始化;然后通过注册回调方法接口注册一个回调方法;最后将参数进行JSON 格式封装后通过C++插件库调用接口进行具体功能的调用。

3 结束语

基于银河锐华终端操作系统的C++适配层通过扩展系统框架与系统接口,实现JavaScript与C++的交互调用,从而使银河锐华终端操作系统应用的开发能够使用C++/JavaScript 混合进行。这就使银河锐华终端操作系统应用的开发更加灵活与便捷;也使更多的Android 应用能够更方便地移植到银河锐华终端操作系统上。这无疑能大大加快专用领域的移动操作系统国产化进程。

猜你喜欢
库中桥接管理器
动物城堡
动物城堡
Microchip推出首款车载以太网音视频桥接(AVB)全集成解决方案
应急状态启动磁盘管理器
Windows文件缓冲处理技术概述
智能盘库在自动化立体库中的探索和应用
苹果腐烂病树桥接复壮技术
双静脉皮瓣桥接移植修复手指腹皮肤缺损
白皮书《802.11ac MU-MIMO: 桥接Wi-Fi中的间隙》发布
高集成度2.5A备份电源管理器简化锂离子电池备份系统