CN111857860A - 一种安全加载插件的实现方法及系统 - Google Patents

一种安全加载插件的实现方法及系统 Download PDF

Info

Publication number
CN111857860A
CN111857860A CN201910365267.3A CN201910365267A CN111857860A CN 111857860 A CN111857860 A CN 111857860A CN 201910365267 A CN201910365267 A CN 201910365267A CN 111857860 A CN111857860 A CN 111857860A
Authority
CN
China
Prior art keywords
plug
api
name
version number
loading
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
Application number
CN201910365267.3A
Other languages
English (en)
Inventor
钟潘
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fiberhome Telecommunication Technologies Co Ltd
Original Assignee
Fiberhome Telecommunication Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fiberhome Telecommunication Technologies Co Ltd filed Critical Fiberhome Telecommunication Technologies Co Ltd
Priority to CN201910365267.3A priority Critical patent/CN111857860A/zh
Publication of CN111857860A publication Critical patent/CN111857860A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • G06F9/44526Plug-ins; Add-ons

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种安全加载插件的实现方法及系统,涉及计算机软件领域,该方法包括在插件API中定义名称以及插件API当前的版本号;从插件API中派生出插件使用者的实现;将所述实现编译为动态链接库,存储至指定的目录中;基于待加载的插件API的名称和版本号,遍历所述目录中的动态链接库,查找到相应的插件API并加载,若未查找得到,则结束。所述插件API中还定义有GetName静态方法和GetVersion静态方法,所述GetName静态方法用于获取插件API的名称,所述GetVersion静态方法用于获取插件API的版本号。本发明能够有效保证程序的正常运行。

Description

