Some content of this application is unavailable at the moment.
If this situation persist, please contact us atFeedback&Contact
1. (WO2018040926) METHOD AND SYSTEM FOR MAINTAINING SOFTWARE PACKAGE DEPENDENCY
Note: Text based on automatic Optical Character Recognition processes. Please use the PDF version for legal matters
一种维护软件包依赖关系的方法及系统

技术领域

[0001] 本发明涉及软件包维护领域,尤其涉及一种维护软件包依赖关系的方法及系统

背景技术

[0002] 随着国内电子支付市场和支付技术的发展,支付终端的软件系统也日益复杂。

目前的支付终端,大都使用了基于 Linux甚至 Android的复杂操作系统,并支持包 括 IC卡、磁卡、射频卡、各种通讯方式等多种外设驱动,并实现了 GUI、设备服 务、管理以及多应用等多种软件功能。这些功能由于涉及不同幵发部门,升级 频率也不同,所以难以统一管理。基于这个特性,通常把相关一类软件做成软 件模块统一管理。比如:打印驱动、 IC卡驱动等。常用的维护软件模块的方式 是做成软件包,比如: ipkg格式软件包。这些软件包通过版本信息进行维护。这 样就实现了以软件包为单位进行维护。在软件包之间存在这一定的依赖关系, 所谓软件包依赖关系,就是一个软件包只有在终端上特定一些软件模块存在且 版本满足一定要求才能安装到该终端上。以 1.3.1版本的软件包 testapp的依赖关系 为例: testsdkl (>=0.9), testsdk2 (>=1.3) , testsdk3 (>=1.0)。在这个依赖关系中, 该软件包需要依赖三个软件包: testsdkl、 testsdk2和 testsdk3。三者版本要求分别 是:不低于 0.9,不低于 1.3,不低于 1.0。只有满足上面条件的终端才能安装 1.3.1 版本的软件包。

[0003] 比较常见的依赖是一个软件包中的程序或库调用了另外一个软件包中的库。目 前常见方法是生成软件包吋,手工填写该软件包对其他软件包的依赖关系。但 是,手工填写软件包依赖关系的方法具有如下缺点:首先,如果一个软件包中 程序和库依赖于其它库的数量较多,则依赖关系容易漏填。其次,随着软件升 级,许多库要新增接口,手工填写易出错。再者,支付终端上的应用程序由客 户幵发,应用软件包对依赖关系的填写更难以控制,会造成无法正常运行程序 等问题。

技术问题

[0004] 本发明所要解决的技术问题是:提供一种维护软件包依赖关系的方法及系统, 实现可自动获取目标程序关联的软件包。

问题的解决方案

技术解决方案

[0005] 为了解决上述技术问题,本发明采用的技术方案为:

[0006] 本发明提供一种维护软件包依赖关系的方法,包括:

[0007] 解析目标程序所需的程序库;

[0008] 为所述程序库中的接口分配版本号;

[0009] 获取所述接口依赖的软件包信息;

[0010] 关联所述接口的版本号和所述软件包信息,形成依赖关系;

[0011] 获取目标程序所需接口的版本号,得到第一版本号;

[0012] 添加与所述第一版本号相应的依赖关系至依赖文件。

[0013] 本发明还提供一种维护软件包依赖关系的系统,包括:

[0014] 解析模块,用于解析目标程序所需的程序库;

[0015] 第一分配模块,用于为所述程序库中的接口分配版本号;

[0016] 第一获取模块,用于获取所述接口依赖的软件包信息;

[0017] 第一关联模块,用于关联所述接口的版本号和所述软件包信息,形成依赖关系

[0018] 第二获取模块,用于获取目标程序所需接口的版本号,得到第一版本号; [0019] 第一添加模块,用于添加与所述第一版本号相应的依赖关系至依赖文件。

发明的有益效果

有益效果

[0020] 本发明的有益效果在于:通过为程序库中的接口分配版本号,有利于对程序库 中的接口进行统一管理;通过关联程序库中的接口的版本号与所述接口依赖的 软件包的信息,有利于维护程序库中的接口与其它软件包的依赖关系;通过聚 集与目标程序所需接口相对应的依赖关系,形成依赖文件,有利于通过所述依 赖文件获知目标程序所依赖的软件包的信息;实现可根据依赖文件自动获取目 标程序所依赖的软件包。

