








技术领域technical field
本公开涉及计算机技术领域,更具体地,涉及一种插件、应用程序实现方法及系统和计算机系统及存储介质。The present disclosure relates to the field of computer technology, and more particularly, to a method and system for implementing a plug-in, an application program, a computer system, and a storage medium.
背景技术Background technique
Android插件化技术目前比较成熟,通过插件化框架,动态地加载插件程序(简称插件),可以使应用程序的业务逻辑解耦,减少应用程序的方法数与资源消耗,减小应用程序的体积。Android plug-in technology is currently relatively mature. Through the plug-in framework, the plug-in program (referred to as plug-in) can be dynamically loaded, which can decouple the business logic of the application, reduce the number of methods and resource consumption of the application, and reduce the size of the application.
然而,在实现本公开实施例的过程中,发明人发现:现有的使用Android插件化技术的应用程序,多个插件可能公共依赖使用相同的类、C库和资源,各个插件内部也可能多次重复引用相同的类、C库和资源,通常情况下这些可能被公共依赖使用的或者重复引用的类、C库和资源都会被打包在应用程序的宿主程序(也称宿主工程)的公共库部分,但是如果宿主程序中的某些类、C库和资源完全没有被应用程序的任何插件引用,则这些类、C库和资源对宿主程序来说是冗余的。However, in the process of implementing the embodiments of the present disclosure, the inventor found that in the existing applications using the Android plug-in technology, multiple plug-ins may use the same classes, C libraries and resources in common dependencies, and there may be many internal plug-ins. Repeatedly refer to the same classes, C libraries and resources. Usually, these classes, C libraries and resources that may be used by public dependencies or repeatedly referenced will be packaged in the public library of the application's host program (also called the host project). Some classes, C libraries and resources in the host program are redundant to the host program if they are not referenced by any plug-ins of the application at all.
发明内容SUMMARY OF THE INVENTION
有鉴于此,本公开提供了一种插件、应用程序实现方法及系统和计算机系统及存储介质。In view of this, the present disclosure provides a plug-in, an application implementation method and system, a computer system and a storage medium.
本公开的一个方面提供了一种插件实现方法,包括:获取公共插件的源代码,其中,所述公共插件可被多个业务插件公共依赖使用,且所述多个业务插件中的至少两个和所述公共插件可用于实现目标应用程序并能够在实现所述目标应用程序时被所述目标应用程序的宿主程序加载;以及编译所述源代码并输出所述公共插件和对应的AAR包,其中,所述AAR包用于在编译所述多个业务插件时提供所述业务插件与所述公共插件的依赖关系。One aspect of the present disclosure provides a plug-in implementation method, comprising: obtaining source code of a common plug-in, wherein the common plug-in can be commonly used by multiple service plug-ins, and at least two of the multiple service plug-ins and the public plug-in can be used to realize the target application and can be loaded by the host program of the target application when the target application is realized; and compile the source code and output the public plug-in and the corresponding AAR package, Wherein, the AAR package is used to provide the dependency relationship between the service plug-in and the common plug-in when compiling the plurality of service plug-ins.
根据本公开的实施例,所述方法还包括:针对所述多个业务插件中的每个,获取对应的源代码;编译所述对应的源代码并输出对应的业务插件;以及在编译所述对应的源代码的过程中,基于所述AAR包在所述对应的业务插件的配置文件中加入所述依赖关系。According to an embodiment of the present disclosure, the method further includes: for each of the plurality of service plug-ins, obtaining a corresponding source code; compiling the corresponding source code and outputting the corresponding service plug-in; and compiling the corresponding service plug-in; In the process of the corresponding source code, the dependency is added to the configuration file of the corresponding service plug-in based on the AAR package.
根据本公开的实施例,所述公共插件也可被各个业务插件内部重复使用;所述方法还包括:针对插件内部需要重复使用所述所述公共插件的业务插件,在编译该业务插件的源代码的过程中,基于所述AAR包和所述公共插件被重复引用的次数,在该业务插件的配置文件中加入所述依赖关系。According to an embodiment of the present disclosure, the common plug-in can also be reused internally by each service plug-in; the method further includes: for a service plug-in that needs to reuse the public plug-in inside the plug-in, compiling the source of the service plug-in During the coding process, the dependency is added to the configuration file of the service plug-in based on the number of times the AAR package and the public plug-in are repeatedly referenced.
本公开的一个方面提供了一种应用程序实现方法,包括:获取用于实现所述应用程序的多个业务插件和公共插件,其中,所述公共插件可被所述多个业务插件中的至少两个公共依赖使用或者可被所述多个业务插件中的至少一个在插件内部重复使用;获取用于实现应用程序的宿主程序;利用所述宿主程序启动所述多个业务插件;以及在启动所述多个业务插件的过程中,按照预定加载逻辑加载所述公共插件。One aspect of the present disclosure provides an application implementation method, including: acquiring multiple service plug-ins and common plug-ins for implementing the application, wherein the common plug-in can be used by at least one of the multiple service plug-ins Two common dependencies are used or can be reused within the plug-in by at least one of the plurality of business plug-ins; obtain a host program for implementing the application; use the host program to start the plurality of business plug-ins; During the process of the multiple service plug-ins, the common plug-ins are loaded according to predetermined loading logic.
根据本公开的实施例,所述在启动所述多个业务插件的过程中,按照预定加载逻辑加载所述公共插件,包括:针对所述多个业务插件中的每个,在启动过程中,检查对应的业务插件与所述公共插件是否存在依赖关系;以及如果存在,则加载所述公共插件。According to an embodiment of the present disclosure, in the process of starting the plurality of service plug-ins, loading the common plug-in according to predetermined loading logic includes: for each of the plurality of service plug-ins, during the start-up process, Check whether the corresponding business plug-in has a dependency relationship with the public plug-in; and if so, load the public plug-in.
根据本公开的实施例,所述应用程序包括加载对象;所述方法还包括:通过业务插件的加载器加载所述加载对象;或者通过公共插件的加载器加载所述加载对象;或者通过宿主程序的加载器加载所述加载对象。According to an embodiment of the present disclosure, the application program includes a loading object; the method further includes: loading the loading object through a loader of a business plug-in; or loading the loading object through a loader of a public plug-in; or using a host program The loader loads the loader object.
根据本公开的实施例,所述加载对象包括以下至少之一:类、C库和资源。According to an embodiment of the present disclosure, the load object includes at least one of the following: a class, a C library, and a resource.
本公开的另一个方面提供了一种插件实现系统,包括:第一获取模块,用于获取公共插件的源代码,其中,所述公共插件可被多个业务插件公共依赖使用,且所述多个业务插件中的至少两个和所述公共插件可用于实现目标应用程序并能够在实现所述目标应用程序时被所述目标应用程序的宿主程序加载;以及第一编译模块,用于编译所述源代码并输出所述公共插件和对应的AAR包,其中,所述AAR包用于在编译所述多个业务插件时提供所述业务插件与所述公共插件的依赖关系。Another aspect of the present disclosure provides a plug-in implementation system, including: a first obtaining module, configured to obtain source code of a common plug-in, wherein the common plug-in can be commonly used by multiple service plug-ins, and the multiple service plug-ins At least two of the service plug-ins and the common plug-in can be used to implement the target application and can be loaded by the host program of the target application when the target application is implemented; and a first compiling module for compiling all the The source code is generated and the public plug-in and the corresponding AAR package are output, wherein the AAR package is used to provide the dependency relationship between the service plug-in and the public plug-in when compiling the plurality of service plug-ins.
根据本公开的实施例,所述系统还包括:第二获取模块,用于针对所述多个业务插件中的每个,获取对应的源代码;第二编译模块,用于编译所述对应的源代码并输出对应的业务插件;以及第一添加模块,用于在编译所述对应的源代码的过程中,基于所述AAR包在所述对应的业务插件的配置文件中加入所述依赖关系。According to an embodiment of the present disclosure, the system further includes: a second acquisition module for acquiring corresponding source codes for each of the plurality of service plug-ins; a second compilation module for compiling the corresponding source code source code and output the corresponding service plug-in; and a first adding module for adding the dependency in the configuration file of the corresponding service plug-in based on the AAR package in the process of compiling the corresponding source code .
根据本公开的实施例,所述公共插件也可被各个业务插件内部重复使用;所述系统还包括:第二添加模块,用于针对插件内部需要重复使用所述所述公共插件的业务插件,在编译该业务插件的源代码的过程中,基于所述AAR包和所述公共插件被重复引用的次数,在该业务插件的配置文件中加入所述依赖关系。According to an embodiment of the present disclosure, the common plug-in can also be reused internally by each service plug-in; the system further includes: a second adding module for reusing the public plug-in for the service plug-in that needs to reuse the public plug-in inside the plug-in, In the process of compiling the source code of the service plug-in, the dependency is added to the configuration file of the service plug-in based on the number of times the AAR package and the common plug-in are repeatedly referenced.
本公开的另一个方面提供了一种应用程序实现系统,包括:第三获取模块,用于获取用于实现所述应用程序的多个业务插件和公共插件,其中,所述公共插件可被所述多个业务插件中的至少两个公共依赖使用或者可被所述多个业务插件中的至少一个在插件内部重复使用;第四获取模块,用于获取用于实现应用程序的宿主程序;启动模块,用于利用所述宿主程序启动所述多个业务插件;以及第一加载模块,用于在启动所述多个业务插件的过程中,按照预定加载逻辑加载所述公共插件。Another aspect of the present disclosure provides an application implementation system, including: a third acquisition module, configured to acquire a plurality of service plug-ins and common plug-ins for implementing the application, wherein the common plug-in can be used by all At least two of the plurality of service plug-ins are used in public dependencies or can be reused by at least one of the plurality of service plug-ins inside the plug-in; the fourth acquisition module is used to obtain a host program for implementing the application; start a module for starting the multiple service plug-ins by using the host program; and a first loading module for loading the common plug-ins according to predetermined loading logic during the process of starting the multiple service plug-ins.
根据本公开的实施例,所述第一加载模块包括:检查单元,用于针对所述多个业务插件中的每个,在启动过程中,检查对应的业务插件与所述公共插件是否存在依赖关系;以及加载单元,用于在存在所述依赖关系的情况下,加载所述公共插件。According to an embodiment of the present disclosure, the first loading module includes: a checking unit, configured to, for each of the plurality of service plug-ins, check whether the corresponding service plug-in is dependent on the public plug-in during the startup process relationship; and a loading unit for loading the common plug-in if the dependency relationship exists.
根据本公开的实施例,所述应用程序包括加载对象;所述系统还包括第二加载模块,用于:通过业务插件的加载器加载所述加载对象;或者通过公共插件的加载器加载所述加载对象;或者通过宿主程序的加载器加载所述加载对象。According to an embodiment of the present disclosure, the application program includes a loading object; the system further includes a second loading module for: loading the loading object through a loader of a business plug-in; or loading the loading object through a loader of a public plug-in Load the object; or load the loaded object through the loader of the host program.
根据本公开的实施例,所述加载对象包括以下至少之一:类、C库和资源。According to an embodiment of the present disclosure, the load object includes at least one of the following: a class, a C library, and a resource.
本公开的另一方面提供了一种计算机系统,包括:一个或多个处理器;存储器,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如上所述的方法。Another aspect of the present disclosure provides a computer system including: one or more processors; a memory for storing one or more programs, wherein when the one or more programs are executed by the one or more programs The processor, when executed, causes the one or more processors to implement the method as described above.
本公开的另一方面提供了一种计算机可读存储介质,存储有计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。Another aspect of the present disclosure provides a computer-readable storage medium storing computer-executable instructions, which when executed, are used to implement the method as described above.
本公开的另一方面提供了一种计算机程序,所述计算机程序包括计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。Another aspect of the present disclosure provides a computer program comprising computer-executable instructions, which when executed, are used to implement the method as described above.
根据本公开的实施例,因为采用了将多个插件可能公共依赖使用的类、C库和资源从宿主程序中拆分出来,开发成独立的公共插件,并在应用程序的业务插件公共依赖某些公共插件时才进行加载,否则不加载的技术手段,所以至少部分地克服了相关技术中对于应用程序而言,不分业务插件和公共插件,只分插件和宿主程序,导致根本没有被应用程序中任何插件公共依赖使用的类、C库和资源,也被预先全部打包在宿主程序的公共库内,从而导致应用程序体积庞大,方法数众多、资源消耗严重等缺陷,进而达到了缩减应用程序的体积,减少应用程序的方法数和资源消耗的技术效果。According to the embodiments of the present disclosure, the classes, C libraries, and resources that may be commonly used by multiple plug-ins are separated from the host program, and developed into independent public plug-ins. It is a technical means to load only when some public plug-ins are loaded, otherwise it is not loaded, so it at least partially overcomes the related technology for applications, regardless of business plug-ins and public plug-ins, only plug-ins and host programs, resulting in no application at all. The classes, C libraries and resources that any plug-ins in the program rely on publicly are also prepackaged in the public library of the host program, resulting in a large application program, a large number of methods, and serious resource consumption. The size of the program, the technical effect of reducing the number of methods and resource consumption of the application.
附图说明Description of drawings
通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚,在附图中:The above and other objects, features and advantages of the present disclosure will become more apparent from the following description of embodiments of the present disclosure with reference to the accompanying drawings, in which:
图1示意性示出了可以应用本公开的插件、应用程序实现方法及系统的示例性系统架构;FIG. 1 schematically shows an exemplary system architecture to which the plug-in, application implementation method and system of the present disclosure can be applied;
图2示意性示出了根据本公开实施例的插件实现方法的流程图;FIG. 2 schematically shows a flowchart of a plug-in implementation method according to an embodiment of the present disclosure;
图3示意性示出了根据本公开实施例的插件实现原理图;FIG. 3 schematically shows a schematic diagram of a plug-in implementation according to an embodiment of the present disclosure;
图4示意性示出了根据本公开另一实施例的插件实现原理图;FIG. 4 schematically shows a schematic diagram of a plug-in implementation according to another embodiment of the present disclosure;
图5示意性示出了根据本公开实施例的应用程序实现方法的流程图;FIG. 5 schematically shows a flowchart of an application implementation method according to an embodiment of the present disclosure;
图6示意性示出了根据本公开实施例的运行应用程序的流程图;FIG. 6 schematically shows a flowchart of running an application according to an embodiment of the present disclosure;
图7示意性示出了根据本公开实施例的插件实现系统的框图;FIG. 7 schematically shows a block diagram of a plug-in implementation system according to an embodiment of the present disclosure;
图8示意性示出了根据本公开实施例的应用程序实现系统的框图;以及FIG. 8 schematically shows a block diagram of an application implementation system according to an embodiment of the present disclosure; and
图9示意性示出了根据本公开实施例的适于实现插件和应用程序的计算机系统的框图。9 schematically illustrates a block diagram of a computer system suitable for implementing plug-ins and applications in accordance with embodiments of the present disclosure.
具体实施方式Detailed ways
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。Hereinafter, embodiments of the present disclosure will be described with reference to the accompanying drawings. It should be understood, however, that these descriptions are exemplary only, and are not intended to limit the scope of the present disclosure. In the following detailed description, for convenience of explanation, numerous specific details are set forth in order to provide a thorough understanding of the embodiments of the present disclosure. It will be apparent, however, that one or more embodiments may be practiced without these specific details. Also, in the following description, descriptions of well-known structures and techniques are omitted to avoid unnecessarily obscuring the concepts of the present disclosure.
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。The terminology used herein is for the purpose of describing particular embodiments only and is not intended to limit the present disclosure. The terms "comprising", "comprising" and the like as used herein indicate the presence of stated features, steps, operations and/or components, but do not preclude the presence or addition of one or more other features, steps, operations or components.
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。All terms (including technical and scientific terms) used herein have the meaning as commonly understood by one of ordinary skill in the art, unless otherwise defined. It should be noted that terms used herein should be construed to have meanings consistent with the context of the present specification and should not be construed in an idealized or overly rigid manner.
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。在使用类似于“A、B或C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B或C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。Where expressions like "at least one of A, B, and C, etc.," are used, they should generally be interpreted in accordance with the meaning of the expression as commonly understood by those skilled in the art (eg, "has A, B, and C") At least one of the "systems" shall include, but not be limited to, systems with A alone, B alone, C alone, A and B, A and C, B and C, and/or A, B, C, etc. ). Where expressions like "at least one of A, B, or C, etc.," are used, they should generally be interpreted in accordance with the meaning of the expression as commonly understood by those skilled in the art (eg, "has A, B, or C, etc." At least one of the "systems" shall include, but not be limited to, systems with A alone, B alone, C alone, A and B, A and C, B and C, and/or A, B, C, etc. ).
本公开的实施例提供了一种能够减小应用程序体积、减少应用程序方法数和资源消耗、以及使应用程序的业务逻辑解耦的插件、应用程序实现方法以及能够应用该方法的插件、应用程序实现系统。该插件实现方法包括获取公共插件的源代码,其中,公共插件可被多个业务插件公共依赖使用,且多个业务插件中的至少两个和公共插件可用于实现目标应用程序并能够在实现目标应用程序时被目标应用程序的宿主程序加载;以及编译源代码并输出公共插件和对应的AAR包,其中,AAR包用于在编译多个业务插件时提供业务插件与公共插件的依赖关系。Embodiments of the present disclosure provide a plug-in, an application implementation method, and a plug-in and application capable of applying the method, which can reduce the volume of an application, reduce the number of methods and resource consumption of the application, and decouple the business logic of the application. Program implementation system. The plug-in implementation method includes obtaining source code of a common plug-in, wherein the common plug-in can be commonly used by multiple business plug-ins, and at least two of the multiple service plug-ins and the common plug-in can be used to implement a target application and can achieve the target application. The application is loaded by the host program of the target application; and the source code is compiled and the common plug-in and the corresponding AAR package are output, wherein the AAR package is used to provide the dependency between the service plug-in and the common plug-in when compiling multiple service plug-ins.
图1示意性示出了可以应用本公开的插件、应用程序实现方法及系统的示例性系统架构。需要注意的是,图1所示仅为可以应用本公开实施例的系统架构的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。FIG. 1 schematically shows an exemplary system architecture to which the plug-in, application implementation method and system of the present disclosure can be applied. It should be noted that FIG. 1 is only an example of a system architecture to which the embodiments of the present disclosure can be applied, so as to help those skilled in the art to understand the technical content of the present disclosure, but it does not mean that the embodiments of the present disclosure cannot be used for other A device, system, environment or scene.
如图1所示,根据该实施例的系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线和/或无线通信链路等等。As shown in FIG. 1 , the
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端和/或社交平台软件等(仅为示例)。The user can use the
终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。The
服务器105可以是提供各种服务的服务器,例如对用户利用终端设备101、102、103所浏览的网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析等处理,并将处理结果(例如根据用户请求获取或生成的网页、信息、或数据等)反馈给终端设备。The
需要说明的是,本公开实施例所提供的插件、应用程序实现一般可以由服务器105执行。相应地,本公开实施例所提供的插件、应用程序系统一般可以设置于服务器105中。本公开实施例所提供的插件、应用程序方法也可以由不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群执行。相应地,本公开实施例所提供的插件、应用程序系统也可以设置于不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群中。或者,本公开实施例所提供的插件、应用程序方法也可以由终端设备101、102、或103执行,或者也可以由不同于终端设备101、102、或103的其他终端设备执行。相应地,本公开实施例所提供的插件、应用程序系统也可以设置于终端设备101、102、或103中,或设置于不同于终端设备101、102、或103的其他终端设备中。It should be noted that the implementation of the plug-ins and application programs provided by the embodiments of the present disclosure may generally be executed by the
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。It should be understood that the numbers of terminal devices, networks and servers in FIG. 1 are merely illustrative. There can be any number of terminal devices, networks and servers according to implementation needs.
此外,本公开实施例可以应用于具有以下特点的应用程序中:即应用程序中包含有多个插件,这些插件中至少有两个插件公共依赖使用某些类、C库和资源,在这种情况下,使用本公开实施例提供的技术方案,不再需要将这些被公共依赖使用的类、C库和资源预先打包在应用程序的宿主程序中,而是可以将这些类、C库和资源单独开发成对应的公共插件使用。这样,应用程序可以只在运行阶段才加载使用相应的公共插件,因此可以减少应用程序的方法数和资源消耗,并减小应用程序的体积,使应用程序的业务逻辑更大程度地解耦。In addition, the embodiments of the present disclosure can be applied to an application program with the following characteristics: that is, the application program contains multiple plug-ins, and at least two of these plug-ins use certain classes, C libraries, and resources in common depending on the use of certain classes, C libraries, and resources. In this case, using the technical solutions provided by the embodiments of the present disclosure, it is no longer necessary to pre-package these classes, C libraries and resources used by public dependencies in the host program of the application, but these classes, C libraries and resources can be It is developed separately into the corresponding public plug-in for use. In this way, the application can load and use the corresponding public plug-ins only in the running phase, so the number of methods and resource consumption of the application can be reduced, the size of the application can be reduced, and the business logic of the application can be decoupled to a greater extent.
其中,本公开实施例主要改进了相关技术中应用程序的宿主程序部分。具体地,将宿主程序的公共库中被应用程序的多个插件公共依赖使用的类、C库和资源全部从宿主程序中拆分出来,并将原来的多个插件作为多个业务插件,同时根据多个业务插件对这些类、C库和资源的公共依赖关系,开发出多个公共插件,供应用程序运行时加载,并在开发业务插件时在其配置文件中加入相应的依赖关系,供宿主程序启动业务插件时加载对应的公共插件。Among them, the embodiments of the present disclosure mainly improve the host program part of the application program in the related art. Specifically, the classes, C libraries and resources that are commonly used by multiple plug-ins of the application in the public library of the host program are all separated from the host program, and the original multiple plug-ins are used as multiple business plug-ins, and at the same time According to the public dependencies of multiple business plug-ins on these classes, C libraries and resources, multiple public plug-ins are developed to be loaded when the application is running, and the corresponding dependencies are added to their configuration files when developing business plug-ins for When the host program starts the service plug-in, the corresponding public plug-in is loaded.
需要说明的是,在本公开中,每个插件的实现和使用均包括以下几个阶段:插件的源代码集成阶段、插件的源代码编译阶段、以及应用程序运行阶段使用公共插件和业务插件。It should be noted that, in the present disclosure, the implementation and use of each plug-in includes the following stages: plug-in source code integration stage, plug-in source code compilation stage, and application running stage using public plug-ins and business plug-ins.
图2示意性示出了根据本公开实施例的插件实现方法的流程图。FIG. 2 schematically shows a flowchart of a method for implementing a plug-in according to an embodiment of the present disclosure.
如图2所示,该方法包括操作S210~S220。As shown in FIG. 2, the method includes operations S210-S220.
在操作S210,获取公共插件的源代码,其中,公共插件可被多个业务插件公共依赖使用,且多个业务插件中的至少两个和公共插件可用于实现目标应用程序并能够在实现目标应用程序时被目标应用程序的宿主程序加载。In operation S210, the source code of the common plug-in is obtained, wherein the common plug-in can be commonly used by multiple service plug-ins, and at least two of the multiple service plug-ins and the common plug-in can be used to implement the target application and can be used in the implementation of the target application The program is loaded by the host program of the target application.
需要说明的是,公共插件可以是能够被业务插件公共依赖的类或者C库或者资源。例如,类1、C库1、资源1经常被业务插件A、B、C公共依赖,这种情况下,针对类1可以编写一段公共插件的源代码,针对C库1可以编写另一段公共插件的源代码,针对资源1可以编写另一段公共插件的源代码,每一段源代码都可以通过编译生成一个公共插件。It should be noted that the public plug-in may be a class or a C library or resource that can be publicly relied on by the business plug-in. For example, class 1, C library 1, and resource 1 are often publicly depended on by business plugins A, B, and C. In this case, a piece of source code of a common plugin can be written for class 1, and another piece of public plugin can be written for C library 1. source code, another source code of a public plug-in can be written for resource 1, and each source code can be compiled to generate a public plug-in.
基于上述示例,对于一个应用程序而言,假设其中包含业务插件A、B、以及D~G,其中,业务插件A、B公共依赖类1、C库1、资源1,业务插件D~G则不公共依赖任何类、C库、资源,这种情况下,在实现该应用程序时,不仅需要加载业务插件A、B、以及D~G,而且还会根据业务插件A、B对类1、C库1、资源1的依赖关系,加载类1对应的公共插件、C库1对应的公共插件、资源1对应的公共插件。Based on the above example, for an application, it is assumed that it contains business plug-ins A, B, and D-G. Among them, business plug-ins A and B commonly depend on class 1, C library 1, and resource 1, and service plug-ins D-G are It does not publicly depend on any classes, C libraries, and resources. In this case, when implementing the application, not only business plugins A, B, and D to G need to be loaded, but also the class 1, The dependencies of C library 1 and resource 1, load the public plug-in corresponding to class 1, the public plug-in corresponding to C library 1, and the public plug-in corresponding to resource 1.
在操作S220,编译源代码并输出公共插件和对应的AAR包,其中,AAR包用于在编译多个业务插件时提供业务插件与公共插件的依赖关系。In operation S220, the source code is compiled and a common plug-in and a corresponding AAR package are output, wherein the AAR package is used to provide the dependency between the service plug-in and the common plug-in when compiling multiple service plug-ins.
在本公开实施例中,编译公共插件的源代码可以同时产生两种产物,一种是对应的公共插件,另一种是与该公共插件关联的AAR包。其中,AAR包本质上就是android归档文件,它主要用于在编译相关业务插件时提供业务插件与该公共插件的依赖关系。例如,假设在某应用程序中,业务插件A需要依赖公共插件1,且编译生成公共插件1时同时生成了AAR包1,在这种情况下,在编译业务插件A的源代码生成业务插件A的过程中,可以基于AAR包1在业务插件A的配置文件中加入业务插件A与公共插件1的依赖关系。In the embodiment of the present disclosure, compiling the source code of the public plug-in can generate two products at the same time, one is the corresponding public plug-in, and the other is the AAR package associated with the public plug-in. Among them, the AAR package is essentially an android archive file, which is mainly used to provide the dependency between the business plugin and the public plugin when compiling related business plugins. For example, suppose that in an application, business plug-in A needs to depend on public plug-in 1, and AAR package 1 is generated when compiling and generating public plug-in 1. In this case, when compiling the source code of service plug-in A, service plug-in A is generated. During the process, the dependency relationship between the service plug-in A and the public plug-in 1 can be added to the configuration file of the service plug-in A based on the AAR package 1.
具体而言,开发公共插件总体可以分为两个阶段,即公共插件源代码集成阶段和公共插件源代码编译阶段。Specifically, the development of a common plug-in can be divided into two stages, namely, a common plug-in source code integration stage and a common plug-in source code compilation stage.
其中,在本公开实施例中,开发公共插件的目的是将仅在多个插件间公共依赖使用的类、C库和资源,从宿主程序中拆分出来,单独作为插件开发运行。Among them, in the embodiment of the present disclosure, the purpose of developing a common plug-in is to separate the classes, C libraries and resources that are only commonly used by multiple plug-ins from the host program, and develop and run them as plug-ins alone.
通过本公开实施例中,在实现公共插件的编译期,通过编译源代码生成两种产物,即公共插件和与该公共插件关联的AAR包,公共插件提供给宿主程序加载集成使用,AAR包提供给其他业务插件编译使用,即供业务插件编译时保存与相应公共插件的依赖关系。这样,在应用程序运行期,就可以通过依赖关系,加载并使用公共插件的类、C库和资源。According to the embodiments of the present disclosure, during the compilation period of implementing the public plug-in, two products are generated by compiling the source code, namely the public plug-in and the AAR package associated with the public plug-in. Compiled and used for other business plugins, that is, for business plugins to save dependencies with the corresponding public plugins when compiling. In this way, the classes, C libraries and resources of common plugins can be loaded and used through dependencies during application runtime.
可见,本公开的实施例,因为采用了将多个插件可能公共依赖使用的类、C库和资源从宿主程序中拆分出来,开发成独立的公共插件,并在应用程序的业务插件公共依赖某些公共插件时才进行加载,否则不加载的技术手段,所以至少部分地克服了相关技术中对于应用程序而言,不分业务插件和公共插件,只分插件和宿主程序,导致根本没有被应用程序中任何插件公共依赖使用的类、C库和资源,也被预先全部打包在宿主程序的公共库内,从而导致应用程序体积庞大,方法数众多、资源消耗严重等缺陷,进而达到了缩减应用程序的体积,减少应用程序的方法数和资源消耗的技术效果。It can be seen that in the embodiments of the present disclosure, classes, C libraries, and resources that may be commonly used by multiple plug-ins are separated from the host program, developed into independent public plug-ins, and publicly dependent on the business plug-ins of the application. Some public plug-ins are loaded only when they are loaded, otherwise they are not loaded, so at least partially overcomes the fact that in related technologies, for applications, there is no distinction between business plug-ins and public plug-ins, but only plug-ins and host programs, resulting in no application at all. The classes, C libraries and resources that any plug-ins in the application rely on publicly are also prepackaged in the public library of the host program, resulting in a large application program, a large number of methods, and serious resource consumption. The volume of the application, the technical effect of reducing the number of methods and resource consumption of the application.
下面参考图3和图4,结合具体实施例对图2所示的方法做进一步说明。The method shown in FIG. 2 will be further described below with reference to FIG. 3 and FIG. 4 in conjunction with specific embodiments.
作为一种可选的实施例,该方法还可以包括:针对多个业务插件中的每个,获取对应的源代码;编译对应的源代码并输出对应的业务插件;以及在编译对应的源代码的过程中,基于AAR包在对应的业务插件的配置文件中加入依赖关系。As an optional embodiment, the method may further include: for each of the plurality of service plug-ins, obtaining the corresponding source code; compiling the corresponding source code and outputting the corresponding service plug-in; and compiling the corresponding source code During the process, add dependencies in the configuration file of the corresponding business plug-in based on the AAR package.
与前述实现公共插件的过程类似,实现业务插件也分为两个阶段,即业务插件源代码集成阶段和业务插件源代码编译阶段。与公共插件源代码编译阶段不同,对业务插件源代码进行编译只产生业务插件代码一种产物。并且,如果一个业务插件与某个或者某几个公共插件有依赖关系,则在编译该业务插件时,需要基于对应的AAR包在其配置文件中加入该业务插件与这个或者这些公共插件依赖关系。当然,如果一个业务插件与任何公共插件都没有依赖关系,即它不需要依赖任何公共的类、C库和资源,那么在编译该业务插件时,直接编译源代码生成该业务插件即可,不需要在其配置文件中加入任何依赖关系。Similar to the aforementioned process of implementing a common plug-in, implementing a business plug-in is also divided into two stages, namely a business plug-in source code integration stage and a business plug-in source code compilation stage. Different from the public plug-in source code compilation stage, compiling the business plug-in source code produces only one product, the business plug-in code. Moreover, if a business plugin has a dependency on one or several public plugins, when compiling the business plugin, it is necessary to add the business plugin and this or these public plugin dependencies in its configuration file based on the corresponding AAR package. . Of course, if a business plug-in has no dependencies on any public plug-ins, that is, it does not need to depend on any public classes, C libraries and resources, then when compiling the business plug-in, you can directly compile the source code to generate the business plug-in. Need to include any dependencies in its configuration file.
具体地,在本公开实施例中,在配置文件中加入与公共插件的依赖关系,可以通过在AndroidManifest.xml中加入meta标签,从而保存依赖关系来实现。当然,本公开实施例还可以通过json文件或者其他的方式保存依赖关系。Specifically, in the embodiment of the present disclosure, adding the dependency with the public plug-in in the configuration file can be implemented by adding a meta tag in AndroidManifest.xml to save the dependency. Of course, the embodiments of the present disclosure may also save the dependencies through a json file or other manners.
此外,在本公开实施例中,可以通过插件化编译工具,编译业务插件。并且不同的插件化方案可以使用不同的编译工具,在此不做限定。In addition, in this embodiment of the present disclosure, a service plug-in can be compiled by using a plug-in compiling tool. And different plug-in solutions can use different compilation tools, which are not limited here.
另外,需要说明的是,在本公开实施例中,直接编译公共插件源代码并生成AAR包后,可以将AAR包上传至maven私服/仓库以备编译业务插件使用。当然,AAR包的存储方式,包括但不限于上传maven私服/仓库的方式。In addition, it should be noted that, in the embodiment of the present disclosure, after directly compiling the public plug-in source code and generating the AAR package, the AAR package can be uploaded to the maven private server/warehouse for use in compiling the business plug-in. Of course, the storage method of AAR package, including but not limited to the way of uploading maven private server/repository.
通过本公开实施例,为了便于运行时加载,可以在业务插件的配置文件中添加业务插件与公共插件的依赖关系。With the embodiments of the present disclosure, in order to facilitate loading at runtime, the dependency between the service plug-in and the public plug-in can be added to the configuration file of the service plug-in.
图3提供了一种插件实现原理,即在一个应用程序中,业务插件1和业务插件2公共依赖于公共插件1,且AAR包1是编译公共插件1时同时生成的AAR包,则业务插件1和业务插件2的实现原理如图所示。Figure 3 provides a plug-in implementation principle, that is, in an application, service plug-in 1 and service plug-in 2 commonly depend on public plug-in 1, and AAR package 1 is an AAR package generated at the same time when public plug-in 1 is compiled, then the service plug-in The realization principle of 1 and business plug-in 2 is shown in the figure.
作为一种可选的实施例,公共插件也可被各个业务插件内部重复使用,对应的,该方法还可以包括:针对插件内部需要重复使用公共插件的业务插件,在编译该业务插件的源代码的过程中,基于AAR包和公共插件被重复引用的次数,在该业务插件的配置文件中加入依赖关系。As an optional embodiment, the common plug-in can also be reused inside each service plug-in. Correspondingly, the method may further include: for a service plug-in that needs to reuse the public plug-in inside the plug-in, compiling the source code of the service plug-in During the process, based on the number of times the AAR package and the public plug-in are repeatedly referenced, the dependency is added to the configuration file of the service plug-in.
在本公开实施例中,公共插件既可以是多个业务插件间公共依赖使用的类、C库和资源,也可以是各个业务插件内部重复引用的共同的类、C库和资源。无论是前一种还是后一种,都可以从宿主程序中拆分出来,以缩减应用程序的体积、方法数和资源消耗。In the embodiment of the present disclosure, the common plug-in may be a class, C library, and resource that are commonly used by multiple service plug-ins, or a common class, C library, and resource that are repeatedly referenced within each service plug-in. Whether it is the former or the latter, it can be split from the host program to reduce the size of the application, the number of methods and resource consumption.
图4提供了另一种插件实现原理,即在一个应用程序中,业务插件1两次重复引用了公共插件1,且AAR包1是编译公共插件1时同时生成的AAR包,则业务插件1实现原理如图所示。Figure 4 provides another plug-in implementation principle, that is, in an application, the service plug-in 1 repeatedly references the public plug-in 1 twice, and the AAR package 1 is an AAR package generated at the same time when the public plug-in 1 is compiled, then the service plug-in 1 The realization principle is shown in the figure.
通过本公开实施例,还可以将单个业务插件内部重复引用的类、C库和资源从宿主程序的公共库内拆分出来,开发成公共插件,供应用程序运行时加载,如此可以更大程度地缩减应用程序的体积、方法数和资源消耗。Through the embodiments of the present disclosure, the classes, C libraries and resources repeatedly referenced in a single business plug-in can also be separated from the public library of the host program, developed into a public plug-in, and loaded when the application program is running. dramatically reduce the size, number of methods and resource consumption of the application.
图5示意性示出了根据本公开实施例的应用程序实现方法的流程图。FIG. 5 schematically shows a flowchart of a method for implementing an application program according to an embodiment of the present disclosure.
如图5所示,该方法包括操作S510~S540。As shown in FIG. 5 , the method includes operations S510˜S540.
在操作S510,获取用于实现应用程序的多个业务插件和公共插件,其中,公共插件可被多个业务插件中的至少两个公共依赖使用或者可被多个业务插件中的至少一个在插件内部重复使用。In operation S510, a plurality of service plug-ins and common plug-ins for implementing the application are obtained, wherein the common plug-in can be used by at least two common dependencies of the plurality of service plug-ins or can be used by at least one of the plurality of service plug-ins in the plug-in Internal reuse.
需要说明的是,在本公开实施例中提及的业务插件和公共插件都可以通过上述实施例中提供的方案来实现,在此不再赘述。It should be noted that, both the service plug-in and the public plug-in mentioned in the embodiments of the present disclosure can be implemented by the solutions provided in the above-mentioned embodiments, and details are not repeated here.
在本公开实施例中,对于一个应用程序而言,假设其中包含业务插件A、B、C以及D~G,其中,业务插件A、B都公共依赖类1、C库1、资源1,业务插件C重复引用了类2、C库2、资源2,业务插件D~G则不公共依赖也不重复因引用任何类、C库、资源,这种情况下,在实现该应用程序时,不仅需要加载业务插件A、B、C以及D~G,而且还会根据业务插件A、B对类1、C库1、资源1的依赖关系,加载类1对应的公共插件、C库1对应的公共插件、资源1对应的公共插件,以及根据业务插件C对类2、C库2、资源2的依赖关系,加载类2对应的公共插件、C库2对应的公共插件、资源2对应的公共插件。In the embodiment of the present disclosure, for an application, it is assumed that it includes service plug-ins A, B, C, and D to G, wherein, service plug-ins A and B all commonly depend on class 1, C library 1, and resource 1. Plug-in C repeatedly references class 2, C library 2, and resource 2, while business plug-ins D to G do not publicly depend on or repeatedly refer to any class, C library, or resource. In this case, when implementing the application, not only Business plugins A, B, C, and D to G need to be loaded, and according to the dependencies of business plugins A and B on class 1, C library 1, and resource 1, the public plugin corresponding to class 1 and the public plugin corresponding to C library 1 will be loaded. Public plug-ins, public plug-ins corresponding to resource 1, and load the public plug-ins corresponding to class 2, the public plug-ins corresponding to C library 2, and the public plug-ins corresponding to resource 2 according to the dependencies of business plug-in C on class 2, C library 2, and resource 2 plugin.
在操作S520,获取用于实现应用程序的宿主程序。In operation S520, a host program for implementing the application program is obtained.
其中,应用程序的宿主程序既可以加载该应用程序的各业务插件,也可以加载该应用程序的各公共插件。Wherein, the host program of the application program can load not only various service plug-ins of the application program, but also various public plug-ins of the application program.
在操作S530,利用宿主程序启动多个业务插件。In operation S530, a host program is used to start a plurality of service plug-ins.
在操作S540,在启动多个业务插件的过程中,按照预定加载逻辑加载公共插件。In operation S540, in the process of starting a plurality of service plug-ins, the common plug-in is loaded according to the predetermined loading logic.
在宿主程序运行阶段,如何加载使用公共插件,这是插件化框架的工作,下面参考图6,通过查找一个类的过程,说明公共插件的使用方式。In the running phase of the host program, how to load and use the public plug-in is the work of the plug-in framework. Referring to Figure 6 below, the use of the public plug-in is described through the process of finding a class.
当宿主程序要启动一个业务插件,并加载类时,如果在本业务插件内部的类加载器可以找到类,则加载成功,然后继续找下一个类,直至结束,如果加载失败,则继续进行下一步,即查找是否存在公共插件。When the host program wants to start a business plugin and load a class, if the class loader inside the business plugin can find the class, the loading is successful, and then continue to find the next class until the end, if the loading fails, continue to the next The first step is to find out if there is a public plugin.
具体地,当业务插件的类加载器找不到类时,可以通过解析该业务插件的AndroidManifest.xml,查找该业务插件是否依赖公共插件,如果依赖公共插件,则插件化框架先加载公共插件,再通过公共插件的类加载器查找类是否存在,如果存在,则加载成功,继续查找下一个类,直至结束,如果不存在,则加载失败,进而使用宿主程序的类加载器继续查找。Specifically, when the class loader of the business plugin cannot find the class, it can parse the AndroidManifest.xml of the business plugin to find out whether the business plugin depends on the public plugin. If it depends on the public plugin, the plugin framework will load the public plugin first. Then check whether the class exists through the class loader of the public plugin. If it exists, the loading is successful, and continue to search for the next class until the end. If it does not exist, the loading fails, and then use the class loader of the host program to continue the search.
同理,通过宿主程序的类加载器继续查找类是否存在,如果存在,则加载成功,继续找下一个类,直至结束;如仍未成功,则认为该类加载失败,抛出异常。Similarly, the class loader of the host program continues to find whether the class exists. If it exists, the loading is successful, and the next class continues to be found until the end; if it is still unsuccessful, it is considered that the class failed to load and an exception is thrown.
可见,在宿主程序运行阶段,需要通过业务插件与公共插件的依赖关系,加载并使用公共插件的类、C库及资源。It can be seen that in the running phase of the host program, it is necessary to load and use the classes, C libraries and resources of the public plug-in through the dependencies between the business plug-in and the public plug-in.
此外,在应用程序运行阶段,检查类/C库/资源的顺序包括但不限于上述示例性方案中展示的顺序,可以根据依赖关系的不同相应地调整查找逻辑。In addition, during the running phase of the application, the order of checking classes/C libraries/resources includes but is not limited to the order shown in the above exemplary solution, and the search logic can be adjusted accordingly according to different dependencies.
通过本公开实施例,在公共插件和业务插件实现方案的基础上,提供了一种改进型的应用程序实现方案,通过将那些仅在多个业务插件间公共依赖使用的类、C库和资源和/或将那些仅在各个业务插件内部重复引用的类、C库和资源从宿主程序中拆分出来,形成一个或者多个公共插件,动态的进行加载,这样可以避免多个业务插件分别重复引用相关的类、C库和资源,也能进一步的减少宿主程序的方法数和资源消耗,减少代码冗余,减小应用程序体积,加快应用程序的安装与启动。Through the embodiments of the present disclosure, based on the implementation scheme of common plug-ins and service plug-ins, an improved application program implementation scheme is provided. And/or split the classes, C libraries and resources that are only repeatedly referenced within each business plug-in from the host program to form one or more public plug-ins, which are loaded dynamically, so as to avoid repeated repetition of multiple business plug-ins. Referencing related classes, C libraries and resources can further reduce the number of methods and resource consumption of the host program, reduce code redundancy, reduce the size of the application, and speed up the installation and startup of the application.
作为一种可选的实施例,在启动多个业务插件的过程中,按照预定加载逻辑加载公共插件,包括:针对多个业务插件中的每个,在启动过程中,检查对应的业务插件与公共插件是否存在依赖关系;以及如果存在,则加载公共插件。As an optional embodiment, in the process of starting multiple service plug-ins, loading a common plug-in according to a predetermined loading logic includes: for each of the multiple service plug-ins, during the starting process, checking the corresponding service plug-in and Whether a dependency exists for the public plugin; and if so, load the public plugin.
具体地,在启动每个业务插件时,都可以通过解析业务插件的AndroidManifest.xml,查找业务插件是否依赖公共插件,如果依赖公共插件,则可以使用插件化框架先加载公共插件,如果不存在,则无需加载。Specifically, when starting each business plugin, you can parse the AndroidManifest.xml of the business plugin to find out whether the business plugin depends on the public plugin. If it depends on the public plugin, you can use the plugin framework to load the public plugin first. If it does not exist, No need to load.
通过本公开实施例,在应用程序运行时,只加载与应用程序的业务插件有依赖关系的公共插件,没有依赖关系的则不加载,可以减少应用程序的方法数和资源消耗,减小应用程序的体积。Through the embodiments of the present disclosure, when the application is running, only the public plug-ins that have dependencies with the service plug-ins of the application are loaded, and those without dependencies are not loaded, which can reduce the number of methods and resource consumption of the application, and reduce the number of application plug-ins. volume of.
作为一种可选的实施例,应用程序包括加载对象;该方法还可以包括:通过业务插件的加载器加载加载对象;或者通过公共插件的加载器加载加载对象;或者通过宿主程序的加载器加载加载对象。As an optional embodiment, the application program includes the loading object; the method may further include: loading the loading object through the loader of the business plug-in; or loading the loading object through the loader of the public plug-in; or loading the loading object through the loader of the host program Load the object.
作为一种可选的实施例,加载对象包括以下至少之一:类、C库和资源。As an optional embodiment, the loading object includes at least one of the following: a class, a C library, and a resource.
在本公开实施例中,如果加载对象是业务插件公共依赖的或重复引用的,则可以通过公共插件的加载器加载,否则则可以通过业务插件或者宿主程序的加载器加载。In the embodiment of the present disclosure, if the loaded object is publicly dependent or repeatedly referenced by the service plug-in, it can be loaded through the loader of the common plug-in, otherwise, it can be loaded through the loader of the service plug-in or the host program.
图7示意性示出了根据本公开实施例的插件实现系统的框图。FIG. 7 schematically shows a block diagram of a plug-in implementation system according to an embodiment of the present disclosure.
如图7所示,插件实现系统700包括第一获取模块710和第一编译模块720。As shown in FIG. 7 , the plug-in
第一获取模块710,用于获取公共插件的源代码,其中,公共插件可被多个业务插件公共依赖使用,且多个业务插件中的至少两个和公共插件可用于实现目标应用程序并能够在实现目标应用程序时被目标应用程序的宿主程序加载;以及The first obtaining
第一编译模块720,用于编译源代码并输出公共插件和对应的AAR包,其中,AAR包用于在编译多个业务插件时提供业务插件与公共插件的依赖关系。The
通过本公开的实施例,因为采用了将多个插件可能公共依赖使用的类、C库和资源从宿主程序中拆分出来,开发成独立的公共插件,并在应用程序的业务插件公共依赖某些公共插件时才进行加载,否则不加载的技术手段,所以至少部分地克服了相关技术中对于应用程序而言,不分业务插件和公共插件,只分插件和宿主程序,导致根本没有被应用程序中任何插件公共依赖使用的类、C库和资源,也被预先全部打包在宿主程序的公共库内,从而导致应用程序体积庞大,方法数众多、资源消耗严重等缺陷,进而达到了缩减应用程序的体积,减少应用程序的方法数和资源消耗的技术效果。Through the embodiments of the present disclosure, the classes, C libraries and resources that may be commonly used by multiple plug-ins are separated from the host program, developed into independent public plug-ins, and the business plug-ins of the application rely on a certain common plug-in. It is a technical means to load only when some public plug-ins are loaded, otherwise it is not loaded, so it at least partially overcomes the related technology for applications, regardless of business plug-ins and public plug-ins, only plug-ins and host programs, resulting in no application at all. The classes, C libraries and resources that any plug-ins in the program rely on publicly are also prepackaged in the public library of the host program, resulting in a large application program, a large number of methods, and serious resource consumption. The size of the program, the technical effect of reducing the number of methods and resource consumption of the application.
作为一种可选的实施例,系统还包括:第二获取模块,用于针对多个业务插件中的每个,获取对应的源代码;第二编译模块,用于编译对应的源代码并输出对应的业务插件;以及第一添加模块,用于在编译对应的源代码的过程中,基于AAR包在对应的业务插件的配置文件中加入依赖关系。As an optional embodiment, the system further includes: a second acquisition module for acquiring corresponding source codes for each of the multiple service plug-ins; a second compilation module for compiling the corresponding source codes and outputting them a corresponding business plug-in; and a first adding module for adding a dependency to the configuration file of the corresponding business plug-in based on the AAR package during the process of compiling the corresponding source code.
通过本公开实施例,为了便于运行时加载,可以在业务插件的配置文件中添加业务插件与公共插件的依赖关系。With the embodiments of the present disclosure, in order to facilitate loading at runtime, the dependency between the service plug-in and the public plug-in can be added to the configuration file of the service plug-in.
作为一种可选的实施例,公共插件也可被各个业务插件内部重复使用;系统还包括:第二添加模块,用于针对插件内部需要重复使用公共插件的业务插件,在编译该业务插件的源代码的过程中,基于AAR包和公共插件被重复引用的次数,在该业务插件的配置文件中加入依赖关系。As an optional embodiment, the common plug-in can also be reused by each service plug-in; the system further includes: a second adding module, used for the service plug-in that needs to reuse the public plug-in inside the plug-in, after compiling the service plug-in During the source code process, based on the number of times the AAR package and the public plug-in are repeatedly referenced, the dependency is added to the configuration file of the service plug-in.
通过本公开实施例,还可以将单个业务插件内部重复引用的类、C库和资源从宿主程序的公共库内拆分出来,开发成公共插件,供应用程序运行时加载,如此可以更大程度地缩减应用程序的体积、方法数和资源消耗。Through the embodiments of the present disclosure, the classes, C libraries and resources repeatedly referenced in a single business plug-in can also be separated from the public library of the host program, developed into a public plug-in, and loaded when the application program is running. dramatically reduce the size, number of methods and resource consumption of the application.
图8示意性示出了根据本公开实施例的应用程序实现系统的框图。FIG. 8 schematically shows a block diagram of an application implementation system according to an embodiment of the present disclosure.
如图8所示,应用程序实现系统800包括第三获取模块810、第四获取模块820、启动模块830和第一加载模块840。As shown in FIG. 8 , the
第三获取模块810,用于获取用于实现应用程序的多个业务插件和公共插件,其中,公共插件可被多个业务插件中的至少两个公共依赖使用或者可被多个业务插件中的至少一个在插件内部重复使用;The third obtaining
第四获取模块820,用于获取用于实现应用程序的宿主程序;a fourth obtaining
启动模块830,用于利用宿主程序启动多个业务插件;以及a start-up
第一加载模块840,用于在启动多个业务插件的过程中,按照预定加载逻辑加载公共插件。The
通过本公开实施例,在公共插件和业务插件实现方案的基础上,提供了一种改进型的应用程序实现方案。通过将那些仅在多个业务插件间公共依赖使用的类、C库和资源和/或将那些仅在各个业务插件内部重复引用的类、C库和资源从宿主程序中拆分出来,形成一个或者多个公共插件,动态的进行加载,这样可以避免多个业务插件分别重复引用相关的类、C库和资源,也能进一步的减少宿主程序的方法数和资源消耗,减少代码冗余,减小应用程序体积,加快应用程序的安装与启动。Through the embodiments of the present disclosure, an improved application program implementation scheme is provided based on the implementation scheme of the common plug-in and the service plug-in. By separating the classes, C libraries and resources that are only used in common dependencies among multiple business plug-ins and/or those that are only repeatedly referenced within each business plug-in from the host program, form a Or multiple public plug-ins are loaded dynamically, which can avoid multiple business plug-ins from repeatedly referencing related classes, C libraries and resources, and can further reduce the number of methods and resource consumption of the host program, reduce code redundancy, reduce Small application size to speed up application installation and startup.
作为一种可选的实施例,第一加载模块包括:检查单元,用于针对多个业务插件中的每个,在启动过程中,检查对应的业务插件与公共插件是否存在依赖关系;以及加载单元,用于在存在依赖关系的情况下,加载公共插件。As an optional embodiment, the first loading module includes: a checking unit configured to, for each of the plurality of service plug-ins, check whether the corresponding service plug-in and the public plug-in have a dependency during the startup process; and load Unit for loading common plugins in the presence of dependencies.
通过本公开实施例,在应用程序运行时,只加载与应用程序的业务插件有依赖关系的公共插件,没有依赖关系的则不加载,可以减少应用程序的方法数和资源消耗,减小应用程序的体积。Through the embodiments of the present disclosure, when the application is running, only the public plug-ins that have dependencies with the service plug-ins of the application are loaded, and those without dependencies are not loaded, which can reduce the number of methods and resource consumption of the application, and reduce the number of application plug-ins. volume of.
作为一种可选的实施例,应用程序包括加载对象;系统还包括第二加载模块,用于:通过业务插件的加载器加载加载对象;或者通过公共插件的加载器加载加载对象;或者通过宿主程序的加载器加载加载对象。As an optional embodiment, the application program includes a loading object; the system further includes a second loading module for: loading the loading object through the loader of the service plug-in; or loading the loading object through the loader of the public plug-in; or through the host The program's loader loads the load object.
作为一种可选的实施例,加载对象包括以下至少之一:类、C库和资源。As an optional embodiment, the loading object includes at least one of the following: a class, a C library, and a resource.
根据本公开的实施例的模块、单元中的任意多个、或其中任意多个的至少部分功能可以在一个模块中实现。根据本公开实施例的模块、单元中的任意一个或多个可以被拆分成多个模块来实现。根据本公开实施例的模块、单元中的任意一个或多个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式的硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,根据本公开实施例的模块、单元中的一个或多个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。Any of the modules, units, or at least part of the functions of any of the modules according to the embodiments of the present disclosure may be implemented in one module. Any one or more of the modules and units according to the embodiments of the present disclosure may be divided into multiple modules for implementation. Any one or more of the modules and units according to the embodiments of the present disclosure may be implemented at least in part as hardware circuits, such as field programmable gate arrays (FPGA), programmable logic arrays (PLA), system-on-chip, on-board A system, a system on a package, an application specific integrated circuit (ASIC), or any other reasonable means of hardware or firmware that integrates or encapsulates a circuit, or can be implemented in any one of three ways: software, hardware, and firmware or any appropriate combination of any of them. Alternatively, one or more of the modules and units according to the embodiments of the present disclosure may be implemented at least in part as computer program modules, which, when executed, may perform corresponding functions.
例如,第一获取模块710和第一编译模块720中的任意多个可以合并在一个模块/单元/子单元中实现,或者其中的任意一个模块/单元/子单元可以被拆分成多个模块/单元/子单元。或者,这些模块/单元/子单元中的一个或多个模块/单元/子单元的至少部分功能可以与其他模块/单元/子单元的至少部分功能相结合,并在一个模块/单元/子单元中实现。根据本公开的实施例,第一获取模块710和第一编译模块720中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,第一获取模块710和第一编译模块720中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。For example, any one of the first acquiring
需要说明的是,本公开的实施例中系统部分实施方式与本公开的实施例中方法部分实施方式对应相同或类似,系统部分实施方式的描述具体请参考方法部分实施方式的描述,在此不再赘述。It should be noted that some implementations of the system in the embodiments of the present disclosure are the same as or similar to the implementations of the methods in the embodiments of the present disclosure. For the descriptions of the partial implementations of the system, please refer to the descriptions of the partial implementations of the methods. Repeat.
图9示意性示出了根据本公开实施例的适于实现插件和应用程序的计算机系统的框图。图9示出的计算机系统仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。9 schematically illustrates a block diagram of a computer system suitable for implementing plug-ins and applications in accordance with embodiments of the present disclosure. The computer system shown in FIG. 9 is only an example, and should not impose any limitation on the function and scope of use of the embodiments of the present disclosure.
如图9所示,根据本公开实施例的计算机系统900包括处理器901,其可以根据存储在只读存储器(ROM)902中的程序或者从存储部分908加载到随机访问存储器(RAM)903中的程序而执行各种适当的动作和处理。处理器901例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC)),等等。处理器901还可以包括用于缓存用途的板载存储器。处理器901可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。As shown in FIG. 9 , a
在RAM 903中,存储有系统900操作所需的各种程序和数据。处理器901、ROM 902以及RAM 903通过总线904彼此相连。处理器901通过执行ROM 902和/或RAM 903中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 902和RAM 903以外的一个或多个存储器中。处理器901也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。In the
根据本公开的实施例,系统900还可以包括输入/输出(I/O)接口905,输入/输出(I/O)接口905也连接至总线904。系统900还可以包括连接至I/O接口905的以下部件中的一项或多项:包括键盘、鼠标等的输入部分906;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分907;包括硬盘等的存储部分908;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分909。通信部分909经由诸如因特网的网络执行通信处理。驱动器910也根据需要连接至I/O接口905。可拆卸介质911,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器910上,以便于从其上读出的计算机程序根据需要被安装入存储部分908。According to embodiments of the present disclosure, the
根据本公开的实施例,根据本公开实施例的方法流程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分909从网络上被下载和安装,和/或从可拆卸介质911被安装。在该计算机程序被处理器901执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。According to an embodiment of the present disclosure, the method flow according to an embodiment of the present disclosure may be implemented as a computer software program. For example, embodiments of the present disclosure include a computer program product comprising a computer program carried on a computer-readable storage medium, the computer program containing program code for performing the method illustrated in the flowchart. In such an embodiment, the computer program may be downloaded and installed from the network via the
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。The present disclosure also provides a computer-readable storage medium. The computer-readable storage medium may be included in the device/apparatus/system described in the above embodiments; it may also exist alone without being assembled into the device/system. device/system. The above-mentioned computer-readable storage medium carries one or more programs, and when the above-mentioned one or more programs are executed, implement the method according to the embodiment of the present disclosure.
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质。例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。According to an embodiment of the present disclosure, the computer-readable storage medium may be a non-volatile computer-readable storage medium. Examples may include, but are not limited to, portable computer disks, hard disks, random access memory (RAM), read only memory (ROM), erasable programmable read only memory (EPROM or flash memory), portable compact disk read only memory (CD- ROM), optical storage devices, magnetic storage devices, or any suitable combination of the above. In this disclosure, a computer-readable storage medium may be any tangible medium that contains or stores a program that can be used by or in conjunction with an instruction execution system, apparatus, or device.
例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 902和/或RAM 903和/或ROM 902和RAM 903以外的一个或多个存储器。For example, according to embodiments of the present disclosure, a computer-readable storage medium may include one or more memories other than
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。The flowchart and block diagrams in the Figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods and computer program products according to various embodiments of the present disclosure. In this regard, each block in the flowchart or block diagrams may represent a module, segment, or portion of code that contains one or more logical functions for implementing the specified functions executable instructions. It should also be noted that, in some alternative implementations, the functions noted in the blocks may occur out of the order noted in the figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved. It is also noted that each block of the block diagrams or flowchart illustrations, and combinations of blocks in the block diagrams or flowchart illustrations, can be implemented in special purpose hardware-based systems that perform the specified functions or operations, or can be implemented using A combination of dedicated hardware and computer instructions is implemented.
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。Those skilled in the art will appreciate that various combinations and/or combinations of features recited in various embodiments and/or claims of the present disclosure are possible, even if such combinations or combinations are not expressly recited in the present disclosure. In particular, various combinations and/or combinations of the features recited in the various embodiments of the present disclosure and/or in the claims may be made without departing from the spirit and teachings of the present disclosure. All such combinations and/or combinations fall within the scope of this disclosure.
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。Embodiments of the present disclosure have been described above. However, these examples are for illustrative purposes only, and are not intended to limit the scope of the present disclosure. Although the various embodiments are described above separately, this does not mean that the measures in the various embodiments cannot be used in combination to advantage. The scope of the present disclosure is defined by the appended claims and their equivalents. Without departing from the scope of the present disclosure, those skilled in the art can make various substitutions and modifications, and these substitutions and modifications should all fall within the scope of the present disclosure.
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201910022287.0ACN111427579B (en) | 2019-01-09 | 2019-01-09 | Plug-in, application program implementation method and system, computer system and storage medium |
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201910022287.0ACN111427579B (en) | 2019-01-09 | 2019-01-09 | Plug-in, application program implementation method and system, computer system and storage medium |
| Publication Number | Publication Date |
|---|---|
| CN111427579Atrue CN111427579A (en) | 2020-07-17 |
| CN111427579B CN111427579B (en) | 2025-03-18 |
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN201910022287.0AActiveCN111427579B (en) | 2019-01-09 | 2019-01-09 | Plug-in, application program implementation method and system, computer system and storage medium |
| Country | Link |
|---|---|
| CN (1) | CN111427579B (en) |
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN111857689A (en)* | 2020-07-27 | 2020-10-30 | 深信服科技股份有限公司 | A framework, a function configuration method of the framework, a terminal and a storage medium |
| CN112416425A (en)* | 2020-11-20 | 2021-02-26 | 微医云(杭州)控股有限公司 | APP construction method and device, computer equipment and storage medium |
| CN112486512A (en)* | 2020-11-25 | 2021-03-12 | 湖南麒麟信安科技股份有限公司 | Linux general software adaptation method and system based on container and stacked file system |
| CN112540788A (en)* | 2020-12-03 | 2021-03-23 | 南方电网数字电网研究院有限公司 | Method compatible with multi-manufacturer unmanned aerial vehicle flight control application apps |
| CN113282347A (en)* | 2021-05-24 | 2021-08-20 | 挂号网(杭州)科技有限公司 | Plug-in operation method, device, equipment and storage medium |
| CN113407165A (en)* | 2021-06-29 | 2021-09-17 | 北京字节跳动网络技术有限公司 | SDK generation and self-upgrade method, device, readable medium and equipment |
| CN113568625A (en)* | 2021-06-25 | 2021-10-29 | 五八有限公司 | Application program packaging and loading method and device, electronic equipment and storage medium |
| CN114064045A (en)* | 2021-11-08 | 2022-02-18 | 深圳Tcl新技术有限公司 | Component generation method and device, computer equipment and computer-readable storage medium |
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN107273142A (en)* | 2017-07-12 | 2017-10-20 | 北京潘达互娱科技有限公司 | Method for updating program, program operating method and device |
| CN108037941A (en)* | 2017-12-27 | 2018-05-15 | 掌阅科技股份有限公司 | Application program update method, electronic equipment based on public plug-in unit, storage medium |
| CN108536444A (en)* | 2018-02-26 | 2018-09-14 | 平安普惠企业管理有限公司 | Plug-in unit Compilation Method, device, computer equipment and storage medium |
| CN108958842A (en)* | 2018-07-12 | 2018-12-07 | 北京猫眼文化传媒有限公司 | The business plug-in unit application method of application program and application program |
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN107273142A (en)* | 2017-07-12 | 2017-10-20 | 北京潘达互娱科技有限公司 | Method for updating program, program operating method and device |
| CN108037941A (en)* | 2017-12-27 | 2018-05-15 | 掌阅科技股份有限公司 | Application program update method, electronic equipment based on public plug-in unit, storage medium |
| CN108536444A (en)* | 2018-02-26 | 2018-09-14 | 平安普惠企业管理有限公司 | Plug-in unit Compilation Method, device, computer equipment and storage medium |
| CN108958842A (en)* | 2018-07-12 | 2018-12-07 | 北京猫眼文化传媒有限公司 | The business plug-in unit application method of application program and application program |
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN111857689A (en)* | 2020-07-27 | 2020-10-30 | 深信服科技股份有限公司 | A framework, a function configuration method of the framework, a terminal and a storage medium |
| CN112416425A (en)* | 2020-11-20 | 2021-02-26 | 微医云(杭州)控股有限公司 | APP construction method and device, computer equipment and storage medium |
| CN112486512A (en)* | 2020-11-25 | 2021-03-12 | 湖南麒麟信安科技股份有限公司 | Linux general software adaptation method and system based on container and stacked file system |
| CN112540788A (en)* | 2020-12-03 | 2021-03-23 | 南方电网数字电网研究院有限公司 | Method compatible with multi-manufacturer unmanned aerial vehicle flight control application apps |
| CN113282347A (en)* | 2021-05-24 | 2021-08-20 | 挂号网(杭州)科技有限公司 | Plug-in operation method, device, equipment and storage medium |
| CN113568625A (en)* | 2021-06-25 | 2021-10-29 | 五八有限公司 | Application program packaging and loading method and device, electronic equipment and storage medium |
| CN113407165A (en)* | 2021-06-29 | 2021-09-17 | 北京字节跳动网络技术有限公司 | SDK generation and self-upgrade method, device, readable medium and equipment |
| CN113407165B (en)* | 2021-06-29 | 2023-04-07 | 抖音视界有限公司 | SDK generation and self-upgrade method, device, readable medium and equipment |
| CN114064045A (en)* | 2021-11-08 | 2022-02-18 | 深圳Tcl新技术有限公司 | Component generation method and device, computer equipment and computer-readable storage medium |
| CN114064045B (en)* | 2021-11-08 | 2025-06-03 | 深圳Tcl新技术有限公司 | Component generation method, device, computer equipment and computer readable storage medium |
| Publication number | Publication date |
|---|---|
| CN111427579B (en) | 2025-03-18 |
| Publication | Publication Date | Title |
|---|---|---|
| CN111427579A (en) | Plug-in, application implementation method and system, computer system and storage medium | |
| CN111782523B (en) | Cloud service deployment test method, device, electronic device and storage medium | |
| WO2017166447A1 (en) | Method and device for loading kernel module | |
| CN110532016B (en) | Version management method, version updating method and version management system | |
| CN112328301B (en) | Method and device for maintaining consistency of operating environments, storage medium and electronic equipment | |
| WO2016058488A1 (en) | Method and device for providing sdk files | |
| CN113138768B (en) | Application package generation method, device, electronic device and readable storage medium | |
| CN112769706B (en) | Componentized routing method and system | |
| US11733974B2 (en) | Method and system for automatically creating instances of containerized servers | |
| CN112596720B (en) | Business operation method, platform, electronic device and computer storage medium | |
| CN112199567A (en) | Distributed data acquisition method, system, server and storage medium | |
| CN113127361B (en) | Application development method and device, electronic equipment and storage medium | |
| US20160070591A1 (en) | Distributed processing system, distributed processing device, distributed processing method, and distributed processing program | |
| CN113608800A (en) | Project starting method and device, electronic equipment and storage medium | |
| WO2017219526A1 (en) | Method for using graphic file format and storage device | |
| CN110928571A (en) | Business program development method and device | |
| CN110688096B (en) | Method and device for constructing application program containing plug-in, medium and electronic equipment | |
| WO2019029451A1 (en) | Method for publishing mobile applications and electronic apparatus | |
| US11689630B2 (en) | Request processing method and apparatus, electronic device, and computer storage medium | |
| CN115982491A (en) | Page updating method and device, electronic equipment and computer readable storage medium | |
| CN111694639A (en) | Method and device for updating address of process container and electronic equipment | |
| CN112882698A (en) | Development environment generation method and device, computer storage medium and electronic device | |
| CN115248680A (en) | Software construction method, system, device, medium, and program product | |
| CN113805878B (en) | Plug-in engineering method, device, computer system and medium | |
| CN111142972B (en) | Method, apparatus, system, and medium for extending functions of application program |
| 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 | ||
| GR01 | Patent grant | ||
| GR01 | Patent grant |