一种在应用中加载插件的方法、计算设备及存储介质技术

技术编号:34271164 阅读:23 留言:0更新日期:2022-07-24 16:03
本发明专利技术公开了一种在应用中加载插件的方法、计算设备及存储介质,在应用中加载插件的方法在计算设备中执行,该方法包括:当监听到第一插件加载指令时,在应用中加载代理第一插件的第二插件,其中,计算设备中驻留有至少一个版本的第一插件,第二插件与各第一插件关联;获取应用运行时所依赖的开发库的第一版本信息;基于第二插件和第一版本信息,从各第一插件中确定出与第一版本信息相匹配的目标第一插件;在应用中加载目标第一插件。在应用中加载目标第一插件。在应用中加载目标第一插件。

A method of loading plug-ins in applications, computing devices and storage media

【技术实现步骤摘要】
一种在应用中加载插件的方法、计算设备及存储介质
[0001]本申请是2022年01月25日提交的专利技术专利申请的分案申请,原申请号:2022100835744,专利技术名称:一种在应用中加载插件的方法、计算设备及存储介质。


[0002]本专利技术涉及计算机
,具体涉及一种在应用中加载插件的方法、计算设备及存储介质。

技术介绍

[0003]一般情况下,插件及其依赖的应用均由相同的开发库构建。应用和插件在运行时,都会将其依赖的开发库加载至内存中,当开发库进行版本升级后,例如,开发库需要进行较大幅度的功能更新,这种更新往往会破坏它原本的兼容性,为了避免对使用久版本的应用及插件产生影响,需要在系统中集成多个版本的开发库。这时,在运行应用时,如果应用与插件所依赖的开发库属于一个版本,那么内存中只会加载该版本开发库。如果应用和插件所依赖的开发库不属于一个版本,那么内存中会加载不同版本的开发库,导致插件和不同版本开发库之间的交叉依赖,换句话说,就是依赖低版本开发库的插件会运行在高版本的开发库环境中或者依赖高版本开发库的插件运行在低版本的开发库环境中,出现同一开发库的不同版本被同时加载使用的情况,由于多个版本的开发库无法同时共存,就会导致应用运行时产生异常。

技术实现思路