对附图的简要说明

附图说明

[0021] 图 1为本发明一种维护软件包依赖关系的方法的流程框图;

[0022] 图 2为本发明一种维护软件包依赖关系的系统的结构框图;

[0023] 标号说明:

[0024] 1、解析模块; 2、第一分配模块; 3、第一获取模块; 4、第一关联模块; 5、 第二获取模块; 6、第一添加模块; 7、第三获取模块; 8、第四获取模块; 9、 第二关联模块; 10、第二添加模块; 11、封装模块; 12、新增模块; 13、第二 分配模块; 14、第五获取模块; 15、第三关联模块; 16、第三添加模块; 17、 更新模块。

具体实施方式

[0025] 本发明最关键的构思在于:通过自动维护目标程序中的接口所依赖的软件包的 信息,实现可自动获取目标程序所依赖的软件包。

[0026]

[0027] 如图 1所示,本发明提供一种维护软件包依赖关系的方法,包括:

[0028] 解析目标程序所需的程序库;

[0029] 为所述程序库中的接口分配版本号;

[0030] 获取所述接口依赖的软件包信息;

[0031] 关联所述接口的版本号和所述软件包信息,形成依赖关系;

[0032] 获取目标程序所需接口的版本号,得到第一版本号;

[0033] 添加与所述第一版本号相应的依赖关系至依赖文件。

[0034] 进一步地,为所述程序库中的接口分配版本号,具体为:

[0035] 为所述程序库中具有相同依赖关系的接口分配相同的版本号。

[0036] 由上述描述可知,可对具有相同依赖关系的接口进行统一的管理,当目标程序 所需的程序库较多吋,有利于维护目标程序依赖的软件包信息。

[0037] 进一步地,所述软件包信息,包括软件包名称和软件包版本号。

[0038] 由上述描述可知,通过软件包名称和软件包版本号可明确接口的依赖关系。

[0039] 一般地,在软件包之间存在这一定的依赖关系,所谓软件包依赖关系,就是一 个软件包只有在终端上特定一些软件模块存在且版本满足一定要求才能安装到 该终端上。因此在描述目标程序所需接口的依赖关系吋,应说明所依赖的软件 包名称及其要求的版本号。

[0040] 进一步地,所述软件包版本号为能支持所述程序库中的接口正常运行的软件包 的最低版本号。

[0041] 由上述描述可知,软件包通常可向前兼容,即更高版本的软件包包含较低版本 的所有功能,因此通过接口所依赖的软件包的最低版本号可获知可支持接口正 常运行的所有软件包的版本号。

[0042] 进一步地,还包括:

[0043] 获取依赖文件中具有相同软件包名称的软件包版本号,形成软件包版本号集合

[0044] 获取软件包版本号集合中最高的软件包版本号,得到最优版本号;

[0045] 关联所述软件包名称和所述最优版本号,形成最优依赖关系;

[0046] 添加所述最优依赖关系至所述依赖文件。

[0047] 由上述描述可知,实现可减少获取目标程序依赖的软件包的数量。依赖文件描 述的是目标程序中所有接口所依赖的软件包的信息,可能存在有些接口依赖的 软件包相同但软件包版本号不同的情况,由于软件包通常可向前兼容,则只需 获取依赖文件中与最高要求版本号相应的软件包,即可满足所有依赖同一软件 包的接口的需求。

[0048] 进一步地,还包括:

[0049] 封装所述目标程序和依赖文件为目标软件包。

[0050] 由上述描述可知,目标软件包可根据依赖文件中描述的依赖关系自动获取目标 程序依赖的软件包。

[0051] 进一步地,还包括:

[0052] 新增接口至所述程序库;

[0053] 为所述新增接口分配版本号;

[0054] 获取所述新增接口依赖的软件包信息;

[0055] 关联所述新增接口的版本号和所述软件包信息,形成新增依赖关系;

[0056] 添加所述新增依赖关系至所述依赖文件;

[0057] 更新所述目标软件包中的依赖文件。

[0058] 由上述描述可知,当目标程序的程序库新增接口吋,自动将新增接口的依赖关 系更新至依赖文件。

[0059]

[0060] 如图 2所示,本发明还提供一种维护软件包依赖关系的系统,包括:

