本发明涉及软件包维护领域,尤其涉及一种维护软件包依赖关系的方法及系统。
背景技术:
随着国内电子支付市场和支付技术的发展,支付终端的软件系统也日益复杂。目前的支付终端,大都使用了基于Linux甚至Android的复杂操作系统,并支持包括IC卡、磁卡、射频卡、各种通讯方式等多种外设驱动,并实现了GUI、设备服务、管理以及多应用等多种软件功能。这些功能由于涉及不同开发部门,升级频率也不同,所以难以统一管理。基于这个特性,通常把相关一类软件做成软件模块统一管理。比如:打印驱动、IC卡驱动等。常用的维护软件模块的方式是做成软件包,比如:ipkg格式软件包。这些软件包通过版本信息进行维护。这样就实现了以软件包为单位进行维护。在软件包之间存在这一定的依赖关系,所谓软件包依赖关系,就是一个软件包只有在终端上特定一些软件模块存在且版本满足一定要求才能安装到该终端上。以1.3.1版本的软件包testapp的依赖关系为例:testsdk1(>=0.9),testsdk2(>=1.3),testsdk3(>=1.0)。在这个依赖关系中,该软件包需要依赖三个软件包:testsdk1、testsdk2和testsdk3。三者版本要求分别是:不低于0.9,不低于1.3,不低于1.0。只有满足上面条件的终端才能安装1.3.1版本的软件包。
比较常见的依赖是一个软件包中的程序或库调用了另外一个软件包中的库。目前常见方法是生成软件包时,手工填写该软件包对其他软件包的依赖关系。但是,手工填写软件包依赖关系的方法具有如下缺点:首先,如果一个软件包中程序和库依赖于其它库的数量较多,则依赖关系容易漏填。其次,随着软件升级,许多库要新增接口,手工填写易出错。再者,支付终端上的应用程序由客户开发,应用软件包对依赖关系的填写更难以控制,会造成无法正常运行程序等问题。
技术实现要素:
本发明所要解决的技术问题是:提供一种维护软件包依赖关系的方法及系统,实现可自动获取目标程序关联的软件包。
为了解决上述技术问题,本发明采用的技术方案为:
本发明提供一种维护软件包依赖关系的方法,包括:
解析目标程序所需的程序库;
为所述程序库中的接口分配版本号;
获取所述接口依赖的软件包信息;
关联所述接口的版本号和所述软件包信息,形成依赖关系;
获取目标程序所需接口的版本号,得到第一版本号;
添加与所述第一版本号相应的依赖关系至依赖文件。
本发明还提供一种维护软件包依赖关系的系统,包括:
解析模块,用于解析目标程序所需的程序库;
第一分配模块,用于为所述程序库中的接口分配版本号;
第一获取模块,用于获取所述接口依赖的软件包信息;
第一关联模块,用于关联所述接口的版本号和所述软件包信息,形成依赖关系;
第二获取模块,用于获取目标程序所需接口的版本号,得到第一版本号;
第一添加模块,用于添加与所述第一版本号相应的依赖关系至依赖文件。
本发明的有益效果在于:通过为程序库中的接口分配版本号,有利于对程序库中的接口进行统一管理;通过关联程序库中的接口的版本号与所述接口依赖的软件包的信息,有利于维护程序库中的接口与其它软件包的依赖关系;通过聚集与目标程序所需接口相对应的依赖关系,形成依赖文件,有利于通过所述依赖文件获知目标程序所依赖的软件包的信息;实现可根据依赖文件自动获取目标程序所依赖的软件包。
附图说明
图1为本发明一种维护软件包依赖关系的方法的流程框图;
图2为本发明一种维护软件包依赖关系的系统的结构框图;
标号说明:
1、解析模块;2、第一分配模块;3、第一获取模块;4、第一关联模块;5、第二获取模块;6、第一添加模块;7、第三获取模块;8、第四获取模块;9、第二关联模块;10、第二添加模块;11、封装模块;12、新增模块;13、第二分配模块;14、第五获取模块;15、第三关联模块;16、第三添加模块;17、更新模块。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
本发明最关键的构思在于:通过自动维护目标程序中的接口所依赖的软件包的信息,实现可自动获取目标程序所依赖的软件包。
如图1所示,本发明提供一种维护软件包依赖关系的方法,包括:
解析目标程序所需的程序库;
为所述程序库中的接口分配版本号;
获取所述接口依赖的软件包信息;
关联所述接口的版本号和所述软件包信息,形成依赖关系;
获取目标程序所需接口的版本号,得到第一版本号;
添加与所述第一版本号相应的依赖关系至依赖文件。
进一步地,为所述程序库中的接口分配版本号,具体为:
为所述程序库中具有相同依赖关系的接口分配相同的版本号。
由上述描述可知,可对具有相同依赖关系的接口进行统一的管理,当目标程序所需的程序库较多时,有利于维护目标程序依赖的软件包信息。
进一步地,所述软件包信息,包括软件包名称和软件包版本号。
由上述描述可知,通过软件包名称和软件包版本号可明确接口的依赖关系。
一般地,在软件包之间存在这一定的依赖关系,所谓软件包依赖关系,就是一个软件包只有在终端上特定一些软件模块存在且版本满足一定要求才能安装到该终端上。因此在描述目标程序所需接口的依赖关系时,应说明所依赖的软件包名称及其要求的版本号。
进一步地,所述软件包版本号为能支持所述程序库中的接口正常运行的软件包的最低版本号。
由上述描述可知,软件包通常可向前兼容,即更高版本的软件包包含较低版本的所有功能,因此通过接口所依赖的软件包的最低版本号可获知可支持接口正常运行的所有软件包的版本号。
进一步地,还包括:
获取依赖文件中具有相同软件包名称的软件包版本号,形成软件包版本号集合;
获取软件包版本号集合中最高的软件包版本号,得到最优版本号;
关联所述软件包名称和所述最优版本号,形成最优依赖关系;
添加所述最优依赖关系至所述依赖文件。
由上述描述可知,实现可减少获取目标程序依赖的软件包的数量。依赖文件描述的是目标程序中所有接口所依赖的软件包的信息,可能存在有些接口依赖的软件包相同但软件包版本号不同的情况,由于软件包通常可向前兼容,则只需获取依赖文件中与最高要求版本号相应的软件包,即可满足所有依赖同一软件包的接口的需求。
进一步地,还包括:
封装所述目标程序和依赖文件为目标软件包。
由上述描述可知,目标软件包可根据依赖文件中描述的依赖关系自动获取目标程序依赖的软件包。
进一步地,还包括:
新增接口至所述程序库;
为所述新增接口分配版本号;
获取所述新增接口依赖的软件包信息;
关联所述新增接口的版本号和所述软件包信息,形成新增依赖关系;
添加所述新增依赖关系至所述依赖文件;
更新所述目标软件包中的依赖文件。
由上述描述可知,当目标程序的程序库新增接口时,自动将新增接口的依赖关系更新至依赖文件。
如图2所示,本发明还提供一种维护软件包依赖关系的系统,包括:
解析模块1,用于解析目标程序所需的程序库;
第一分配模块2,用于为所述程序库中的接口分配版本号;
第一获取模块3,用于获取所述接口依赖的软件包信息;
第一关联模块4,用于关联所述接口的版本号和所述软件包信息,形成依赖关系;
第二获取模块5,用于获取目标程序所需接口的版本号,得到第一版本号;
第一添加模块6,用于添加与所述第一版本号相应的依赖关系至依赖文件。
进一步地,还包括:
第三获取模块7,用于获取依赖文件中具有相同软件包名称的软件包版本号,形成软件包版本号集合;
第四获取模块8,用于获取软件包版本号集合中最高的软件包版本号,得到最优版本号;
第二关联模块9,用于关联所述软件包名称和所述最优版本号,形成最优依赖关系;
第二添加模块10,用于添加所述最优依赖关系至所述依赖文件;
封装模块11,用于封装所述目标程序和依赖文件为目标软件包。
进一步地,还包括:
新增模块12,用于新增接口至所述程序库;
第二分配模块13,用于为所述新增接口分配版本号;
第五获取模块14,用于获取所述新增接口依赖的软件包信息;
第三关联模块15,用于关联所述新增接口的版本号和所述软件包信息,形成新增依赖关系;
第三添加模块16,用于添加所述新增依赖关系至所述依赖文件;
更新模块17,用于更新所述目标软件包中的依赖文件。
本发明的实施例一为:
解析目标程序所需的程序库;
为所述程序库中具有相同依赖关系的接口分配相同的版本号;
获取所述接口依赖的软件包的名称和版本号;所述版本号为能支持所述程序库中的接口正常运行的软件包的最低版本号;
关联所述接口的版本号和所述软件包信息,形成依赖关系;
获取目标程序所需接口的版本号,得到第一版本号;
添加与所述第一版本号相应的依赖关系至依赖文件;
封装所述目标程序和依赖文件为目标软件包。
由上述描述可知,本实施例可通过目标软件包中的依赖文件自动获取目标程序所依赖的软件包。
本实施例的应用场景为:
通过readelf命令解析目标程序testapp,获取目标程序所用到的程序库libtestsdk1.so;
程序库libtestsdk1.so中包含接口func1、接口func2和接口func3,由于上述接口具有相同的依赖关系,因此为它们分配相同的版本号TESTSDK1_1.0;
关联版本号TESTSDK1_1.0和依赖的软件包的信息,具体为:
[LibName]
Name=libtestsdk1.so
[Depends]
TESTSDK1_1.0=testsdk1(>=1.0);其中,Name表示对应程序库文件名称,[Depends]描述了库的每个接口版本对一些软件包的依赖关系,一般是该库所在的软件包,在库的特定接口版本时的软件包版本要求。;
库libtestsdk1.so位于软件包testsdk1中,所以上面的写法表明:如果应用程序或应用库调用了libtestsdk1.so中属于接口版本“TESTSDK1_1.0”的函数(比如func2),那么,该应用程序或应用库依赖于软件包testsdk1,且该软件包版本必须大等于1.0。
获取目标程序testapp所需接口func1的版本号,得到第一版本号TESTSDK1_1.0;
添加与所述第一版本号TESTSDK1_1.0相应的依赖关系至依赖文件;
封装所述目标程序和依赖文件为目标软件包。
本发明的实施例二为:
在实施例一的基础上,新增接口至所述程序库;
为所述新增接口分配版本号;
获取所述新增接口依赖的软件包信息;
关联所述新增接口的版本号和所述软件包信息,形成新增依赖关系;
添加所述新增依赖关系至所述依赖文件;
更新所述目标软件包中的依赖文件。
由上述描述可知,本实施例实现新增接口时自动维护依赖文件。
本实施例的应用场景为:新增接口func4,为其分配版本号TESTSDK1_1.1。获取接口func4依赖的软件包信息为testsdk1(>=1.1)。将新增接口func4的依赖关系添加至依赖文件。
本发明的实施例三为:
在实施例一的基础上,本实施例:
获取依赖文件中具有相同软件包名称的软件包版本号,形成软件包版本号集合;
获取软件包版本号集合中最高的软件包版本号,得到最优版本号;
关联所述软件包名称和所述最优版本号,形成最优依赖关系;
添加所述最优依赖关系至所述依赖文件。
由上述描述可知,本实施例实现减少获取目标程序依赖的软件包的数量。
对于用到的每一个库,生成最优依赖关系。比如:目标程序使用了接口func4和接口func1,则库libtestsdk1.so的最高接口版本为TESTSDK1_1.1。在SDK的所有系统库的库依赖文件中,对testapp用到的每个库,根据最高接口版本找到对应依赖关系。根据最高接口版本的依赖关系获取相应的软件包。
本发明的实施例四为:
解析模块1解析目标程序所需的程序库;
第一分配模块2为所述程序库中的接口分配版本号;
第一获取模块3获取所述接口依赖的软件包信息;
第一关联模块4关联所述接口的版本号和所述软件包信息,形成依赖关系;
第二获取模块5获取目标程序所需接口的版本号,得到第一版本号;
第一添加模块6添加与所述第一版本号相应的依赖关系至依赖文件;
第三获取模块7获取依赖文件中具有相同软件包名称的软件包版本号,形成软件包版本号集合;
第四获取模块8获取软件包版本号集合中最高的软件包版本号,得到最优版本号;
第二关联模块9关联所述软件包名称和所述最优版本号,形成最优依赖关系;
第二添加模块10添加所述最优依赖关系至所述依赖文件;
新增模块12新增接口至所述程序库;
第二分配模块13为所述新增接口分配版本号;
第五获取模块14获取所述新增接口依赖的软件包信息;
第三关联模块15关联所述新增接口的版本号和所述软件包信息,形成新增依赖关系;
第三添加模块16添加所述新增依赖关系至所述依赖文件;
更新模块17更新所述目标软件包中的依赖文件;
封装模块11封装所述目标程序和依赖文件为目标软件包。
综上所述,本发明提供的一种维护软件包依赖关系的方法及系统,通过为程序库中的接口分配版本号,有利于对程序库中的接口进行统一管理;通过关联程序库中的接口的版本号与所述接口依赖的软件包的信息,有利于维护程序库中的接口与其它软件包的依赖关系;通过聚集与目标程序所需接口相对应的依赖关系,形成依赖文件,有利于通过所述依赖文件获知目标程序所依赖的软件包的信息;实现可根据依赖文件自动获取目标程序所依赖的软件包;进一步地,可对具有相同依赖关系的接口进行统一的管理,当目标程序所需的程序库较多时,有利于维护目标程序依赖的软件包信息;进一步地,通过软件包名称和软件包版本号可明确接口的依赖关系;进一步地,软件包通常可向前兼容,即更高版本的软件包包含较低版本的所有功能,因此通过接口所依赖的软件包的最低版本号可获知可支持接口正常运行的所有软件包的版本号;进一步地,实现可减少获取目标程序依赖的软件包的数量;进一步地,还包括:目标软件包可根据依赖文件中描述的依赖关系自动获取目标程序依赖的软件包;进一步地,当目标程序的程序库新增接口时,自动将新增接口的依赖关系更新至依赖文件。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。