[0004]鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的一种在应用中加载插件的方法、计算设备以及存储介质。
[0005]根据本专利技术的一个方面,提供一种在应用中加载插件的方法,在计算设备中执行,该方法包括:当监听到第一插件加载指令时,在应用中加载代理第一插件的第二插件,其中,计算设备中驻留有至少一个版本的第一插件,第二插件与各第一插件关联;获取应用运行时所依赖的开发库的第一版本信息;基于第二插件和第一版本信息,从至少一个版本的第一插件中确定出与第一版本信息相匹配的目标第一插件;在应用中加载目标第一插件。
[0006]可选地,在根据本专利技术的在应用中加载插件的方法中,其中,在应用中加载代理第一插件的第二插件的步骤包括:基于各第一插件的配置信息,构建第二插件,配置信息至少包括各第一插件的标识、存储路径和第二版本信息;利用应用加载第二插件。
[0007]可选地,在根据本专利技术的在应用中加载插件的方法中,其中,获取应用运行时所依赖的开发库的第一版本信息的步骤包括:确定计算设备当前已加载的开发库;采用符号地址获取函数,从已加载的开发库中获取的第一版本信息。
[0008]可选地,在根据本专利技术的在应用中加载插件的方法中,其中,获取应用运行时所依赖的开发库的第一版本信息的步骤包括:读取计算设备的当前进程内容映射空间,遍历其中所有的内存符号内容;从内存符号内容中确定出第一版本信息。
[0009]可选地,在根据本专利技术的在应用中加载插件的方法中,其中,获取应用运行时所依赖的开发库的第一版本信息的步骤包括:确定计算设备当前已加载的开发库;采用符号地址获取函数,从已加载的开发库中获取的第一版本信息;检测是否获取到第一版本信息;若未获取到,则读取计算设备的当前进程内容映射空间;遍历进程内容映射空间中所有的内存符号内容;从内存符号内容中确定出第一版本信息。
[0010]可选地,在根据本专利技术的在应用中加载插件的方法中,其中,基于各第一插件的配置信息,构建第二插件的步骤包括:判断各第一插件的存储路径是否具有相同的上级目录;若具有,则将第二插件的绝对存储路径设置为各第一插件的绝对存储路径的上级目录,并在该目录下创建第二插件。
[0011]可选地,在根据本专利技术的在应用中加载插件的方法中,其中,将基于第二插件和第一版本信息,从各第一插件中确定出与第一版本信息相匹配的目标第一插件的步骤包括:获取第二插件的绝对存储路径;将绝对存储路径与第一版本信息进行拼接,以得到目标第一插件的绝对存储路径;基于目标第一插件的绝对存储路径,确定出目标第一插件。
[0012]可选地,在根据本专利技术的在应用中加载插件的方法中,其中,将基于第二插件和第一版本信息,从各第一插件中确定出与第一版本信息相匹配的目标第一插件的步骤包括:判断各第一插件的存储路径是否具有相同的上级目录;若不具有,则将第一版本信息与各第一插件的第二版本信息进行匹配;将匹配成功的第二版本信息对应的第一插件确定为目标第一插件。
[0013]可选地,在根据本专利技术的在应用中加载插件的方法中,其中,在当监听到第一插件加载指令时,在应用中加载代理第一插件的第二插件的步骤之前,还包括步骤:获取与应用对应的所有版本的开发库;针对每一版本的开发库,构建对应的第一插件。
[0014]根据本专利技术的又一个方面,提供一种计算设备,包括:至少一个处理器;和存储有程序指令的存储器,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行上述方法的指令。
[0015]根据本专利技术的又一个方面,提供一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行上述的方法。
[0016]根据本专利技术的方案,通过在应用加载第一插件时,构建第一插件的代理插件,即第二插件的方式,可以动态识别出插件的依赖库版本,并针对插件做单一依赖加载,解决了同一开发库的不同版本被同时加载的现象。并且,通过本专利技术的自动选择第一插件版本的方案,可以做到从第二插件对目标第一插件的转发,兼容了传统的插件和适配了多版本依赖的分包型插件的加载方式。
[0017]上述说明仅是本专利技术技术方案的概述,为了能够更清楚了解本专利技术的技术手段,而可依照说明书的内容予以实施,并且为了让本专利技术的上述和其它目的、特征和优点能够更明显易懂,以下特举本专利技术的具体实施方式。
附图说明
[0018]通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本专利技术的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0019]图1示出了一种动态库的运行模式示意图;
[0020]图2示出了一种Qt的动态库插件的实现原理示意图;
[0021]图3示出了一种通过QPluginLoader类实现了插件的加载的流程示意图;
[0022]图4示出了一种程序A运行依赖关系示意图;
[0023]图5示出了根据本专利技术一个实施例的计算设备500的结构图;
[0024]图6示出了根据本专利技术一个实施例的在应用中加载插件的方法600的流程图;
[0025]图7示出了根据本专利技术一个实施例的第二插件的代理机制示意图;
[0026]图8示出了根据本专利技术一个实施例的双通道获取第一版本信息的原理示意图;
[0027]图9示出了根据本专利技术一个实施例中插件选择机制的原理示意图;
[0028]图10示出了根据本专利技术一个实施例的在应用中进行插件加载的方法流程示意图。
具体实施方式
[0029]下面将参照附图更详细地描述本公开的本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种在应用中加载插件的方法,在计算设备中执行,该方法包括:获取与所述应用对应的所有版本的开发库;针对每一版本的开发库,构建对应的第一插件;当监听到第一插件加载指令时,在所述应用中加载代理所述第一插件的第二插件,其中,所述计算设备中驻留有至少一个版本的第一插件,所述第二插件与各第一插件关联;获取所述应用运行时所依赖的开发库的第一版本信息;基于所述第二插件和所述第一版本信息,从所述至少一个版本的第一插件中确定出与所述第一版本信息相匹配的目标第一插件;在所述应用中加载所述目标第一插件。2.如权利要求1所述的方法,其中,所述在所述应用中加载代理所述第一插件的第二插件的步骤包括:基于各第一插件的配置信息,构建所述第二插件,所述配置信息至少包括各第一插件的标识、存储路径和第二版本信息;利用所述应用加载所述第二插件。3.如权利要求1所述的方法,其中,所述获取所述应用运行时所依赖的开发库的第一版本信息的步骤包括:确定所述计算设备当前已加载的开发库;采用符号地址获取函数,从所述已加载的开发库中获取所述的第一版本信息。4.如权利要求1所述的方法,其中,所述获取所述应用运行时所依赖的开发库的第一版本信息的步骤包括:读取所述计算设备的当前进程内容映射空间,遍历其中所有的内存符号内容;从所述内存符号内容中确定出所述第一版本信息。5.如权利要求1所述的方法,其中,所述获取所述应用运行时所依赖的开发库的第一版本信息的步骤包括:确定所述计算设备当前已加载的开发库;采用符号地址获取函数,从所述已加载的开发库中获取所述的第一版本信息;检测是否获取到所述第一版本信息;若未获取到,则读取所述计算设备的当前进程内...

【专利技术属性】
技术研发人员:张继德陈可陈斌
申请(专利权)人:统信软件技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1