[0061] 解析模块 1,用于解析目标程序所需的程序库;

[0062] 第一分配模块 2,用于为所述程序库中的接口分配版本号;

[0063] 第一获取模块 3,用于获取所述接口依赖的软件包信息;

[0064] 第一关联模块 4,用于关联所述接口的版本号和所述软件包信息,形成依赖关 系;

[0065] 第二获取模块 5,用于获取目标程序所需接口的版本号,得到第一版本号; [0066] 第一添加模块 6,用于添加与所述第一版本号相应的依赖关系至依赖文件。

[0067] 进一步地,还包括:

[0068] 第三获取模块 7,用于获取依赖文件中具有相同软件包名称的软件包版本号, 形成软件包版本号集合;

[0069] 第四获取模块 8,用于获取软件包版本号集合中最高的软件包版本号,得到最 优版本号;

[0070] 第二关联模块 9,用于关联所述软件包名称和所述最优版本号,形成最优依赖 关系;

[0071] 第二添加模块 10,用于添加所述最优依赖关系至所述依赖文件;

[0072] 封装模块 11,用于封装所述目标程序和依赖文件为目标软件包。

[0073] 进一步地,还包括:

[0074] 新增模块 12,用于新增接口至所述程序库;

[0075] 第二分配模块 13,用于为所述新增接口分配版本号;

[0076] 第五获取模块 14,用于获取所述新增接口依赖的软件包信息;

[0077] 第三关联模块 15,用于关联所述新增接口的版本号和所述软件包信息,形成新 增依赖关系;

[0078] 第三添加模块 16,用于添加所述新增依赖关系至所述依赖文件;

[0079] 更新模块 17,用于更新所述目标软件包中的依赖文件。

[0080]

[0081] 本发明的实施例一为:

[0082] 解析目标程序所需的程序库;

[0083] 为所述程序库中具有相同依赖关系的接口分配相同的版本号;

[0084] 获取所述接口依赖的软件包的名称和版本号;所述版本号为能支持所述程序库 中的接口正常运行的软件包的最低版本号;

[0085] 关联所述接口的版本号和所述软件包信息,形成依赖关系;

[0086] 获取目标程序所需接口的版本号,得到第一版本号;

[0087] 添加与所述第一版本号相应的依赖关系至依赖文件;

[0088] 封装所述目标程序和依赖文件为目标软件包。

[0089] 由上述描述可知,本实施例可通过目标软件包中的依赖文件自动获取目标程序 所依赖的软件包。

[0090] 本实施例的应用场景为:

[0091] 通过 readelf命令解析目标程序 testapp, 获取目标程序所用到的程序库 libtestsdkl.

SO ;

[0092] 程序库 libtestsdkl. so中包含接口 funcl、接口 func2和接口 func3,由于上述接口 具有相同的依赖关系,因此为它们分配相同的版本号 TESTSDK1_1.0;

[0093] 关联版本号 TESTSDK1_1.0和依赖的软件包的信息,具体为:

[0094] [LibName]

[0095] Name=libtestsdkl.so

[0096] [Depends]

[0097] TESTSDKl_1.0=testsdkl(>=1.0); 其中, Name表示对应程序库文件名称, [Dep ends]描述了库的每个接口版本对一些软件包的依赖关系,一般是该库所在的软 件包,在库的特定接口版本吋的软件包版本要求。;

[0098] 库 libtestsdkl.so位于软件包 testsdkl中,所以上面的写法表明:如果应用程序或 应用库调用了 libtestsdkl.so中属于接口版本" TESTSDK1_1.0"的函数(比如 func2

) ,那么,该应用程序或应用库依赖于软件包 testsdkl , 且该软件包版本必须大 等于 1.0。

[0099] 获取目标程序 testapp所需接口 funcl的版本号,得到第一版本号 TESTSDK1_1.0

[0100] 添加与所述第一版本号 TESTSDK1_1.0相应的依赖关系至依赖文件;

[0101] 封装所述目标程序和依赖文件为目标软件包。

[0102]

[0103] 本发明的实施例二为:

[0104] 在实施例一的基础上,新增接口至所述程序库;

[0105] 为所述新增接口分配版本号;

[0106] 获取所述新增接口依赖的软件包信息;

[0107] 关联所述新增接口的版本号和所述软件包信息,形成新增依赖关系;

[0108] 添加所述新增依赖关系至所述依赖文件;

[0109] 更新所述目标软件包中的依赖文件。

[0110] 由上述描述可知,本实施例实现新增接口吋自动维护依赖文件。

[0111] 本实施例的应用场景为:新增接口 fimc4,为其分配版本号 TESTSDK1_1.1。获 取接口 fimc4依赖的软件包信息为 teStsdklC>=l. l)。将新增接口 func4的依赖关系 添加至依赖文件。

[0112]

[0113] 本发明的实施例三为:

[0114] 在实施例一的基础上,本实施例:

[0115] 获取依赖文件中具有相同软件包名称的软件包版本号,形成软件包版本号集合

[0116] 获取软件包版本号集合中最高的软件包版本号,得到最优版本号;

[0117] 关联所述软件包名称和所述最优版本号,形成最优依赖关系;

[0118] 添加所述最优依赖关系至所述依赖文件。

[0119] 由上述描述可知,本实施例实现减少获取目标程序依赖的软件包的数量。

[0120] 对于用到的每一个库,生成最优依赖关系。比如:目标程序使用了接口 fimc4 和接口 funcl , 则库 libtestsdkl.so的最高接口版本为 TESTSDK1_1.1。在 SDK的所 有系统库的库依赖文件中,对 testapp用到的每个库,根据最高接口版本找到对应 依赖关系。根据最高接口版本的依赖关系获取相应的软件包。

[0121]

[0122] 本发明的实施例四为:

[0123] 解析模块 1解析目标程序所需的程序库;

[0124] 第一分配模块 2为所述程序库中的接口分配版本号;

[0125] 第一获取模块 3获取所述接口依赖的软件包信息;

[0126] 第一关联模块 4关联所述接口的版本号和所述软件包信息,形成依赖关系; [0127] 第二获取模块 5获取目标程序所需接口的版本号,得到第一版本号;

[0128] 第一添加模块 6添加与所述第一版本号相应的依赖关系至依赖文件;

[0129] 第三获取模块 7获取依赖文件中具有相同软件包名称的软件包版本号,形成软 件包版本号集合;

[0130] 第四获取模块 8获取软件包版本号集合中最高的软件包版本号,得到最优版本 号;

[0131] 第二关联模块 9关联所述软件包名称和所述最优版本号,形成最优依赖关系;

[0132] 第二添加模块 10添加所述最优依赖关系至所述依赖文件;

[0133] 新增模块 12新增接口至所述程序库;

[0134] 第二分配模块 13为所述新增接口分配版本号;

[0135] 第五获取模块 14获取所述新增接口依赖的软件包信息;

[0136] 第三关联模块 15关联所述新增接口的版本号和所述软件包信息,形成新增依赖 关系;

[0137] 第三添加模块 16添加所述新增依赖关系至所述依赖文件;

[0138] 更新模块 17更新所述目标软件包中的依赖文件;

[0139] 封装模块 11封装所述目标程序和依赖文件为目标软件包。

[0140]

综上所述,本发明提供的一种维护软件包依赖关系的方法及系统,通过为程序 库中的接口分配版本号,有利于对程序库中的接口进行统一管理;通过关联程 序库中的接口的版本号与所述接口依赖的软件包的信息,有利于维护程序库中 的接口与其它软件包的依赖关系;通过聚集与目标程序所需接口相对应的依赖 关系,形成依赖文件,有利于通过所述依赖文件获知目标程序所依赖的软件包 的信息;实现可根据依赖文件自动获取目标程序所依赖的软件包;进一步地, 可对具有相同依赖关系的接口进行统一的管理,当目标程序所需的程序库较多 吋,有利于维护目标程序依赖的软件包信息;进一步地,通过软件包名称和软 件包版本号可明确接口的依赖关系;进一步地,软件包通常可向前兼容,即更 高版本的软件包包含较低版本的所有功能,因此通过接口所依赖的软件包的最 低版本号可获知可支持接口正常运行的所有软件包的版本号;进一步地,实现 可减少获取目标程序依赖的软件包的数量;进一步地,还包括:目标软件包可 根据依赖文件中描述的依赖关系自动获取目标程序依赖的软件包;进一步地, 当目标程序的程序库新增接口吋,自动将新增接口的依赖关系更新至依赖文件