一种安全加载插件的实现方法及系统
技术领域
本发明涉及计算机软件领域,具体涉及一种安全加载插件的实现方法及系统。
背景技术
通信设备网络管理系统通常需要管理不同种类的设备,实现故障管理、配置管理、性能管理、安全管理等功能,对不同设备的管理存在相似之处,也存在不同之处,例如对于性能管理,起初设备只有一段时间的性能指标均值,后来新类型的设备又增加最大值、最小值,那么原有性能管理功能就会随着新类型设备增加而频繁修改功能代码,代码修改导致原有功能变得不稳定,引入新特性也会逐渐变得越来越难,需要对原有功能进行大的重构,这又会引入新的问题,形成一个恶性循环。
为了解决上述问题,通常会将公共框架和功能封装为平台,平台通过插件机制,在不需要侵入式的修改平台代码的情况下扩展平台的功能,插件方式是在不修改软件系统的情况下增加新的特性,插件使用者定义插件API(Application Programming Interface,应用程序编程接口),插件实现者实现插件API,并编译为动态链接库,插件使用者通过操作系统接口LoadLibrary或dlopen动态载入插件实现者,然后通过函数名或变量名定位到地址进行调用,插件使用者在编译时无需依赖插件实现者。通过插件的方式,能够较好的将修改集中,并与之前代码隔离,避免导致平台不稳定。
但是插件动态加载机制是依靠操作系统的动态链接库动态加载技术,它存在类型不安全和版本不可控的问题,随着插件越来越多,插件自身还会演化不同版本,如果没有良好的管理机制,将会导致程序崩溃或严重逻辑错误,例如出现以下问题:
(1)无类型安全保证:使用操作系统接口GetProcAddress(属于Windows系统)或dlsym(属于Linux系统)获取地址时,只要动态链接库中存在符号名就会返回不为空的地址,但是无法保证这个符号对应的原型是否为插件使用者所期望的,可能导致严重的运行时错误,造成程序崩溃;
(2)无版本安全保证:当插件实现者和插件使用者所定义的插件API版本不一致时,往往会导致严重的逻辑问题,例如插件API的名字没有变,但是原型变了,但是插件动态链接库还是旧的;
(3)维护管理复杂:一般的插件系统需要通过脚本描述插件的目录、插件文件名等信息,当插件有变化时,需要同时修改这些描述文件,导致维护起来比较复杂,一旦描述文件信息有误就会引发问题。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种安全加载插件的实现方法及系统,能够有效保证程序的正常运行。
为达到以上目的,本发明提供的一种安全加载插件的实现方法,包括:
在插件API中定义名称以及插件API当前的版本号;
从插件API中派生出插件使用者的实现;
将所述实现编译为动态链接库,存储至指定的目录中;
基于待加载的插件API的名称和版本号,遍历所述目录中的动态链接库,查找到相应的插件API并加载,若未查找得到,则结束。
在上述技术方案的基础上,所述插件API中还定义有GetName静态方法和GetVersion静态方法,所述GetName静态方法用于获取插件API的名称,所述GetVersion静态方法用于获取插件API的版本号。
在上述技术方案的基础上,所述插件API的基类中还创建有用于用户添加key/value存储形式的自定义属性接口,以及校验属性的接口。
在上述技术方案的基础上,所述从插件API中派生出插件使用者的实现之后,包括:对所述实现定义一变量,并使用插件API的名称作为变量的符号,然后将定义的变量导出。
在上述技术方案的基础上,所述基于待加载的插件API的名称和版本号,遍历所述目录中的动态链接库,查找到相应的插件API并加载,若未查找得到,则结束,具体步骤包括:
遍历目录中的所有文件,依次读取出目录中的动态链接库,得到插件API,然后判断插件API中是否存在与待加载的插件API名称相同的符号、判断插件API的名称是否与待加载的插件API的名称一致、判断插件API的版本号是否与待加载插件API的版本号一致、判断插件API中是否存在用户添加的自定义属性,当判断结果均为是时,则加载当前插件API,当判断结果至少有一个为否时,则结束。
本发明提供的一种安全加载插件的实现系统,包括:
定义模块,其用于在插件API中定义名称以及插件API当前的版本号;
生成模块,其用于从插件API中派生出插件使用者的实现;
编译模块,其用于将所述生成模块派生的实现编译为动态链接库,并存储至指定的目录中;
加载模块,其用于基于待加载的插件API的名称和版本号,遍历所述目录中的动态链接库,查找到相应的插件API并加载,若未查找得到,则结束。
在上述技术方案的基础上,所述插件API中还定义有GetName静态方法和GetVersion静态方法,所述GetName静态方法用于获取插件API的名称,所述GetVersion静态方法用于获取插件API的版本号。
在上述技术方案的基础上,所述定义模块还用于在插件API的基类中创建用于用户添加key/value存储形式的自定义属性接口,以及校验属性的接口。
在上述技术方案的基础上,所述生成模块还用于对所述实现定义一变量,并使用插件API的名称作为变量的符号,然后将定义的变量导出。
在上述技术方案的基础上,所述加载模块基于待加载的插件API的名称和版本号,遍历所述目录中的动态链接库,查找到相应的插件API并加载,若未查找得到,则结束,具体过程包括:
遍历目录中的所有文件,依次读取出目录中的动态链接库,得到插件API,然后判断插件API中是否存在与待加载插件API名称相同的符号、判断插件API的名称是否与待加载插件API的名称一致、判断插件API的版本号是否与待加载插件API的版本号一致、判断插件API中是否存在用户添加的自定义属性,当判断结果均为是时,则加载当前插件API,当判断结果至少有一个为否时,则结束。
与现有技术相比,本发明的优点在于:通过给插件API定义名称和版本号,在进行插件API查找时,基于插件API的名称和版本号进行查找,有效保证所加载插件API的类型和版本与待加载的插件API相匹配,避免由于插件类型不匹配或版本不匹配而给程序的正常运行带来问题,同时通过目录方式对所有的插件API进行存储,方便后续对于插件API的管理和维护。
附图说明
图1为本发明实施例中一种安全加载插件的实现方法的流程图。
具体实施方式
本发明实施例提供一种安全加载插件的实现方法,通过给插件API定义名称和版本号,有效保证所加载插件API的类型和版本与待加载的插件API相匹配,避免由于插件类型不匹配或版本不匹配而给程序的正常运行带来问题。本发明实施例相应的还提供了一种安全加载插件的实现系统。
参见图1所示,本发明实施例提供的一种安全加载插件的实现方法的一实施例包括:
S1:在插件API中定义名称以及插件API当前的版本号;
本发明实施例中,每个插件API的名称唯一,通过给插件API定义名称和版本号,后续进行插件API的加载时,保证所查找到的插件API为待加载的插件API,避免插件类型和版本不匹配。
S2:从插件API中派生出插件使用者的实现。插件实现即为该插件API所要实现的功能,基于插件使用者的需求进行派生,例如实现性能管理、安全管理等功能。每个插件API对应一定的应用功能,相应的,插件API中定义了对应该插件API实现的具体应用接口。
S3:将所述实现编译为动态链接库,存储至指定的目录中。相当于通过目录对所有的插件API进行存储,以目录方式,方便后续对于插件API的查找和维护。
S4:基于待加载的插件API的名称和版本号,遍历目录中的动态链接库,查找到相应的插件API并加载,若未查找得到,则结束,即在动态链接库中,未查找到与待加载的插件API名称和版本号相同的插件API,则结束。基于待加载插件API的名称和版本号,在目录中进行查找,即可查找出符合条件的插件API,有效保证插件API的类型和版本安全。
插件使用者若修改了插件API,则插件API的版本号也会相应的进行审计,同时生成新的动态链接库,若目录下的动态链接库为旧版本的,在进行插件API查找时,则会查找不出插件API,有效保证查找出的插件API的版本与待查找的插件API相匹配。
本发明实施例的安全加载插件的实现方法,通过给插件API定义名称和版本号,在进行插件API查找时,基于插件API的名称和版本号进行查找,有效保证所加载插件API的类型和版本与待加载的插件API相匹配,避免由于插件类型不匹配或版本不匹配而给程序的正常运行带来问题,同时通过目录方式对所有的插件API进行存储,方便后续对于插件API的管理和维护。
可选地,在上述图1对应实施例的基础上,本发明实施例提供的一种安全加载插件的实现方法的第一个可选实施例中,插件API中还定义有GetName静态方法和GetVersion静态方法,GetName静态方法用于获取插件API的名称,GetVersion静态方法用于获取插件API的版本号。
在插件API中定义GetName静态方法和GetVersion静态方法,保证插件API中一定会植入插件API的名称和版本号,从而插件API的基类中会访问插件API的GetName静态方法和GetVersion静态方法,进行插件API的名称和版本号的获取并存储在成员变量中。若插件API未定义GetName静态方法和GetVersion静态方法,则会编译出错,从而约束插件API一定会定义名称和版本号。
插件API的基类中还创建有用于用户添加key/value(键/值)存储形式的自定义属性接口,以及校验属性的接口,通过自定义属性接口,方便用于自定义给插件API添加属性,便于用户后续能够根据自定义添加的属性,进一步实现插件API的精确查找。
可选地,在上述一种安全加载插件的实现方法第一个可选实施例的基础上,本发明实施例提供的一种安全加载插件的实现方法的第二个可选实施例中,从插件API中派生出插件使用者的实现之后,包括:对所述实现定义一变量,并使用插件API的名称作为变量的符号,然后将定义的变量导出。
基于待加载的插件API的名称和版本号,遍历目录中的动态链接库,查找到相应的插件API并加载,若未查找得到,则结束,具体步骤包括:
遍历目录中的所有文件,依次读取出目录中的动态链接库,得到插件API,然后判断插件API中是否存在与待加载的插件API名称相同的符号、判断插件API的名称是否与待加载的插件API的名称一致、判断插件API的版本号是否与待加载插件API的版本号一致、判断插件API中是否存在用户添加的自定义属性,当判断结果均为是时,则加载当前插件API,并进行使用,当判断结果至少有一个为否时,则结束。
本发明实施例提供的一种安全加载插件的实现系统,包括定义模块、生成模块、编译模块和加载模块。
定义模块用于在插件API中定义名称以及插件API当前的版本号;生成模块用于从插件API中派生出插件使用者的实现;编译模块用于将所述生成模块派生的实现编译为动态链接库,并存储至指定的目录中;加载模块用于基于待加载的插件API的名称和版本号,遍历所述目录中的动态链接库,查找到相应的插件API并加载,若未查找得到,则结束。
每个插件API的名称唯一,通过给插件API定义名称和版本号,后续进行插件API的加载时,保证所查找到的插件API为待加载的插件API,避免插件类型和版本不匹配。
插件实现即为该插件API所要实现的功能,基于插件使用者的需求进行派生,例如实现性能管理、安全管理等功能。每个插件API对应一定的应用功能,相应的,插件API中定义了对应该插件API实现的具体应用接口。
本发明实施例的安全加载插件的实现系统,通过给插件API定义名称和版本号,在进行插件API查找时,基于插件API的名称和版本号进行查找,有效保证所加载插件API的类型和版本与待加载的插件API相匹配,避免由于插件类型不匹配或版本不匹配而给程序的正常运行带来问题,同时通过目录方式对所有的插件API进行存储,方便后续对于插件API的管理和维护。
可选地,在上述一种安全加载插件的实现系统对应实施例的基础上,本发明实施例提供的一种安全加载插件的实现系统的第一个可选实施例中,插件API中还定义有GetName静态方法和GetVersion静态方法,所述GetName静态方法用于获取插件API的名称,所述GetVersion静态方法用于获取插件API的版本号。
定义模块还用于在插件API的基类中创建用于用户添加key/value存储形式的自定义属性接口,以及校验属性的接口。通过自定义属性接口,方便用于自定义给插件API添加属性,便于用户后续能够根据自定义添加的属性,进一步实现插件API的精确查找。同时,生成模块还用于对所述实现定义一变量,并使用插件API的名称作为变量的符号,然后将定义的变量导出。
加载模块基于待加载的插件API的名称和版本号,遍历所述目录中的动态链接库,查找到相应的插件API并加载,若未查找得到,则结束,具体过程包括:
遍历目录中的所有文件,依次读取出目录中的动态链接库,得到插件API,然后判断插件API中是否存在与待加载插件API名称相同的符号、判断插件API的名称是否与待加载插件API的名称一致、判断插件API的版本号是否与待加载插件API的版本号一致、判断插件API中是否存在用户添加的自定义属性,当判断结果均为是时,则加载当前插件API,当判断结果至少有一个为否时,则结束。
本发明是参照根据本发明实施例的方法、设备(系统)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

Claims (10)

1.一种安全加载插件的实现方法,其特征在于,包括以下步骤:
在插件API中定义名称以及插件API当前的版本号;
从插件API中派生出插件使用者的实现;
将所述实现编译为动态链接库,存储至指定的目录中;
基于待加载的插件API的名称和版本号,遍历所述目录中的动态链接库,查找到相应的插件API并加载,若未查找得到,则结束。
2.如权利要求1所述的一种安全加载插件的实现方法,其特征在于:所述插件API中还定义有GetName静态方法和GetVersion静态方法,所述GetName静态方法用于获取插件API的名称,所述GetVersion静态方法用于获取插件API的版本号。
3.如权利要求1所述的一种安全加载插件的实现方法,其特征在于:所述插件API的基类中还创建有用于用户添加key/value存储形式的自定义属性接口,以及校验属性的接口。
4.如权利要求3所述的一种安全加载插件的实现方法,其特征在于,所述从插件API中派生出插件使用者的实现之后,包括:对所述实现定义一变量,并使用插件API的名称作为变量的符号,然后将定义的变量导出。
5.如权利要求4所述的一种安全加载插件的实现方法,其特征在于,所述基于待加载的插件API的名称和版本号,遍历所述目录中的动态链接库,查找到相应的插件API并加载,若未查找得到,则结束,具体步骤包括:
遍历目录中的所有文件,依次读取出目录中的动态链接库,得到插件API,然后判断插件API中是否存在与待加载的插件API名称相同的符号、判断插件API的名称是否与待加载的插件API的名称一致、判断插件API的版本号是否与待加载插件API的版本号一致、判断插件API中是否存在用户添加的自定义属性,当判断结果均为是时,则加载当前插件API,当判断结果至少有一个为否时,则结束。
6.一种安全加载插件的实现系统,其特征在于,包括:
定义模块,其用于在插件API中定义名称以及插件API当前的版本号;
生成模块,其用于从插件API中派生出插件使用者的实现;
编译模块,其用于将所述生成模块派生的实现编译为动态链接库,并存储至指定的目录中;
加载模块,其用于基于待加载的插件API的名称和版本号,遍历所述目录中的动态链接库,查找到相应的插件API并加载,若未查找得到,则结束。
7.如权利要求6所述的一种安全加载插件的实现系统,其特征在于,所述插件API中还定义有GetName静态方法和GetVersion静态方法,所述GetName静态方法用于获取插件API的名称,所述GetVersion静态方法用于获取插件API的版本号。
8.如权利要求6所述的一种安全加载插件的实现系统,其特征在于,所述定义模块还用于在插件API的基类中创建用于用户添加key/value存储形式的自定义属性接口,以及校验属性的接口。
9.如权利要求8所述的一种安全加载插件的实现系统,其特征在于:所述生成模块还用于对所述实现定义一变量,并使用插件API的名称作为变量的符号,然后将定义的变量导出。
10.如权利要求9所述的一种安全加载插件的实现系统,其特征在于:所述加载模块基于待加载的插件API的名称和版本号,遍历所述目录中的动态链接库,查找到相应的插件API并加载,若未查找得到,则结束,具体过程包括:
遍历目录中的所有文件,依次读取出目录中的动态链接库,得到插件API,然后判断插件API中是否存在与待加载插件API名称相同的符号、判断插件API的名称是否与待加载插件API的名称一致、判断插件API的版本号是否与待加载插件API的版本号一致、判断插件API中是否存在用户添加的自定义属性,当判断结果均为是时,则加载当前插件API,当判断结果至少有一个为否时,则结束。
CN201910365267.3A 2019-04-30 2019-04-30 一种安全加载插件的实现方法及系统 Pending CN111857860A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910365267.3A CN111857860A (zh) 2019-04-30 2019-04-30 一种安全加载插件的实现方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910365267.3A CN111857860A (zh) 2019-04-30 2019-04-30 一种安全加载插件的实现方法及系统

Publications (1)

Publication Number Publication Date
CN111857860A true CN111857860A (zh) 2020-10-30

Family

ID=72966725

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910365267.3A Pending CN111857860A (zh) 2019-04-30 2019-04-30 一种安全加载插件的实现方法及系统

Country Status (1)

Country Link
CN (1) CN111857860A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112764797A (zh) * 2021-01-06 2021-05-07 浙江大华技术股份有限公司 软件兼容性检测方法、装置、电子装置和存储介质
CN113377429A (zh) * 2021-07-06 2021-09-10 北京字节跳动网络技术有限公司 安卓应用的运行方法及设备
CN113656090A (zh) * 2021-07-27 2021-11-16 北京明略软件系统有限公司 Api调用增强方法、系统、存储介质及电子设备
CN114780173A (zh) * 2022-01-25 2022-07-22 统信软件技术有限公司 一种在应用中加载插件的方法、计算设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102141922A (zh) * 2010-01-29 2011-08-03 腾讯科技(深圳)有限公司 一种微内核插件化程序应用系统及其实现方法
CN104424002A (zh) * 2013-09-10 2015-03-18 中国科学院声学研究所 一种基于插件机制的动态加载组件方法和系统

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102141922A (zh) * 2010-01-29 2011-08-03 腾讯科技(深圳)有限公司 一种微内核插件化程序应用系统及其实现方法
CN104424002A (zh) * 2013-09-10 2015-03-18 中国科学院声学研究所 一种基于插件机制的动态加载组件方法和系统

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112764797A (zh) * 2021-01-06 2021-05-07 浙江大华技术股份有限公司 软件兼容性检测方法、装置、电子装置和存储介质
CN113377429A (zh) * 2021-07-06 2021-09-10 北京字节跳动网络技术有限公司 安卓应用的运行方法及设备
CN113656090A (zh) * 2021-07-27 2021-11-16 北京明略软件系统有限公司 Api调用增强方法、系统、存储介质及电子设备
CN114780173A (zh) * 2022-01-25 2022-07-22 统信软件技术有限公司 一种在应用中加载插件的方法、计算设备及存储介质
CN114780173B (zh) * 2022-01-25 2023-12-05 统信软件技术有限公司 一种在应用中加载插件的方法、计算设备及存储介质

Similar Documents

Publication Publication Date Title
CN111857860A (zh) 一种安全加载插件的实现方法及系统
CN110609693B (zh) 基于数据标准化的代码更新方法、装置及终端设备
CN108614702B (zh) 字节码优化方法及装置
CN110414261B (zh) 一种数据脱敏方法、装置、设备及可读存储介质
CN111309336B (zh) 分布式应用的部署方法及装置
CN104360920A (zh) 一种接口自动化测试方法及装置
CN111249736B (zh) 代码处理方法及装置
CN112269970A (zh) 一种脚本加密方法、装置、服务器及存储介质
CN110795091B (zh) 一种模块化路由解耦方法、存储介质、电子设备及系统
CN115408689A (zh) 一种重入漏洞的检测与修复方法、系统
CN113535141A (zh) 数据库操作代码的生成方法及装置
CN109032612B (zh) 混合型应用的接口调用方法、装置及计算机可读存储介质
CN113220568A (zh) Usim卡文件系统的测试方法、装置及介质
CN111625225A (zh) 一种程序指定数据输出方法和装置
CN116541847A (zh) 一种应用程序的安全检测方法及装置
CN116450194A (zh) 一种python安装包的生成方法、装置、电子设备及可读存储介质
CN113127005B (zh) 一种可执行文件生成的方法、装置以及计算机存储介质
CN106610899B (zh) 一种测试用例生成方法及装置
CN114417347A (zh) 应用程序的漏洞检测方法、装置、设备、存储介质和程序
CN112988225A (zh) 注解配置方法、装置、设备及存储介质
CN111736806A (zh) 控件注入方法、装置及终端设备
CN110231953B (zh) 一种app执行远程代码的方法及系统
CN112379918B (zh) 代码发布方法、装置、计算机设备和存储介质
CN108446122B (zh) 一种参数一致性验证方法及装置
CN114579135B (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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20201030