CN109388416A - 一种应用软件的插件化实现方法及*** - Google Patents
一种应用软件的插件化实现方法及*** Download PDFInfo
- Publication number
- CN109388416A CN109388416A CN201811151857.8A CN201811151857A CN109388416A CN 109388416 A CN109388416 A CN 109388416A CN 201811151857 A CN201811151857 A CN 201811151857A CN 109388416 A CN109388416 A CN 109388416A
- Authority
- CN
- China
- Prior art keywords
- plug
- unit
- application software
- information
- plugin
- 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
Classifications
-
- 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
-
- 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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种应用软件的插件化实现方法及***,包括:生成应用软件的插件;当所述应用软件启动时,根据插件操作指示和所述插件的基本信息更新插件信息库;根据所述插件信息库的所述插件的基本信息加载对应的所述插件,得到运行的所述插件;将运行的所述插件与所述应用软件的菜单栏建立对应关系;从所述菜单栏接收用户对运行的所述插件的操作信息,并发送至对应的所述插件。本发明通过插件化实现方法,可以提高软件开发的效率和开发质量,降低发布成本。
Description
技术领域
本发明涉及应用软件开发技术领域,尤指一种应用软件的插件化实现方法及***。
背景技术
随着桌面应用软件在多个项目中应用,不同项目的需求也越来越多,应用软件的代码规模也越来越大,开发维护人员也随之增多。针对用户提出新的需求,需要软件开发人员在较短的时间内快速响应,发布新版本。软件发布也需要软件测试人员对新功能做测试,同时也需要对软件的全部功能做影响测试。每一次应用软件发布,都需要重新编译、链接代码、发布、测试,增加了工作量,降低了效率。
现有实现方案是,软件整体所有代码都在一起,应用程序只有一个代码工程,所有软件开发人员、开发团队都在该工程中并行开发,代码依赖和耦合度高,多人、多团队开发,软件开发协作效率低。
发明内容
本发明的目的是提供一种应用软件的插件化实现方法及***,通过采用插件化实现方法,解决现有软件开发过程中代码依赖和耦合度高、多人协作开发效率低,且版本发布测试工作量大的问题。
本发明提供的技术方案如下:
一种应用软件的插件化实现方法,包括:生成应用软件的插件;当所述应用软件启动时,根据插件操作指示和所述插件的基本信息更新插件信息库;根据所述插件信息库的所述插件的基本信息加载对应的所述插件,得到运行的所述插件;将运行的所述插件与所述应用软件的菜单栏建立对应关系;从所述菜单栏接收用户对运行的所述插件的操作信息,并发送至对应的所述插件。
在上述技术方案中,将应用软件的一些业务功能插件化,由插件提供相应的业务功能,每次插件的更新不改变应用软件的主体程序,所引入的测试工作量主要集中在插件上,通过该方法解决了现有软件开发过程中的代码依赖和耦合度高、多人协作开发效率低,以及版本发布测试工作量大的问题。
进一步优选的,所述生成应用软件的插件包括:集成插件应用程序接口,建立所述插件的代码工程;建立所述插件的基本信息,并内置于所述插件的实现体内;对所述插件的代码工程进行编译链接,生成所述插件。
进一步优选的,所述插件的基本信息包括标识号、名称、版本号、依赖关系、安装位置。
在上述技术方案中,每个插件有独立的代码工程,插件是通过标准的插件API接口与应用软件的主体程序进行交互,所以插件的更新对应用软件的主体程序影响很小,这有利于提高软件的开发效率和开发质量。
进一步优选的,所述根据插件操作指示和所述插件的基本信息更新插件信息库包括:当所述插件操作指示为安装插件时,将未安装的所述插件的基本信息写入到所述插件信息库,并将所述插件存放到指定的所述插件的安装位置。
在上述技术方案中,提供了一种插件安装方法,便于应用软件在运行过程中动态安装插件。
进一步优选的,所述根据插件操作指示和所述插件的基本信息更新插件信息库还包括:当所述插件操作指示为卸载插件时,检查所述插件是否在运行;当所述插件正在运行时,通知所述插件停止运行;当所述插件不在运行时,从所述插件信息库中删除所述插件的基本信息,同时删除所述插件的安装位置的所述插件。
在上述技术方案中,提供了一种插件卸载方法,便于应用软件在运行过程中动态卸载插件。
进一步优选的,所述根据插件操作指示和所述插件的基本信息更新插件信息库还包括:当所述插件操作指示为升级插件时,检查所述插件是否在运行;当所述插件正在运行时,通知所述插件停止运行;当所述插件不在运行时,更新所述插件的安装位置的所述插件;当检查所述插件信息库的所述插件的版本号与所述插件的安装位置的所述插件自带的版本号不一致时,将所述插件的基本信息更新到所述插件信息库。
在上述技术方案中,提供了一种插件升级方法,便于应用软件在运行过程中动态升级插件。
进一步优选的,所述根据所述插件信息库的所述插件的基本信息加载对应的所述插件包括:根据所述插件信息库的所述插件的基本信息,得到所述插件的启动策略;根据所述插件的启动策略启动所述插件,并由所述插件完成所述插件需要的基本配置的初始化。
进一步优选的,所述根据所述插件的启动策略启动所述插件包括:当所述插件的启动对其他插件有依赖关系时,根据所述插件的依赖关系,按照依赖顺序加载其他插件。
在上述技术方案中,提供了一种插件加载方法,便于应用软件在运行过程中动态加载插件。
本发明还提供一种应用软件的插件化实现***,包括:插件生成模块,用于生成应用软件的插件;插件管理模块,用于当所述应用软件启动时,根据插件操作指示和所述插件的基本信息更新插件信息库;插件加载模块,用于根据所述插件信息库的所述插件的基本信息加载对应的所述插件,得到运行的所述插件;交互模块,用于将运行的所述插件与所述应用软件的菜单栏建立对应关系;以及,从所述菜单栏接收用户对运行的所述插件的操作信息,并发送至对应的所述插件。
在上述技术方案中,将应用软件的一些业务功能插件化,由插件提供相应的业务功能,每次插件的更新不改变应用软件的主体程序,所引入的测试工作量主要集中在插件上,通过该方法解决了现有软件开发过程中的代码依赖和耦合度高、多人协作开发效率低,以及版本发布测试工作量大的问题。
进一步优选的,所述插件生成模块,集成插件应用程序接口,建立所述插件的代码工程;以及,建立所述插件的基本信息,并内置于所述插件的实现体内;以及,对所述插件的代码工程进行编译链接,形成所述插件。
在上述技术方案中,每个插件有独立的代码工程,插件是通过标准的插件API接口与应用软件的主体程序进行交互,所以插件的更新对应用软件的主体程序影响很小,这有利于提高软件的开发效率和开发质量。
进一步优选的,所述插件管理模块包括:安装单元,用于当所述插件操作指示为安装插件时,将未安装的所述插件的基本信息写入到所述插件信息库,并将所述插件存放到指定的所述插件的安装位置。
在上述技术方案中,提供了一种插件安装方法,便于应用软件在运行过程中动态安装插件。
进一步优选的,所述插件管理模块还包括:卸载单元,用于当所述插件操作指示为卸载插件时,检查所述插件是否在运行;所述交互模块,用于当所述插件正在运行时,通知所述插件停止运行;所述卸载单元,进一步用于当所述插件不在运行时,从所述插件信息库中删除所述插件的基本信息,同时删除所述插件的安装位置的所述插件。
在上述技术方案中,提供了一种插件卸载方法,便于应用软件在运行过程中动态卸载插件。
进一步优选的,所述插件管理模块还包括:升级单元,用于当所述插件操作指示为升级插件时,检查所述插件是否在运行;所述交互模块,用于当所述插件正在运行时,通知所述插件停止运行;所述升级单元,进一步用于当所述插件不在运行时,更新所述插件的安装位置的所述插件;以及,当检查所述插件信息库的所述插件的版本号与所述插件的安装位置的所述插件自带的版本号不一致时,将所述插件的基本信息更新到所述插件信息库。
在上述技术方案中,提供了一种插件升级方法,便于应用软件在运行过程中动态升级插件。
进一步优选的,所述插件加载模块,用于根据所述插件信息库的所述插件的基本信息,得到所述插件的启动策略;以及,根据所述插件的启动策略启动所述插件,并由所述插件完成所述插件需要的基本配置的初始化。
进一步优选的,所述插件加载模块,用于当所述插件的启动对其他插件有依赖关系时,根据所述插件的依赖关系,按照依赖顺序加载其他插件。
在上述技术方案中,提供了一种插件加载方法,便于应用软件在运行过程中动态加载插件。
通过本发明提供的一种应用软件的插件化实现方法及***,能够带来以下有益效果:通过将应用软件的一些业务功能插件化,由插件提供相应的业务功能,当需要新增、修改或者删除应用软件的某项功能时,不需要对全部应用软件做必要的修改,比如:若要添加某项功能,仅仅需要增加对应的插件;若想要更新某项功能,仅仅需要升级对应的插件。这样做将会大大提高应用软件的开发效率及开发质量,且将每一次修改的影响范围降到最低,为版本的发布带来很多便利。
附图说明
下面将以明确易懂的方式,结合附图说明优选实施方式,对一种应用软件的插件化实现方法及终端的上述特性、技术特征、优点及其实现方式予以进一步优选的说明。
图1本发明的一种应用软件的插件化实现方法的一个实施例的流程图;
图2是本发明的一种应用软件的插件化实现方法的另一个实施例的流程图;
图3是本发明的一种应用软件的插件化实现方法的另一个实施例的流程图;
图4是本发明的一种应用软件的插件化实现方法的另一个实施例的流程图;
图5是本发明的一种应用软件的插件化实现***的一个实施例的结构示意图;
图6是本发明的一种应用软件的插件化实现***的另一个实施例的结构示意图;
图7是本发明的一种应用软件的插件化实现***的另一个实施例的结构示意图;
图8是本发明的一种应用软件的插件化实现***的另一个实施例的结构示意图。
附图标号说明:
100.插件生成模块,200.插件管理模块,210.安装单元,220.卸载单元,230.升级单元,300.插件加载模块,400.交互模块。
具体实施方式
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对照附图说明本发明的具体实施方式。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,并获得其他的实施方式。
为使图面简洁,各图中只示意性地表示出了与本发明相关的部分,它们并不代表其作为产品的实际结构。另外,以使图面简洁便于理解,在有些图中具有相同结构或功能的部件,仅示意性地绘示了其中的一个,或仅标出了其中的一个。在本文中,″一个″不仅表示″仅此一个″,也可以表示″多于一个″的情形。
在本发明的一个实施例中,如图1所示,一种应用软件的插件化实现方法,包括:
步骤S100生成应用软件的插件;
具体的,插件是一种遵循应用程序接口(API,Application ProgrammingInterface)编写出来的程序,其只能运行在程序规定的***平台下。应用程序不需要依赖插件就可以运行,插件可以加载到应用程序上并且动态更新而不会对应用程序造成任何改变。
将应用软件的部分业务功能做成插件,由该插件提供对应的功能。应用软件主要指桌面应用软件,本实施例提供的方法也可以应用于手机应用软件。桌面应用软件,指运行于Windows、Linux、iOS平台上的应用程序。
步骤S200当所述应用软件启动时,根据插件操作指示和所述插件的基本信息更新插件信息库;
具体的,插件操作指示包括插件的安装、升级等。插件的基本信息包括插件的标识号、版本号、安装位置等。在应用软件启动运行过程中,可以选择安装新的插件,当插件操作指示为安装插件时,将该新插件的基本信息写入到插件信息库,至此,该新插件进入已安装状态,后续通过插件信息库可以获取该插件的基本信息。在应用软件启动运行过程中,可以选择升级已安装的插件,当插件操作指示为升级插件时,将该插件新版本的基本信息写入到插件信息库,后续通过插件信息库就可以获取该插件新的基本信息。
步骤S300根据所述插件信息库的所述插件的基本信息加载对应的所述插件,得到运行的所述插件;
具体的,从插件信息库获取插件的基本信息,从插件的基本信息中获取插件的安装位置。加载对应的插件是指启动所述安装位置的插件的运行。
步骤S400将运行的所述插件与所述应用软件的菜单栏建立对应关系;
步骤S500从所述菜单栏接收用户对运行的所述插件的操作信息,并发送至对应的所述插件。
具体的,将运行的插件与应用软件的某个菜单栏对应,这样,用户可以通过该菜单栏输入相关信息,使用插件所提供的功能。比如,一个计算投资收益的插件,只要用户输入投资金额,就立即呈现对应的投资收益;当该插件运行后,用户通过与该插件相关联的菜单栏输入投资金额,应用软件将该操作信息发送给该插件,该插件呈现对应的投资收益。
本实施例提供了一种将应用软件的部分业务功能插件化的方法,该方法可以使整个应用软件结构清晰、易修改、可维护性强。应用软件的插件可以是多个,根据业务需要而定,各个插件间是独立的。由于每个插件的生成方法是类似的,应用程序提供给插件的各项服务,比如安装、加载、升级,也是类似的,所以虽然本实施例是针对单个插件,但同样也适用于多插件场景,后续不再重述。
在本发明的另一个实施例中,如图2所示,一种应用软件的插件化实现方法,包括:
步骤S110集成插件应用程序接口,建立所述插件的代码工程;
步骤S120建立所述插件的基本信息,并内置于所述插件的实现体内;
所述插件的基本信息包括标识号、名称、版本号、依赖关系、安装位置;
步骤S130对所述插件的代码工程进行编译链接,形成所述插件;
具体的,插件是一个独立的代码工程,集成了插件API。插件和应用软件之间通过插件API进行交互。
为插件指定一个全局唯一的标识号,即插件ID号,该插件ID号是对插件的唯一识别标志;根据插件的功能作用,对插件进行分组,设定插件所属的分组;根据插件加载时与其他插件的关系确定插件依赖关系;如此,建立插件的基本信息:插件ID、插件名称、插件版本号、插件描述说明、插件依赖关系、插件分组、插件安装位置。将插件的基本信息内置于插件的代码实现体内。对插件的代码工程进行编译链接,形成一个可运行的文件,即得到插件。
步骤S210当所述应用软件启动时,且所述插件操作指示为安装插件时,将未安装的所述插件的基本信息写入到所述插件信息库,并将所述插件存放到指定的所述插件的安装位置;
具体的,一般新开发的插件是未安装的插件,其尚未安装到应用软件中,所以插件信息库中还没有该新插件的信息。当插件操作指示为安装该新插件时,将该新插件的基本信息写入到插件信息库,并将该新插件的运行文件拷贝到指定的安装位置,至此,该新插件的状态变成已安装,后续就可以从插件信息库找到该插件的基本信息和运行文件。
步骤S310根据所述插件信息库的所述插件的基本信息,得到所述插件的启动策略;
步骤S320根据所述插件的启动策略启动所述插件,并由所述插件完成所述插件需要的基本配置的初始化;
具体的,从插件信息库获取插件的基本信息,从插件的基本信息获取依赖关系,根据该依赖关系获得该插件加载时与其他插件加载的顺序关系,由此得到该插件的启动策略。比如,插件A的启动策略为插件A的加载不依赖其他插件,根据该启动策略可以随时启动插件A的运行,在插件A的启动过程中由插件A完成初始化。有些插件可能存在配置信息,比如,插件B是访问某个数据库的,数据库的IP地址、端口号、数据库的库名,不是直接写入代码中,而是做为插件B的配置信息;在插件B的启动过程中,由插件B完成这些配置信息的初始化。
步骤S400将运行的所述插件与所述应用软件的菜单栏建立对应关系;
步骤S500从所述菜单栏接收用户对运行的所述插件的操作信息,并发送至对应的所述插件。
具体的,本实施例提供了从插件的生成、插件的安装、插件的加载,到插件的功能运行的一个具体的完整例子。
在本发明的另一个实施例中,如图3所示,一种应用软件的插件化实现方法,包括:
步骤S110集成插件应用程序接口,建立所述插件的代码工程;
步骤S120建立所述插件的基本信息,并内置于所述插件的实现体内;
步骤S130对所述插件的代码工程进行编译链接,形成所述插件;
步骤S210当所述应用软件启动时,且所述插件操作指示为安装插件时,将未安装的所述插件的基本信息写入到所述插件信息库,并将所述插件存放到指定的所述插件的安装位置;
步骤S310根据所述插件信息库的所述插件的基本信息,得到所述插件的启动策略;
步骤S320根据所述插件的启动策略启动所述插件,并由所述插件完成所述插件需要的基本配置的初始化;
具体的,通过以上步骤,建立一个新插件,并完成该插件的安装和加载,启动插件运行。
步骤S220当所述插件操作指示为卸载插件时,检查所述插件是否在运行;
步骤S230当所述插件正在运行时,通知所述插件停止运行;
步骤S240当所述插件不在运行时,从所述插件信息库中删除所述插件的基本信息,同时删除所述插件的安装位置的所述插件。
具体的,后又对该插件实施卸载。当插件操作指示为卸载插件时,先检查该插件是否在运行。该插件在运行,所说先通知该插件停止运行。插件运行结束关闭后,从插件信息库获取该插件的安装位置,删除存放于该安装位置的插件运行文件,再删除插件信息库中该插件的基本信息。如果卸载插件的操作指示发生在插件安装后和插件加载之前,则检查到该插件不在运行,所以可直接卸载该插件。如果卸载插件的操作指示发生在插件安装前,因插件尚未安装,所以也就不存在卸载一说,该操作指示为无效操作指示。
本实施例提供了一种动态卸载插件的功能。
在本发明的另一个实施例中,如图4所示,一种应用软件的插件化实现方法,包括:
步骤S110集成插件应用程序接口,建立所述插件的代码工程;
步骤S120建立所述插件的基本信息,并内置于所述插件的实现体内;
步骤S130对所述插件的代码工程进行编译链接,形成所述插件;
步骤S210当所述应用软件启动时,且所述插件操作指示为安装插件时,将未安装的所述插件的基本信息写入到所述插件信息库,并将所述插件存放到指定的所述插件的安装位置;
具体的,通过以上步骤,建立一个新插件,并完成该插件的安装。
步骤S310根据所述插件信息库的所述插件的基本信息,得到所述插件的启动策略;
步骤S321当所述插件的启动对其他插件有依赖关系时,根据所述插件的依赖关系,按照依赖顺序加载其他插件,并由所述插件完成所述插件需要的基本配置的初始化;
具体的,当插件的启动依赖其他插件的加载时,需按照依赖关系来加载插件。比如,插件A的启动策略为插件A的加载需要在插件B的加载之后,根据该启动策略需要先加载插件B,再启动插件A的运行,在插件A的启动过程中由插件A完成初始化。
步骤S400将运行的所述插件与所述应用软件的菜单栏建立对应关系;
步骤S500从所述菜单栏接收用户对运行的所述插件的操作信息,并发送至对应的所述插件;
步骤S250当所述插件操作指示为升级插件时,检查所述插件是否在运行;
步骤S260当所述插件正在运行时,通知所述插件停止运行;
步骤S270当所述插件不在运行时,更新所述插件的安装位置的所述插件;
步骤S280当检查所述插件信息库的所述插件的版本号与所述插件的安装位置的所述插件自带的版本号不一致时,将所述插件的基本信息更新到所述插件信息库。
具体的,当插件操作指示为升级插件时,先检查插件是否在运行。如果在运行,则通知该插件停止运行。当该插件不在运行时,用新版本的插件运行文件更新安装位置存放的老版本的插件运行文件;从插件信息库中获取插件的版本号,从安装位置存放的插件运行文件中获取插件自带的版本号,如果两者不一致,用后者更新前者。
如果升级插件的操作指示发生在该插件加载之前,则插件不在运行,可以直接升级插件,即更新插件运行文件和插件信息库中的信息。如果升级插件的操作指示发生在该插件安装之前,因插件未安装所以也无升级一说,则该操作指示为无效操作。
本实施例提供了一种动态升级插件的功能。在插件运行后,还可以对运行的插件进行停止运行、暂停运行、恢复运行等操作,以方便开发人员对插件功能的测试。
在本发明的另一个实施例中,如图5所示,一种应用软件的插件化实现***,包括:
插件生成模块100,用于生成应用软件的插件;
具体的,插件是一种遵循应用程序接口(API,Application ProgrammingInterface)编写出来的程序,其只能运行在程序规定的***平台下。应用程序不需要依赖插件就可以运行,插件可以加载到应用程序上并且动态更新而不会对应用程序造成任何改变。
将应用软件的部分业务功能做成插件,由该插件提供对应的功能。应用软件主要指桌面应用软件,本实施例提供的方法也可以应用于手机应用软件。桌面应用软件,指运行于Windows、Linux、iOS平台上的应用程序。
插件管理模块200,用于当所述应用软件启动时,根据插件操作指示和所述插件的基本信息更新插件信息库;
具体的,插件操作指示包括插件的安装、升级等。插件的基本信息包括插件的标识号、版本号、安装位置等。在应用软件启动运行过程中,可以选择安装新的插件,当插件操作指示为安装插件时,将该新插件的基本信息写入到插件信息库,至此,该新插件进入已安装状态,后续通过插件信息库可以获取该插件的基本信息。在应用软件启动运行过程中,可以选择升级已安装的插件,当插件操作指示为升级插件时,将该插件新版本的基本信息写入到插件信息库,后续通过插件信息库就可以获取该插件新的基本信息。
插件加载模块300,用于根据所述插件信息库的所述插件的基本信息加载对应的所述插件,得到运行的所述插件;
具体的,从插件信息库获取插件的基本信息,从插件的基本信息中获取插件的安装位置。加载对应的插件是指启动所述安装位置的插件的运行。
交互模块400,用于将运行的所述插件与所述应用软件的菜单栏建立对应关系;以及,从所述菜单栏接收用户对运行的所述插件的操作信息,并发送至对应的所述插件。
具体的,将运行的插件与应用软件的某个菜单栏对应,这样,用户可以通过该菜单栏输入相关信息,使用插件所提供的功能。比如,一个计算投资收益的插件,只要用户输入投资金额,就立即呈现对应的投资收益;当该插件运行后,用户通过与该插件相关联的菜单栏输入投资金额,应用软件将该操作信息发送给该插件,该插件呈现对应的投资收益。
本实施例提供了一种将应用软件的部分业务功能插件化的方法,该方法可以使整个应用软件结构清晰、易修改、可维护性强。应用软件的插件可以是多个,根据业务需要而定,各个插件间是独立的。由于每个插件的生成方法是类似的,应用程序提供给插件的各项服务,比如安装、加载、升级,也是类似的,所以虽然本实施例是针对单个插件,但同样也适用于多插件场景,后续不再重述。
在本发明的另一个实施例中,如图6所示,一种应用软件的插件化实现***,包括:
插件生成模块100,集成插件应用程序接口,建立所述插件的代码工程;以及,建立所述插件的基本信息,并内置于所述插件的实现体内;以及,对所述插件的代码工程进行编译链接,形成所述插件;
所述插件的基本信息包括标识号、名称、版本号、依赖关系、安装位置;
具体的,插件是一个独立的代码工程,集成了插件API。插件和应用软件之间通过插件API进行交互。
为插件指定一个全局唯一的标识号,即插件ID号,该插件ID号是对插件的唯一识别标志;根据插件的功能作用,对插件进行分组,设定插件所属的分组;根据插件加载时与其他插件的关系确定插件依赖关系;如此,建立插件的基本信息:插件ID、插件名称、插件版本号、插件描述说明、插件依赖关系、插件分组、插件安装位置。将插件的基本信息内置于插件的代码实现体内。对插件的代码工程进行编译链接,形成一个可运行的文件,即得到插件。
插件管理模块200,用于当所述应用软件启动时,根据插件操作指示和所述插件的基本信息更新插件信息库;
插件管理模块200包括:
安装单元210,用于当所述插件操作指示为安装插件时,将未安装的所述插件的基本信息写入到所述插件信息库,并将所述插件存放到指定的所述插件的安装位置。
具体的,一般新开发的插件是未安装的插件,其尚未安装到应用软件中,所以插件信息库中还没有该新插件的信息。当插件操作指示为安装该新插件时,将该新插件的基本信息写入到插件信息库,并将该新插件的运行文件拷贝到指定的安装位置,至此,该新插件的状态变成已安装,后续就可以从插件信息库找到该插件的基本信息和运行文件。
插件加载模块300,用于根据所述插件信息库的所述插件的基本信息,得到所述插件的启动策略;以及,根据所述插件的启动策略启动所述插件,并由所述插件完成所述插件需要的基本配置的初始化。
具体的,从插件信息库获取插件的基本信息,从插件的基本信息获取依赖关系,根据该依赖关系获得该插件加载时与其他插件加载的顺序关系,由此得到该插件的启动策略。比如,插件A的启动策略为插件A的加载不依赖其他插件,根据该启动策略可以随时启动插件A的运行,在插件A的启动过程中由插件A完成初始化。有些插件可能存在配置信息,比如,插件B是访问某个数据库的,数据库的IP地址、端口号、数据库的库名,不是直接写入代码中,而是做为插件B的配置信息;在插件B的启动过程中,由插件B完成这些配置信息的初始化。
交互模块400,用于将运行的所述插件与所述应用软件的菜单栏建立对应关系;以及,从所述菜单栏接收用户对运行的所述插件的操作信息,并发送至对应的所述插件。
具体的,本实施例提供了从插件的生成、插件的安装、插件的加载,到插件的功能运行的一个具体的完整例子。
在本发明的另一个实施例中,如图7所示,一种应用软件的插件化实现***,包括:
插件生成模块100,集成插件应用程序接口,建立所述插件的代码工程;以及,建立所述插件的基本信息,并内置于所述插件的实现体内;以及,对所述插件的代码工程进行编译链接,形成所述插件;
所述插件的基本信息包括标识号、名称、版本号、依赖关系、安装位置;
插件管理模块200,用于当所述应用软件启动时,根据插件操作指示和所述插件的基本信息更新插件信息库;
插件管理模块200包括:
安装单元210,用于当所述插件操作指示为安装插件时,将未安装的所述插件的基本信息写入到所述插件信息库,并将所述插件存放到指定的所述插件的安装位置。
插件加载模块300,用于根据所述插件信息库的所述插件的基本信息,得到所述插件的启动策略;以及,根据所述插件的启动策略启动所述插件,并由所述插件完成所述插件需要的基本配置的初始化。
具体的,建立一个新插件,并完成该插件的安装和加载,启动插件运行。
插件管理模块200还包括:
卸载单元220,用于当所述插件操作指示为卸载插件时,检查所述插件是否在运行;
交互模块400,用于当所述插件正在运行时,通知所述插件停止运行;
所述卸载单元220,进一步用于当所述插件不在运行时,从所述插件信息库中删除所述插件的基本信息,同时删除所述插件的安装位置的所述插件;
具体的,后又对该插件实施卸载。当插件操作指示为卸载插件时,先检查该插件是否在运行。该插件在运行,所说先通知该插件停止运行。插件运行结束关闭后,从插件信息库获取该插件的安装位置,删除存放于该安装位置的插件运行文件,再删除插件信息库中该插件的基本信息。如果卸载插件的操作指示发生在插件安装后和插件加载之前,则检查到该插件不在运行,所以可直接卸载该插件。如果卸载插件的操作指示发生在插件安装前,因插件尚未安装,所以也就不存在卸载一说,该操作指示为无效操作指示。
本实施例提供了一种动态卸载插件的功能。
在本发明的另一个实施例中,如图8所示,一种应用软件的插件化实现***,包括:
插件生成模块100,集成插件应用程序接口,建立所述插件的代码工程;以及,建立所述插件的基本信息,并内置于所述插件的实现体内;以及,对所述插件的代码工程进行编译链接,形成所述插件;
所述插件的基本信息包括标识号、名称、版本号、依赖关系、安装位置;
插件管理模块200,用于当所述应用软件启动时,根据插件操作指示和所述插件的基本信息更新插件信息库;
插件管理模块200包括:
安装单元210,用于当所述插件操作指示为安装插件时,将未安装的所述插件的基本信息写入到所述插件信息库,并将所述插件存放到指定的所述插件的安装位置。
具体的,建立一个新插件,并完成该插件的安装。
插件加载模块300,用于根据所述插件信息库的所述插件的基本信息,得到所述插件的启动策略;以及,当所述插件的启动对其他插件有依赖关系时,根据所述插件的依赖关系,按照依赖顺序加载其他插件,并由所述插件完成所述插件需要的基本配置的初始化。
具体的,当插件的启动依赖其他插件的加载时,需按照依赖关系来加载插件。比如,插件A的启动策略为插件A的加载需要在插件B的加载之后,根据该启动策略需要先加载插件B,再启动插件A的运行,在插件A的启动过程中由插件A完成初始化。
交互模块400,用于将运行的所述插件与所述应用软件的菜单栏建立对应关系;以及,从所述菜单栏接收用户对运行的所述插件的操作信息,并发送至对应的所述插件;
所述插件管理模块200还包括:
升级单元230,用于当所述插件操作指示为升级插件时,检查所述插件是否在运行;
所述交互模块400,用于当所述插件正在运行时,通知所述插件停止运行;
所述升级单元230,进一步用于当所述插件不在运行时,更新所述插件的安装位置的所述插件;以及,当检查所述插件信息库的所述插件的版本号与所述插件的安装位置的所述插件自带的版本号不一致时,将所述插件的基本信息更新到所述插件信息库。
具体的,当插件操作指示为升级插件时,先检查插件是否在运行。如果在运行,则通知该插件停止运行。当该插件不在运行时,用新版本的插件运行文件更新安装位置存放的老版本的插件运行文件;从插件信息库中获取插件的版本号,从安装位置存放的插件运行文件中获取插件自带的版本号,如果两者不一致,用后者更新前者。
如果升级插件的操作指示发生在该插件加载之前,则插件不在运行,可以直接升级插件,即更新插件运行文件和插件信息库中的信息。如果升级插件的操作指示发生在该插件安装之前,因插件未安装所以也无升级一说,则该操作指示为无效操作。
本实施例提供了一种动态升级插件的功能。在插件运行后,还可以对运行的插件进行停止运行、暂停运行、恢复运行等操作,以方便开发人员对插件功能的测试。
应当说明的是,上述实施例均可根据需要自由组合。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (15)
1.一种应用软件的插件化实现方法,其特征在于,包括:
生成应用软件的插件;
当所述应用软件启动时,根据插件操作指示和所述插件的基本信息更新插件信息库;
根据所述插件信息库的所述插件的基本信息加载对应的所述插件,得到运行的所述插件;
将运行的所述插件与所述应用软件的菜单栏建立对应关系;
从所述菜单栏接收用户对运行的所述插件的操作信息,并发送至对应的所述插件。
2.根据权利要求1所述的应用软件的插件化实现方法,其特征在于,所述生成应用软件的插件包括:
集成插件应用程序接口,建立所述插件的代码工程;
建立所述插件的基本信息,并内置于所述插件的实现体内;
对所述插件的代码工程进行编译链接,生成所述插件。
3.根据权利要求2所述的应用软件的插件化实现方法,其特征在于:
所述插件的基本信息包括标识号、名称、版本号、依赖关系、安装位置。
4.根据权利要求1所述的应用软件的插件化实现方法,其特征在于,所述根据插件操作指示和所述插件的基本信息更新插件信息库包括:
当所述插件操作指示为安装插件时,将未安装的所述插件的基本信息写入到所述插件信息库,并将所述插件存放到指定的所述插件的安装位置。
5.根据权利要求1所述的应用软件的插件化实现方法,其特征在于,所述根据插件操作指示和所述插件的基本信息更新插件信息库还包括:
当所述插件操作指示为卸载插件时,检查所述插件是否在运行;
当所述插件正在运行时,通知所述插件停止运行;
当所述插件不在运行时,从所述插件信息库中删除所述插件的基本信息,同时删除所述插件的安装位置的所述插件。
6.根据权利要求1所述的应用软件的插件化实现方法,其特征在于,所述根据插件操作指示和所述插件的基本信息更新插件信息库还包括:
当所述插件操作指示为升级插件时,检查所述插件是否在运行;
当所述插件正在运行时,通知所述插件停止运行;
当所述插件不在运行时,更新所述插件的安装位置的所述插件;
当检查所述插件信息库的所述插件的版本号与所述插件的安装位置的所述插件自带的版本号不一致时,将所述插件的基本信息更新到所述插件信息库。
7.根据权利要求1所述的应用软件的插件化实现方法,其特征在于,所述根据所述插件信息库的所述插件的基本信息加载对应的所述插件包括:
根据所述插件信息库的所述插件的基本信息,得到所述插件的启动策略;
根据所述插件的启动策略启动所述插件,并由所述插件完成所述插件需要的基本配置的初始化。
8.根据权利要求7所述的应用软件的插件化实现方法,其特征在于,所述根据所述插件的启动策略启动所述插件包括:
当所述插件的启动对其他插件有依赖关系时,根据所述插件的依赖关系,按照依赖顺序加载其他插件。
9.一种应用软件的插件化实现***,其特征在于,包括:
插件生成模块,用于生成应用软件的插件;
插件管理模块,用于当所述应用软件启动时,根据插件操作指示和所述插件的基本信息更新插件信息库;
插件加载模块,用于根据所述插件信息库的所述插件的基本信息加载对应的所述插件,得到运行的所述插件;
交互模块,用于将运行的所述插件与所述应用软件的菜单栏建立对应关系;以及,从所述菜单栏接收用户对运行的所述插件的操作信息,并发送至对应的所述插件。
10.根据权利要求9所述的应用软件的插件化实现***,其特征在于:
所述插件生成模块,集成插件应用程序接口,建立所述插件的代码工程;以及,建立所述插件的基本信息,并内置于所述插件的实现体内;以及,对所述插件的代码工程进行编译链接,形成所述插件。
11.根据权利要求9所述的应用软件的插件化实现***,其特征在于,所述插件管理模块包括:
安装单元,用于当所述插件操作指示为安装插件时,将未安装的所述插件的基本信息写入到所述插件信息库,并将所述插件存放到指定的所述插件的安装位置。
12.根据权利要求9所述的应用软件的插件化实现***,其特征在于,所述插件管理模块还包括:
卸载单元,用于当所述插件操作指示为卸载插件时,检查所述插件是否在运行;
所述交互模块,用于当所述插件正在运行时,通知所述插件停止运行;
所述卸载单元,进一步用于当所述插件不在运行时,从所述插件信息库中删除所述插件的基本信息,同时删除所述插件的安装位置的所述插件。
13.根据权利要求9所述的应用软件的插件化实现***,其特征在于,所述插件管理模块还包括:
升级单元,用于当所述插件操作指示为升级插件时,检查所述插件是否在运行;
所述交互模块,用于当所述插件正在运行时,通知所述插件停止运行;
所述升级单元,进一步用于当所述插件不在运行时,更新所述插件的安装位置的所述插件;以及,当检查所述插件信息库的所述插件的版本号与所述插件的安装位置的所述插件自带的版本号不一致时,将所述插件的基本信息更新到所述插件信息库。
14.根据权利要求9所述的应用软件的插件化实现***,其特征在于:
所述插件加载模块,用于根据所述插件信息库的所述插件的基本信息,得到所述插件的启动策略;以及,根据所述插件的启动策略启动所述插件,并由所述插件完成所述插件需要的基本配置的初始化。
15.根据权利要求14所述的应用软件的插件化实现***,其特征在于:
所述插件加载模块,用于当所述插件的启动对其他插件有依赖关系时,根据所述插件的依赖关系,按照依赖顺序加载其他插件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811151857.8A CN109388416A (zh) | 2018-09-29 | 2018-09-29 | 一种应用软件的插件化实现方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811151857.8A CN109388416A (zh) | 2018-09-29 | 2018-09-29 | 一种应用软件的插件化实现方法及*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109388416A true CN109388416A (zh) | 2019-02-26 |
Family
ID=65418915
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811151857.8A Pending CN109388416A (zh) | 2018-09-29 | 2018-09-29 | 一种应用软件的插件化实现方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109388416A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110908918A (zh) * | 2019-11-29 | 2020-03-24 | 北京网聘咨询有限公司 | 针对多个相互依赖的node.js模块的单元测试方法及装置 |
CN111552524A (zh) * | 2020-05-06 | 2020-08-18 | Oppo(重庆)智能科技有限公司 | 一种插件加载方法、装置及计算机可读存储介质 |
CN114090124A (zh) * | 2021-11-23 | 2022-02-25 | 智器云南京信息科技有限公司 | 数据处理方法、装置、计算机设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103425468A (zh) * | 2012-05-17 | 2013-12-04 | 航天信息股份有限公司 | 插件式软件集成方法及装置 |
US20170068527A1 (en) * | 2015-09-09 | 2017-03-09 | Xiaomi Inc. | Device control method and apparatus |
CN107992308A (zh) * | 2017-11-22 | 2018-05-04 | 竞技世界(北京)网络技术有限公司 | 一种安卓终端应用程序的插件化管理方法 |
-
2018
- 2018-09-29 CN CN201811151857.8A patent/CN109388416A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103425468A (zh) * | 2012-05-17 | 2013-12-04 | 航天信息股份有限公司 | 插件式软件集成方法及装置 |
US20170068527A1 (en) * | 2015-09-09 | 2017-03-09 | Xiaomi Inc. | Device control method and apparatus |
CN107992308A (zh) * | 2017-11-22 | 2018-05-04 | 竞技世界(北京)网络技术有限公司 | 一种安卓终端应用程序的插件化管理方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110908918A (zh) * | 2019-11-29 | 2020-03-24 | 北京网聘咨询有限公司 | 针对多个相互依赖的node.js模块的单元测试方法及装置 |
CN111552524A (zh) * | 2020-05-06 | 2020-08-18 | Oppo(重庆)智能科技有限公司 | 一种插件加载方法、装置及计算机可读存储介质 |
CN111552524B (zh) * | 2020-05-06 | 2023-10-13 | Oppo(重庆)智能科技有限公司 | 一种插件加载方法、装置及计算机可读存储介质 |
CN114090124A (zh) * | 2021-11-23 | 2022-02-25 | 智器云南京信息科技有限公司 | 数据处理方法、装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102622241B (zh) | 一种软件升级方法及装置 | |
US8996349B2 (en) | Synchronizing an abstract model and source code | |
CN109388416A (zh) | 一种应用软件的插件化实现方法及*** | |
CN102147747B (zh) | 增强的升级路径的***和方法 | |
CN102073520A (zh) | 一种c++应用程序版本动态管理***和方法 | |
CN101950254B (zh) | 一种软件更新方法和*** | |
CN107769949A (zh) | 一种应用组件部署方法及部署节点 | |
EP1872215A1 (en) | Implementing data-compatibility-based version scheme | |
CN104834555A (zh) | 调用功能模块的方法、相关装置及装置修复方法 | |
CN105487907A (zh) | 一种差分包的制作方法和装置 | |
CN105068834A (zh) | ***升级方法及装置 | |
CN112835975B (zh) | 一种在区块链中部署、更新、调用智能合约的方法 | |
CN107239313A (zh) | Spring应用服务的升级方法和存储介质 | |
CN107220060A (zh) | 一种同时支持多个ota升级包升级的方法及*** | |
CN110502264A (zh) | ***升级方法、终端及可读存储介质 | |
CN109885332A (zh) | 画质芯片软件升级方法、装置、显示设备及存储介质 | |
CN108845800A (zh) | 一种组件扩展功能的实现方法、装置、设备及存储介质 | |
CN113268275B (zh) | 一种基于微内核的硬件设备驱动***及其驱动方法 | |
CN101493775A (zh) | 嵌入式***的动态加载***及其加载方法 | |
CN111683005B (zh) | 一种物联网智能网关设备及其构建方法 | |
CN106919391A (zh) | 面向智能手机的可定制操作***组件的嵌入式*** | |
CN105335432A (zh) | oracle数据库访问方法 | |
CN102023857A (zh) | 基于ServiceOS的多平台应用程序服务管理方法及*** | |
WO2024055757A1 (zh) | 驱动程序的硬件资源自动配置方法、装置、***及介质 | |
CN106293790A (zh) | 基于Firefox操作***的应用程序升级方法和装置 |
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: 20190226 |