CN114995871A - 一种软件版本适配方法、装置、电子设备和存储介质 - Google Patents
一种软件版本适配方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN114995871A CN114995871A CN202210638495.5A CN202210638495A CN114995871A CN 114995871 A CN114995871 A CN 114995871A CN 202210638495 A CN202210638495 A CN 202210638495A CN 114995871 A CN114995871 A CN 114995871A
- Authority
- CN
- China
- Prior art keywords
- software
- version
- module
- adapter
- package
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种软件版本适配方法、装置、电子设备和存储介质,涉及软件开发技术领域。所述方法包括:响应于软件项目进行软件依赖安装,读取配置文件中所述软件项目的软件依赖信息,所述软件依赖包括一个或多个底层软件;根据所述软件依赖信息,安装各个软件依赖包,并安装软件适配器;加载所述软件适配器,以通过所述软件适配器兼容所述软件依赖的应用程序接口,适配所述软件依赖的软件版本。本申请能够兼容软件依赖的各版本,避免因底层软件版本升级或API变更引起的额外成本。
Description
技术领域
本申请涉及软件开发技术领域,特别是涉及一种软件版本适配方法、装置、电子设备和存储介质。
背景技术
目前开发人员在进行日常的软件(称为软件1)开发过程中会依赖其它软件(以下称为底层软件)进行开发;而底层软件往往会有周期性的迭代更新,每次更新都会产生与之对应的版本号。其中,版本号由主版本、次版本号、修订版本号组成(例如1.1.1);而主版本号的更新常常含有破坏性的内容,对于进行软件A的开发人员来说,这种破坏性的软件版本更新将会带来高成本的软件维护成本同时还伴随人力、资源、精力以及时间的消耗。而假如软件1进行社区开源那么以软件1为依赖软件进行开发的软件(称为软件2)来说也会面临软件1所面临的问题。
目前,对于开发者来说,进行软件1、软件2、…、软件N的开发,现有如下几种方案:
1、使用依赖软件的某个固定版本(主要稳定版本)进行项目开发;
2、依赖软件主版本号进行升级,那么相关的项目进行重构,以支持高版本底层软件。
但是这样的技术方案存在如下缺陷:
1、对于方案1而言,依赖软件的版本固定,那么新的更新带来的一些技术更新则无法使用,而常常版本的更新也伴随着项目的性能优化等等,就会导致一些需求无法实现或者一些性能上的优化无法实现;同样的,由于版本固定,若以依赖软件进行开发的软件1开源被其他人使用,那么其他人同样无法使用高版本的底层软件;
2、对于方案2而言,项目重构会伴随着人力、资源、精力以及时间的消耗;更高的版本往往可能会伴随着更高要求的软件运行环境,兼容性可能会存在问题;同时底层软件的主版本更新往往API(Application Programming Interface,应用程序接口)等都会变更,有着更高的学习使用成本。
发明内容
为了解决上述背景技术中提到的至少一个问题,本申请提供了一种软件版本适配方法、装置、电子设备和存储介质,能够兼容软件依赖的各版本,避免因底层软件版本升级或API变更引起的额外成本。
本申请实施例提供的具体技术方案如下:
第一方面,提供一种软件版本适配方法,包括:
响应于软件项目进行软件依赖安装,读取配置文件中所述软件项目的软件依赖信息,所述软件依赖包括一个或多个底层软件;
根据所述软件依赖信息,安装各个软件依赖包,并安装软件适配器;
加载所述软件适配器,以通过所述软件适配器兼容所述软件依赖的应用程序接口,适配所述软件依赖的软件版本。
进一步的,所述软件适配器包括流程管理器模块、分析器模块、内存管理器模块、执行器模块和解析器模块中的至少一种,所述根据所述软件依赖信息,安装各个软件依赖包,并安装软件适配器,包括:
读取软件适配器的适配器包,通过根据所述适配器包安装入口文件集成的所述流程管理器模块对各个模块进行初始化,调用所述分析器模块进行环境分析和依赖分析,得到分析数据,将所述分析数据写入所述内存管理器模块;
所述执行器模块根据所述分析数据查询所述软件项目和所述底层软件的版本信息,根据所述版本信息将对应版本的兼容包拷贝至所述软件适配器的根目录;
其中,每个兼容包包括相同的入口文件以供调用。
进一步的,在所述根据所述版本信息将对应版本的兼容包拷贝至所述软件适配器的根目录之前,所述方法还包括:
通过所述解析器模块对所述底层软件的应用程序接口进行解析,判断所述应用程序接口是否已经在所述解析器内部注册了自定义实现,得到第一判断结果;
若所述第一判断结果为应用程序接口已经在解析器内部注册了自定义实现,执行所述自定义实现。
进一步的,若所述第一判断结果为应用程序接口未在解析器内部注册了自定义实现,所述方法还包括:
通过所述解析器模块根据所述软件项目和所述底层软件的版本信息,返回所述底层软件每个版本的补丁包;
根据所述每个版本的补丁包进行打包,构建生成对应所述底层软件每个版本的包含相同入口文件的兼容包。
进一步的,所述通过所述解析器模块对所述底层软件的应用程序接口进行解析,还包括:
所述解析器模块提供use函数,以供所述软件项目调用所述use函数注册未被识别的应用程序接口以及执行未返回补丁包的逻辑处理。
进一步的,所述分析数据包括所述软件项目的运行环境、所述软件项目的发布环境以及所述软件依赖的名称、所述软件依赖的版本中的至少一种。
第二方面,提供一种软件版本适配装置,所述装置包括:
依赖读取模块,用于响应于软件项目进行软件依赖安装,读取配置文件中所述软件项目的软件依赖信息,所述软件依赖包括一个或多个底层软件;
依赖安装模块,用于根据所述软件依赖信息,安装各个软件依赖包,并安装软件适配器;
加载模块,用于加载所述软件适配器,以通过所述软件适配器兼容所述软件依赖的应用程序接口,适配所述软件依赖的软件版本。
进一步的,所述软件适配器包括流程管理器模块、分析器模块、内存管理器模块、执行器模块和解析器模块中的至少一种;
所述依赖安装模块还用于读取软件适配器的适配器包,通过根据所述适配器包安装入口文件集成的所述流程管理器模块对各个模块进行初始化,调用所述分析器模块进行环境分析和依赖分析,得到分析数据,将所述分析数据写入所述内存管理器模块;
所述执行器模块根据所述分析数据查询所述软件项目和所述底层软件的版本信息,根据所述版本信息将对应版本的兼容包拷贝至所述软件适配器的根目录;
其中,每个兼容包包括相同的入口文件以供调用。
第三方面,提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述软件版本适配方法。
第四方面,提供一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行所述软件版本适配方法。
本申请实施例具有如下有益效果:
本申请实施例提供的一种软件版本适配方法、装置、电子设备和存储介质,能通过加载软件适配器抹平底层软件各版本之间API的差异,能够兼容软件依赖的各版本,避免因底层软件版本升级或API变更引起的额外成本。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出本申请实施例提供的软件版本适配方法的总流程图;
图2示出根据本申请一个实施例的软件版本适配方法的具体流程图;
图3示出本申请实施例提供的软件版本适配装置的结构示意图;
图4示出可被用于实施本申请中所述的各个实施例的示例性系统。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应当理解,在本申请的描述中,除非上下文明确要求,否则整个说明书和权利要求书中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
还应当理解,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本申请的描述中,除非另有说明,“多个”的含义是两个或两个以上。
需要注意的是,术语“S1”、“S2”等仅用于步骤的描述目的,并非特别指称次序或顺位的意思,亦非用以限定本申请,其仅仅是为了方便描述本申请的方法,而不能理解为指示步骤的先后顺序。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
实施例一
本申请提供了一种软件版本适配方法,参照图1,包括:
S1、响应于软件项目进行软件依赖安装,读取配置文件中软件项目的软件依赖信息,软件依赖包括一个或多个底层软件;
S2、根据软件依赖信息,安装各个软件依赖包,并安装软件适配器;
S3、加载软件适配器,以通过软件适配器兼容软件依赖的应用程序接口,适配软件依赖的软件版本。
具体的,首先一个软件项目的运行必然不是所有功能都需要从0到1进行的,在软件开发过程中,在软件项目的运行过程中若需要用到某个功能,而且正好存在与之对应的底层软件,那么则可以直接使用该底层软件,该底层软件则成为该软件项目的软件依赖。一个软件项目中的软件依赖往往可能有很多,软件项目在进行软件依赖安装过程中,首先会运行脚本命令(npm install),在运行时包管理工具(npm)会读取配置文件package.json中配置的软件项目的所有软件依赖信息,从npm仓库中进行所有软件依赖包的下载,并进行各个依赖包的安装,当所有的依赖安装完毕,开始进行软件适配器的包安装。在进行软件依赖安装过程中会自动判断当前软件开发的运行环境,从而进行环境分析和依赖分析(版本分析);在这之后,通过脚本、文件复制、下载等操作自动安装加载软件适配器,适配器内部实现抹平底层软件各个版本之间API的差异,从而使得后续即使依赖的底层软件进行主版本的更新升级,软件项目也无需关注兼容性以及在软件运行环境中不一致的问题。同样的,若以开发的软件项目作为其他待开发软件的底层软件时,同样通过软件适配器适配每个软件项目的各个版本。
下面以软件项目使用2.0.0版本,需要支持底层软件A的1.0.0版本、2.0.0版本以及3.0.0版本为例,结合图2进行进一步的说明:
在一些实施方式中,软件适配器包括流程管理器模块、分析器模块、内存管理器模块、执行器模块和解析器模块中的至少一种,基于此,S2包括:
S21、读取软件适配器的适配器包,通过根据适配器包安装入口文件集成的流程管理器模块对各个模块进行初始化,调用分析器模块进行环境分析和依赖分析,得到分析数据,将分析数据写入内存管理器模块;
S22、执行器模块根据分析数据查询软件项目和底层软件的版本信息,根据版本信息将对应版本的兼容包拷贝至软件适配器的根目录;
其中,每个兼容包包括相同的入口文件以供调用。
具体的,软件适配器本身即为一个软件项目依赖包,也是一个软件包,会放入npm公共仓库中以供各个项目进行安装使用。软件适配器主要包含流程控制器模块、分析器模块、内存管理器模块、执行器模块、解析器模块和脚本配置文件等各个模块。其中,执行器模块分为两种情况,一种是软件适配器在安装时,另一种是软件适配器在运行时。首先执行器模块的入口文件会依据传递的参数来判断软件适配器是否处于安装状态。若软件适配器处于安装状态,执行器模块会调用脚本进行安装;若软件适配器处于运行状态,执行器模块会调用解析器进行相关的API和相关的函数进行解析。
具体的,由于软件适配器本身也是个软件项目依赖,所以通过npminstall<适配器包名>进行软件适配器的安装。在安装过程中,会读取适配器的包信息,例如适配器包地址,包版本等信息进行安装。由于适配器包脚本配置中注册了postinstall事件并配置了对应的脚本,会执行对应配置的脚本文件,进入到该脚本文件也就进入了该包的安装入口文件,而该入口文件集成了流程管理器模块。其中,流程管理器模块主要是对软件适配器的安装/运行过程中各个节点的拦截,并使用合适的模块进行处理及调度。首先流程管理器模块进行各个模块的初始化,获取各个模块的引用信息,方便后续调用。调用分析器模块进行环境分析和依赖分析,分析器模块的脚本文件通过Node本身的fs模块读取软件项目的package配置文件,从中抽离读取出软件项目的所有依赖项、软件项目的运行环境及发布环境等信息,得到分析数据,并将分析数据返回至流程管理器模块中;流程管理器模块获取到分析器模块返回的分析数据调用内存管理器模块进行内存写入。写入完毕后,调用执行器模块,并将内存管理器模块共享给执行器模块,标记为安装适配器状态。执行器模块根据分析数据查询软件项目和底层软件的版本信息。其中,分析数据包括软件项目的运行环境、软件项目的发布环境以及软件依赖的名称、软件依赖的版本中的至少一种。
示例性的,查询到软件项目版本为2.0.0,当前底层软件A版本也为2.0.0,并且执行器模块内部检测到当前为安装适配器状态,则调用脚本的方法,将软件适配器开发时打包的v2.0.0版本的兼容包拷贝至软件适配器的根目录。其中,每个兼容包中都有index.js文件作为入口文件供外部调用。而配置文件package.json中已经配置main字段为index.js,此时定义的main:index.js有了具体的指向,即可调用对应的v2.0.0版本的兼容包。到这时完成对应该底层软件版本的软件适配器的安装。
在一些实施方式中,在根据版本信息将对应版本的兼容包拷贝至软件适配器的根目录之前,方法还包括:
通过解析器模块对底层软件的应用程序接口进行解析,判断应用程序接口是否已经在解析器内部注册了自定义实现,得到第一判断结果;
若第一判断结果为应用程序接口已经在解析器内部注册了自定义实现,执行自定义实现。
具体的,在软件项目中使用软件适配器暴露出来的模块文件时,对于引入的API等都是通过解析器模块进行解析。具体到某个API时,解析器内部会去判断当前API是否用户已自定义配置,如果用户已自定义配置,则返回用户自定义的配置,如果不是那么调用相关模块的API并返回。
在一些实施方式中,若第一判断结果为应用程序接口未在解析器内部注册了自定义实现,方法还包括:
101、通过解析器模块根据软件项目和底层软件的版本信息,返回底层软件每个版本的补丁包;
102、根据每个版本的补丁包进行打包,构建生成对应底层软件每个版本的包含相同入口文件的兼容包。
具体的,解析器模块会根据软件项目和底层软件的版本信息执行判断规则。示例性的,软件项目版本为2.0.0,若底层软件A的版本为1.0.0,则返回软件A的低版本补丁包;若底层软件A的版本为2.0.0,则返回底层软件A的软件包;若底层软件A的版本为3.0.0,则返回底层软件A的高版本补丁包。此时,开发完对于底层软件A的软件适配器,然后需要对软件适配器进行打包构建,打包出三个文件夹v1.0.0、v2.0.0以及v3.0.0分别对应底层软件A1.0.0、2.0.0以及3.0.0版本的兼容包,即上述的执行器模块拷贝的兼容包。每个兼容包都有index.js文件作为入口文件供外部调用,实际使用该软件适配器的软件项目即可通过index.js执行进入该软件适配器的逻辑。示例性的,在引入软件适配器前,在软件项目中通过如下方式使用底层软件:import{api1,api2,api3}from"底层软件A"。而在引入软件适配器之后通过如下方式使用底层软件:import{api1,api2,api3}from"软件适配器XX"。引入软件适配器XX时,会读取该软件适配器中配置的main:index.js入口文件,而该入口文件来源于v2.0.0版本的兼容包所以在此环境中可以完美兼容。
在一些实施方式中,通过解析器模块对底层软件的应用程序接口进行解析,还包括:
解析器模块提供use函数,以供软件项目调用use函数注册未被识别的应用程序接口以及执行未返回补丁包的逻辑处理。
示例性的,若api3未被识别或者当前底层软件A的版本(2.0.0)无补丁,可通过import{use}from"软件适配器XX",通过使用use(api3,fn1)自定义api3的行为。此时fn1被注册入软件适配器,在实际使用api3时即使用fn1,此时即可实现完美兼容。不必过多关注底层软件A1.0.0、2.0.0以及3.0.0底层软件A版本之间api的差异。
具体的,在切换底层软件A版本时,若软件项目中底层软件A进行版本更新升级到3.0.0,那么在进行软件适配器安装时依据上述根目录文件将会有兼容3.0.0版本的软件包,而对于软件项目来说,使用API和函数的方式未发生变更,但是可以在软件项目中运行底层软件A的其它版本,这对于该软件项目几乎无任何成本。
在本实施例中,在进行依赖安装过程中会自动判断当前软件项目开发的环境,从而进行环境分析和依赖分析而不需要进行人为干预,能通过加载软件适配器抹平底层软件各版本之间API的差异,从而减少因底层软件版本更新引起的额外成本。
实施例二
对应上述实施例,本申请还提供了一种软件版本适配装置,参照图3,所述装置包括:依赖读取模块、依赖安装模块以及加载模块。
其中,依赖读取模块,用于响应于软件项目进行软件依赖安装,读取配置文件中所述软件项目的软件依赖信息,所述软件依赖包括一个或多个底层软件;依赖安装模块,用于根据所述软件依赖信息,安装各个软件依赖包,并安装软件适配器;加载模块,用于加载所述软件适配器,以通过所述软件适配器兼容所述软件依赖的应用程序接口,适配所述软件依赖的软件版本。
进一步的,所述软件适配器包括流程管理器模块、分析器模块、内存管理器模块、执行器模块和解析器模块中的至少一种;所述依赖安装模块还用于读取软件适配器的适配器包,通过根据所述适配器包安装入口文件集成的所述流程管理器模块对各个模块进行初始化,调用所述分析器模块进行环境分析和依赖分析,得到分析数据,将所述分析数据写入所述内存管理器模块;所述执行器模块根据所述分析数据查询所述软件项目和所述底层软件的版本信息,根据所述版本信息将对应版本的兼容包拷贝至所述软件适配器的根目录;
其中,每个兼容包包括相同的入口文件以供调用。
进一步的,所述解析器模块还用于对所述底层软件的应用程序接口进行解析,判断所述应用程序接口是否已经在所述解析器内部注册了自定义实现,得到第一判断结果;若所述第一判断结果为应用程序接口已经在解析器内部注册了自定义实现,所述解析器模块还用于执行所述自定义实现。
进一步的,若所述第一判断结果为应用程序接口未在解析器内部注册了自定义实现,所述解析器模块还用于根据所述软件项目和所述底层软件的版本信息,返回所述底层软件每个版本的补丁包;所述装置还包括打包构建模块,用于根据所述每个版本的补丁包进行打包,构建生成对应所述底层软件每个版本的包含相同入口文件的兼容包。
进一步的,所述解析器模块还用于提供use函数,以供所述软件项目调用所述use函数注册未被识别的应用程序接口以及执行未返回补丁包的逻辑处理。
进一步的,所述分析数据包括所述软件项目的运行环境、所述软件项目的发布环境以及所述软件依赖的名称、所述软件依赖的版本中的至少一种。
关于软件版本适配装置的具体限定可以参见上文中对于软件版本适配方法的相关限定,故此处不作赘述。上述软件版本适配装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
实施例三
对应上述实施例,本申请还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时可以实现上述软件版本适配方法。
如图4所示,在一些实施例中,系统能够作为各所述实施例中的任意一个用于软件版本适配方法的上述电子设备。在一些实施例中,系统可包括具有指令的一个或多个计算机可读介质(例如,系统存储器或NVM/存储设备)以及与该一个或多个计算机可读介质耦合并被配置为执行指令以实现模块从而执行本申请中所述的动作的一个或多个处理器(例如,(一个或多个)处理器)。
对于一个实施例,系统控制模块可包括任意适当的接口控制器,以向(一个或多个)处理器中的至少一个和/或与系统控制模块通信的任意适当的设备或组件提供任意适当的接口。
系统控制模块可包括存储器控制器模块,以向系统存储器提供接口。存储器控制器模块可以是硬件模块、软件模块和/或固件模块。
系统存储器可被用于例如为系统加载和存储数据和/或指令。对于一个实施例,系统存储器可包括任意适当的易失性存储器,例如,适当的DRAM。在一些实施例中,系统存储器可包括双倍数据速率类型四同步动态随机存取存储器(DDR4SDRAM)。
对于一个实施例,系统控制模块可包括一个或多个输入/输出(I/O)控制器,以向NVM/存储设备及(一个或多个)通信接口提供接口。
例如,NVM/存储设备可被用于存储数据和/或指令。NVM/存储设备可包括任意适当的非易失性存储器(例如,闪存)和/或可包括任意适当的(一个或多个)非易失性存储设备(例如,一个或多个硬盘驱动器(HDD)、一个或多个光盘(CD)驱动器和/或一个或多个数字通用光盘(DVD)驱动器)。
NVM/存储设备可包括在物理上作为系统被安装在其上的设备的一部分的存储资源,或者其可被该设备访问而不必作为该设备的一部分。例如,NVM/存储设备可通过网络经由(一个或多个)通信接口进行访问。
(一个或多个)通信接口可为系统提供接口以通过一个或多个网络和/或与任意其他适当的设备通信。系统可根据一个或多个无线网络标准和/或协议中的任意标准和/或协议来与无线网络的一个或多个组件进行无线通信。
对于一个实施例,(一个或多个)处理器中的至少一个可与系统控制模块的一个或多个控制器(例如,存储器控制器模块)的逻辑封装在一起。对于一个实施例,(一个或多个)处理器中的至少一个可与系统控制模块的一个或多个控制器的逻辑封装在一起以形成系统级封装(SiP)。对于一个实施例,(一个或多个)处理器中的至少一个可与系统控制模块的一个或多个控制器的逻辑集成在同一模具上。对于一个实施例,(一个或多个)处理器中的至少一个可与系统控制模块的一个或多个控制器的逻辑集成在同一模具上以形成片上系统(SoC)。
在各个实施例中,系统可以但不限于是:服务器、工作站、台式计算设备或移动计算设备(例如,膝上型计算设备、手持计算设备、平板电脑、上网本等)。在各个实施例中,系统可具有更多或更少的组件和/或不同的架构。例如,在一些实施例中,系统包括一个或多个摄像机、键盘、液晶显示器(LCD)屏幕(包括触屏显示器)、非易失性存储器端口、多个天线、图形芯片、专用集成电路(ASIC)和扬声器。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。本领域技术人员应能理解,计算机程序指令在计算机可读介质中的存在形式包括但不限于源文件、可执行文件、安装包文件等,相应地,计算机程序指令被计算机执行的方式包括但不限于:该计算机直接执行该指令,或者该计算机编译该指令后再执行对应的编译后程序,或者该计算机读取并执行该指令,或者该计算机读取并安装该指令后再执行对应的安装后程序。在此,计算机可读介质可以是可供计算机访问的任意可用的计算机可读存储介质或通信介质。
通信介质包括藉此包含例如计算机可读指令、数据结构、程序模块或其他数据的通信信号被从一个系统传送到另一系统的介质。通信介质可包括有导的传输介质(诸如电缆和线(例如,光纤、同轴等))和能传播能量波的无线(未有导的传输)介质,诸如声音、电磁、RF、微波和红外。计算机可读指令、数据结构、程序模块或其他数据可被体现为例如无线介质(诸如载波或诸如被体现为扩展频谱技术的一部分的类似机制)中的已调制数据信号。术语“已调制数据信号”指的是其一个或多个特征以在信号中编码信息的方式被更改或设定的信号。调制可以是模拟的、数字的或混合调制技术。
在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
实施例四
对应上述实施例,本申请还提供了一种计算机可读存储介质,存储有计算机可执行指令,计算机可执行指令用于执行软件版本适配方法。
在本实施例中,计算机可读存储介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动的介质。例如,计算机可读存储介质包括,但不限于,易失性存储器,诸如随机存储器(RAM,DRAM,SRAM);以及非易失性存储器,诸如闪存、各种只读存储器(ROM,PROM,EPROM,EEPROM)、磁性和铁磁/铁电存储器(MRAM,FeRAM);以及磁性和光学存储设备(硬盘、磁带、CD、DVD);或其它现在已知的介质或今后开发的能够存储供计算机系统使用的计算机可读信息/数据。
尽管已描述了本申请实施例中的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例中范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种软件版本适配方法,其特征在于,包括:
响应于软件项目进行软件依赖安装,读取配置文件中所述软件项目的软件依赖信息,所述软件依赖包括一个或多个底层软件;
根据所述软件依赖信息,安装各个软件依赖包,并安装软件适配器;
加载所述软件适配器,以通过所述软件适配器兼容所述软件依赖的应用程序接口,适配所述软件依赖的软件版本。
2.根据权利要求1所述的软件版本适配方法,其特征在于,所述软件适配器包括流程管理器模块、分析器模块、内存管理器模块、执行器模块和解析器模块中的至少一种,所述根据所述软件依赖信息,安装各个软件依赖包,并安装软件适配器,包括:
读取软件适配器的适配器包,通过根据所述适配器包安装入口文件集成的所述流程管理器模块对各个模块进行初始化,调用所述分析器模块进行环境分析和依赖分析,得到分析数据,将所述分析数据写入所述内存管理器模块;
所述执行器模块根据所述分析数据查询所述软件项目和所述底层软件的版本信息,根据所述版本信息将对应版本的兼容包拷贝至所述软件适配器的根目录;
其中,每个兼容包包括相同的入口文件以供调用。
3.根据权利要求2所述的软件版本适配方法,其特征在于,在所述根据所述版本信息将对应版本的兼容包拷贝至所述软件适配器的根目录之前,所述方法还包括:
通过所述解析器模块对所述底层软件的应用程序接口进行解析,判断所述应用程序接口是否已经在所述解析器内部注册了自定义实现,得到第一判断结果;
若所述第一判断结果为应用程序接口已经在解析器内部注册了自定义实现,执行所述自定义实现。
4.根据权利要求3所述的软件版本适配方法,其特征在于,若所述第一判断结果为应用程序接口未在解析器内部注册了自定义实现,所述方法还包括:
通过所述解析器模块根据所述软件项目和所述底层软件的版本信息,返回所述底层软件每个版本的补丁包;
根据所述每个版本的补丁包进行打包,构建生成对应所述底层软件每个版本的包含相同入口文件的兼容包。
5.根据权利要求4所述的软件版本适配方法,其特征在于,所述通过所述解析器模块对所述底层软件的应用程序接口进行解析,还包括:
所述解析器模块提供use函数,以供所述软件项目调用所述use函数注册未被识别的应用程序接口以及执行未返回补丁包的逻辑处理。
6.根据权利要求2所述的软件版本适配方法,其特征在于,所述分析数据包括所述软件项目的运行环境、所述软件项目的发布环境以及所述软件依赖的名称、所述软件依赖的版本中的至少一种。
7.一种软件版本适配装置,其特征在于,所述装置包括:
依赖读取模块,用于响应于软件项目进行软件依赖安装,读取配置文件中所述软件项目的软件依赖信息,所述软件依赖包括一个或多个底层软件;
依赖安装模块,用于根据所述软件依赖信息,安装各个软件依赖包,并安装软件适配器;
加载模块,用于加载所述软件适配器,以通过所述软件适配器兼容所述软件依赖的应用程序接口,适配所述软件依赖的软件版本。
8.根据权利要求7所述的软件版本适配装置,其特征在于,所述软件适配器包括流程管理器模块、分析器模块、内存管理器模块、执行器模块和解析器模块中的至少一种;
所述依赖安装模块还用于读取软件适配器的适配器包,通过根据所述适配器包安装入口文件集成的所述流程管理器模块对各个模块进行初始化,调用所述分析器模块进行环境分析和依赖分析,得到分析数据,将所述分析数据写入所述内存管理器模块;
所述执行器模块根据所述分析数据查询所述软件项目和所述底层软件的版本信息,根据所述版本信息将对应版本的兼容包拷贝至所述软件适配器的根目录;
其中,每个兼容包包括相同的入口文件以供调用。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至6中任意一项所述软件版本适配方法。
10.一种计算机可读存储介质,存储有计算机可执行指令,其特征在于,所述计算机可执行指令用于执行权利要求1至6中任意一项所述软件版本适配方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210638495.5A CN114995871A (zh) | 2022-06-07 | 2022-06-07 | 一种软件版本适配方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210638495.5A CN114995871A (zh) | 2022-06-07 | 2022-06-07 | 一种软件版本适配方法、装置、电子设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114995871A true CN114995871A (zh) | 2022-09-02 |
Family
ID=83033940
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210638495.5A Pending CN114995871A (zh) | 2022-06-07 | 2022-06-07 | 一种软件版本适配方法、装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114995871A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117667080A (zh) * | 2023-12-15 | 2024-03-08 | 北京安普诺信息技术有限公司 | 一种sca组件依赖信息的确定方法、装置、设备及介质 |
-
2022
- 2022-06-07 CN CN202210638495.5A patent/CN114995871A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117667080A (zh) * | 2023-12-15 | 2024-03-08 | 北京安普诺信息技术有限公司 | 一种sca组件依赖信息的确定方法、装置、设备及介质 |
CN117667080B (zh) * | 2023-12-15 | 2024-05-28 | 北京安普诺信息技术有限公司 | 一种sca组件依赖信息的确定方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20220398109A1 (en) | Dynamically Loaded Plugin Architecture | |
US8694981B2 (en) | Shared resource dependencies | |
US20200272440A1 (en) | Container image building using dependency container images | |
US8739147B2 (en) | Class isolation to minimize memory usage in a device | |
CN109739523B (zh) | 应用程序打包方法、装置、存储介质及终端 | |
KR101099337B1 (ko) | 커널 모드 쉬밍을 위한 드라이버 특정 컨텍스트 | |
US20110295984A1 (en) | Cartridge-based package management | |
US20120102103A1 (en) | Running legacy applications on cloud computing systems without rewriting | |
US8516505B2 (en) | Cross-platform compatibility framework for computer applications | |
US10261844B2 (en) | Generic language application programming interface interpreter | |
CN106909441B (zh) | 一种基于jvm的磁盘直接i/o访问的方法 | |
RU2635891C2 (ru) | Механизм инсталляции и формат пакета для распараллеливаемых надежных инсталляций | |
CN112486552A (zh) | 服务器热更新方法、装置、设备和存储介质 | |
CN101965561A (zh) | 用于异步方法的声明性支持 | |
US9286083B2 (en) | Satisfying missing dependencies on a running system | |
US20120131539A1 (en) | Find and Track Information Of Interface Usage Of Software Libraries By Other Software | |
US10310863B1 (en) | Patching functions in use on a running computer system | |
US9639375B2 (en) | Generation of language bindings for libraries using data from compiler generated debug information | |
US20210141632A1 (en) | Automated software patching for versioned code | |
CN114995871A (zh) | 一种软件版本适配方法、装置、电子设备和存储介质 | |
US7707593B2 (en) | Object models enabling hosting content in a plurality of environments | |
CN117707543A (zh) | 一种应用安装包制作和安装方法、计算设备及存储介质 | |
US10552135B1 (en) | Reducing a size of an application package | |
US10606612B2 (en) | Context check bypass to enable opening shared-object libraries | |
CN113867776B (zh) | 中台应用的发布方法、装置、电子设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |