CN112052051A - 插件处理方法、装置、设备及存储介质 - Google Patents

插件处理方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN112052051A
CN112052051A CN202010899236.9A CN202010899236A CN112052051A CN 112052051 A CN112052051 A CN 112052051A CN 202010899236 A CN202010899236 A CN 202010899236A CN 112052051 A CN112052051 A CN 112052051A
Authority
CN
China
Prior art keywords
plug
development project
function implementation
interface
container
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
CN202010899236.9A
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.)
Beijing Didi Infinity Technology and Development Co Ltd
Original Assignee
Beijing Didi Infinity Technology and Development 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 Beijing Didi Infinity Technology and Development Co Ltd filed Critical Beijing Didi Infinity Technology and Development Co Ltd
Priority to CN202010899236.9A priority Critical patent/CN112052051A/zh
Publication of CN112052051A publication Critical patent/CN112052051A/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
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services

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

本公开的实施例提供一种插件处理方法、装置、设备及存储介质。该方法包括:获取开发项目的插件引用信息;根据插件引用信息和预设的插件容器,确定开发项目所引用的第一插件和第一插件所依赖的第二插件;如果开发项目未引用第二插件,则在开发项目中为第二插件生成对应的插件接口。本公开的实施例的方法,为未引用的依赖插件生成插件接口,以供用户根据生成的插件接口编写插件,无需强制引入指定的依赖插件,降低了插件之间的耦合度,提高了开发过程中插件引用的灵活性。

Description

插件处理方法、装置、设备及存储介质
技术领域
本公开的实施例涉及插件技术领域,尤其涉及一种插件处理方法、装置、设备及存储介质。
背景技术
操作系统和移动终端的多样化,需要项目开发人员在不同平台上开发和维护同一个产品。采用不同的开发语言在不同的操作系统上开发和适配同一款产品,导致开发成本非常高。因此,在前端开发技术领域,出现了跨平台移动应用开发框架,比如Flutter框架、React Native框架。
跨平台移动应用开发框架在实现部分功能,比如数据持久化、消息推送以及摄像头硬件调用,还需要原生操作系统(例如安卓系统)提供的底层能力支持。通常的,跨平台移动应用开发框架通过调用开发人员预先开发的插件来实现对原生操作系统的底层能力的调用。
然而,在跨平台移动应用开发框架中引入插件时,不同的插件之间可能存在相互依赖,例如,实现消息推送功能的插件依赖于实现用户登录功能的插件,实现用户登录功能的插件又需要依赖于获取设备信息的插件。插件之间的相互依赖程度较高,影响前端开发的灵活度。
发明内容
本公开的实施例提供一种插件处理方法、装置、设备及存储介质,用以解决插件之间相互依赖程度较高影响前端开发的灵活度的问题。
第一方面,本公开的实施例提供一种插件处理方法,包括:
获取开发项目的插件引用信息;
根据所述插件引用信息和预设的插件容器,确定所述开发项目所引用的第一插件和所述第一插件所依赖的第二插件;
如果所述开发项目未引用所述第二插件,则在所述开发项目中为所述第二插件生成对应的插件接口。
第二方面,本公开的实施例提供一种插件处理装置,包括:
获取模块,用于获取开发项目的插件引用信息;
确定模块,用于根据所述插件引用信息和预设的插件容器,确定所述开发项目所引用的第一插件和所述第一插件所依赖的第二插件;
生成模块,用于如果所述开发项目未引用所述第二插件,则在所述开发项目中为所述第二插件生成对应的插件接口。
第三方面,本公开的实施例提供一种电子设备,包括:
存储器和处理器;
所述存储器用于存储程序指令;
所述处理器用于调用所述存储器中的程序指令执行如上述第一方面所述的方法。
第四方面,本公开的实施例提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被执行时,实现如上述第一方面所述的方法。
第五方面,本公开的实施例提供了一种包含指令的程序产品,所述程序产品包括计算机程序,所述计算机程序被处理器执行时实现如第一方面所述的方法。
本公开的实施例提供的插件处理方法、装置、设备及存储介质,通过开发项目的插件引用信息和预设的插件容器,确定开发项目所引用的第一插件和第一插件所依赖的第二插件,如果开发项目未引用第二插件,则在开发项目中生成第二插件的接口。因此,通过为开发项目未引用、但第一插件所依赖的第二插件生成插件接口,用户可以根据生成的第二插件的插件接口编写第二插件,而无需强制用户在开发项目中引用指定的第二插件,降低了插件之间的耦合度,提高了开发过程中插件引用的灵活性,提高了用户体验。
本公开的各种可行实施例及其技术优势将在下文详述。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1为本公开的一实施例提供的插件依赖示例图;
图2为本公开的一实施例提供的插件处理方法适用的网络架构示例图;
图3为本公开的一实施例提供的插件处理方法的流程示意图;
图4为本公开的另一实施例提供的插件处理方法的流程示意图;
图5为本公开的另一实施例提供的插件处理方法的流程示意图;
图6为本公开的一实施例提供的插件容器的架构示例图;
图7为本公开的一实施例提供的插件处理装置的结构示意图;
图8为本公开的一实施例提供的一种电子设备的结构示意图;
图9为本公开的一实施例提供的插件处理装置的框图。
通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
首先对本公开的实施例所涉及的名词进行解释:
插件(Plug-in):由插件开发人员通过编程语言编写且进行了封装的程序,能够实现一定的功能。插件包括插件接口和功能实现,插件接口用于向外提供调用插件的接口,还用于向外描述插件所能够实现的功能,功能实现用于具体实现插件的功能。
应用于前端开发的跨平台移动应用开发框架(比如Flutter框架、React Native框架)在实现部分功能,比如数据持久化、消息推送以及摄像头硬件调用时,需要通过调用预先开发的插件,来调用原始操作系统(例如安卓系统)的底层能力。在跨平台移动应用开发框架中引用预先开发的插件时,这些预先开发好的插件之间存在相互依赖,比如实现消息推送功能的插件依赖于实现用户登录功能的插件,实现用户登录功能的插件又需要依赖于获取设备信息的插件,导致进行项目开发人员引用实现消息推送功能的插件时,不得不同时引用实现用户登录功能的插件和获取设备信息的插件,限制了前端开发的灵活程度。其中,插件依赖于另一个插件,是指插件所需要的输入数据需要由另一个插件提供。
以图1为例,插件A依赖于插件B,插件E依赖于插件B和插件F,插件C依赖于插件D,插件D又依赖于插件G。如果项目开发人员在编写开发项目时,想要引用插件A、插件E和插件C,至少还要同时引用插件B、插件D和插件G,才能保证开发项目的实现。
因此,插件之间的相互依赖程度较高,导致项目开发人员在引用插件时不得不引入插件开发人员在开发时为该插件提供的依赖插件,也即插件开发人员为该插件指定的依赖插件。例如,项目开发人员在实现消息推送时并不希望进行用户登录,或者希望通过其它方式进行用户登录而不是通过插件开发人员提供的实现用户登录的插件进行用户登录,然而插件开发人员在设计实现消息推送的插件时同时指定了该实现消息推送插件所依赖的实现用户登录的插件,导致项目开发人员不得不引用插件开发人员提供的实现用户登录的插件。可见,插件之间的相互依赖程度较高导致前端开发的灵活度不足。
本公开的实施例提供的插件处理方法、装置、设备及存储介质,在开发项目的开发阶段,获取开发项目的插件引用信息,根据插件引用信息和预设的插件容器,确定开发项目所引用的第一插件和第一插件所依赖的第二插件,如果开发项目未引用第二插件,则在开发项目中为第二插件生成对应的插件接口。因此,在开发项目中未引用第一插件所依赖的第二插件时,通过生成第二插件对应的插件接口,以供项目开发人员根据插件接口编写第二插件的功能实现,无需强制开发项目中应用插件开发人员指定的第二插件,有效地提高了开发过程中插件引用的灵活度,提高了前端开发的灵活度,进而提高了用户体验。
本公开的实施例提供的插件处理方法,可以适用于图2所示的网络架构示例图。如图2所示,该网络架构包括:终端设备201和服务器202。项目开发人员可以在终端设备201上进行项目开发,服务器202上存放着插件开发人员开发的插件容器,当然插件容器也可存放在终端设备201上。终端设备201上的开发项目可以引用插件容器中的插件,通过插件引用来实现调用原生操作系统的底层能力。上述终端设备可以是计算机、平板电脑、智能手机等设备,服务器202可以是单个服务器也可以是服务器群。
下面以具体地实施例对本公开的实施例的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本公开的实施例的实施例进行描述。
图3为本公开的一实施例提供的插件处理方法的流程示意图,该方法的执行主体为终端设备。如图3所示,该方法包括:
S301、获取开发项目的插件引用信息。
其中,开发项目比如为应用程序开发项目,插件引用信息中可包括开发项目所引用的插件的插件接口。为了便于区别描述,将开发项目所引用的插件称为第一插件,将第一插件依赖的插件称为第二插件,第一插件的数目为一个或多个,第二插件的数目也为一个或多个,第一插件和第二插件中可能存在相同的插件。例如,开发项目引用了插件A和插件B,同时插件B是插件A所依赖的插件,因此,插件B既是第一插件,也是第二插件。
具体的,项目开发人员在编写开发项目的代码时,需要在开发项目中声明该开发项目所需要引用的插件,因此可从开发项目的这些声明内容中获得开发项目的插件引用信息。例如,可在开发项目所在的编译器中读取开发项目的插件引用信息。
可选的,可通过Gradle插件中的PluginTools工具,在开发项目所在的编译器中读取开发项目的插件引用信息。其中,Gradle插件是一款帮助开发人员编译、自动化运行和分发软件的工具。
S302、根据插件引用信息和预设的插件容器,确定开发项目所引用的第一插件和第一插件所依赖的第二插件。
其中,由插件开发人员预先开发插件容器,插件容器中包括多个插件,每个插件之间的耦合程度较低,也即依赖程度较低。每个插件又包括插件接口和功能实现,其中,插件接口是对插件的功能的抽象描述,功能实现是插件的功能的具体代码实现。
作为示例的,登录插件的插件接口可表示为下述程序代码:
public interface AccountProducer extends DataProducer{String getToken();String getPhone();}。
其中,“String getToken()”用于获取“Token”,“String getPhone()”用于获取手机号,“Token”是进行用户登录所需要的令牌。因此,通过该示例,可以理解插件接口中的“String getToken()”和“String getPhone()”都为插件的功能的抽象描述,而插件的功能实现为包括“String getToken()”和“String getPhone()”的具体实现过程的代码。
具体的,由于插件引用信息中包括第一插件的插件接口,插件容器包括多个插件,各插件包括插件的插件接口和插件的功能实现,因此,可根据第一插件的插件接口,在插件容器中查找到第一插件,同时确定第一插件所依赖的第二插件。
S303、如果开发项目未引用第二插件,则在开发项目中为第二插件生成对应的插件接口。
具体的,在确定第一插件所依赖的第二插件后,可通过确定插件引用信息中是否包括第二插件的插件接口,或者通过确定第一插件是否包括第二插件,来确定开发项目是否引用了第二插件。如果开发项目未引用第二插件,也即如果存在未被开发项目引用的第二插件,则在开发项目中为未被开发项目引用的第二插件生成对应的插件接口。若开发项目未引用的第二插件的数目为一个,则为该一个第二插件生成对应的插件接口,若开发项目为引用的第二插件的数目为多个,则为该多个第二插件分别生成对应的插件接口。
具体的,为未被开发项目引用的第二插件生成对应的插件接口描述了第二插件所需要实现的功能,也即对第二插件的功能的抽象描述,包括描述第二插件能够获取的数据和/或第二插件能够输出的数据。因此,项目开发人员可以依据生成的第二插件的插件接口知道第二插件所需要实现的功能,通过编写代码来提供第二插件的功能实现,进而实现自己的第二插件,而无需强制使用插件开发人员在插件容器中提供的插件。
本公开实施例中,在开发项目引用了第一插件但未引用第一插件所依赖的第二插件时,在开发项目中生成第二插件的插件接口,通过为项目开发人员提供第二插件的插件接口,辅助开发人员了解第二插件所需要实现的功能,由项目开发人员自行实现第二插件,而无需强制开发项目引入插件开发人员在插件容器中开发的第二插件,有效地降低了插件之间的耦合程度,提高了前端开发的灵活度。
在一些实施例中,插件容器中的各插件的插件接口包括数据输出接口和/或数据输入接口,以便插件通过插件接口输出数据或者获取数据。
具体的,在插件的功能包括数据输出功能和数据获取功能时,插件的插件接口同时包括数据输出接口和数据输入接口。例如,功能为获取设备信息的插件,即需要实现获取设备信息的功能,又需要实现将获取的设备信息输出的功能,因此该插件既包括数据输出接口和数据输入接口。同理,在插件的功能只包括数据输出功能时,插件的插件接口只包括数据输出接口,在插件的功能只包括数据获取功能时,插件的插件接口只包括数据输入接口。
在一些实施例中,插件容器还包括多个插件的配置信息,各插件的配置信息用于描述插件提供的输出数据和/或插件依赖的输入数据,以便通过插件的配置信息了解到插件提供的输出数据和/或插件依赖的输入数据,同时也便于确定插件之间的依赖关系。
具体的,插件的配置信息可保存在插件的配置文件中,在插件容器中,保存着多个插件和各插件的配置文件,在插件的配置文件中描述着插件的配置信息,也即描述着插件提供的输出数据和/或插件依赖的输入数据。根据插件的配置信息,能够确定插件所依赖的插件,当插件依赖的输入数据的全部或部分为另一插件的输出数据时,该插件依赖于该另一插件。
作为示例的,WebView插件的配置信息可表示为下述程序代码:
in:com.flutter.container.base.producer.AccountProducer;
in:com.flutter.container.base.producer.DeviceDataProducer;
in:com.flutter.container.base.producer.LocationDataProducer;
out:com.flutter.container.base.producer.WebViewProducer。
其中,WebView插件为实现网页视图的插件,“in:”表示插件依赖的输入数据,“out:”表示插件提供的输出数据。上述四行代码分别表示:WebView插件依赖账户信息、WebView插件依赖设备信息、WebView插件依赖位置信息、WebView插件提供网页视图。
在插件容器包括包括多个插件的配置信息的基础上,图4为本公开的另一实施例提供的插件处理方法的流程示意图,该方法的执行主体为终端设备。如图4所示,该方法包括:
S401、获取开发项目的插件引用信息。
具体的,S401可参照S301的具体描述,不再赘述。
S402、根据所述插件引用信息,确定第一插件。
具体的,由于插件引用信息中包括第一插件的插件接口,插件容器包括多个插件,各插件包括插件的插件接口和插件的功能实现,因此,可根据第一插件的插件接口,在插件容器中查找到第一插件。
S403、在插件容器中,获取第一插件依赖的输入数据。
具体的,可在插件容器中,获取第一插件的配置信息,从第一插件的配置信息中,获取第一插件所依赖的输入数据。
S404、根据第一插件依赖的输入数据,确定第二插件。
具体的,可将提供该输入数据的插件确定为第二插件。例如,实现用户登录的插件所依赖的输入数据包括设备信息,因此提供设备信息的插件为实现用户登录插件所依赖的插件。
S405、如果开发项目未引用第二插件,则在开发项目中为第二插件生成对应的插件接口。
具体的,S405可参照S303的具体描述,不再赘述。
本公开实施例中,确定开发项目所引用的第一插件,通过第一插件的配置信息中第一插件依赖的输入数据,确定第一插件所依赖的第二插件,在开发项目未引用第二插件时,在开发项目中生成第二插件的插件接口,通过为项目开发人员提供第二插件的插件接口,辅助开发人员了解第二插件所需要实现的功能,由项目开发人员自行实现第二插件,而无需强制开发项目引入插件开发人员在插件容器中开发的第二插件,有效地降低了插件之间的耦合程度,提高了前端开发的灵活度。
在插件容器包括包括多个插件的配置信息的基础上,图5为本公开的另一实施例提供的插件处理方法的流程示意图,该方法的执行主体为终端设备。如图5所示,该方法包括:
S501、获取开发项目的插件引用信息。
具体的,S501可参照S301的具体描述,不再赘述。
S502、根据插件引用信息,确定第一插件。
具体的,由于插件引用信息中包括第一插件的插件接口,插件容器包括多个插件,各插件包括插件的插件接口和插件的功能实现,因此,可根据第一插件的插件接口,在插件容器中查找到第一插件。
S503、在插件容器中,获取第一插件依赖的输入数据。
具体的,在插件容器中,获取第一插件的配置信息,从第一插件的配置信息中,获取第一插件依赖的输入数据。
S504、根据第一插件依赖的输入数据,确定第二插件。
具体的,可将提供第一插件所依赖的输入数据的插件确定为第二插件。
S505、在插件容器中,获取第一插件提供的输出数据。
具体的,在第一插件的配置信息中,获取第一插件提供的输出数据。
S506、通过将第一插件提供的输出数据与第一插件依赖的输入数据进行比较,确定开发项目是否引用第二插件。
具体的,若开发项目仅引用了一个第一插件,则确定该第一插件提供的输出数据是否包括第一插件依赖的输入数据,若是,则第一插件不依赖于其它插件,也即不存在第一插件所依赖的第二插件,开发项目也无需引用第二插件。若开发项目引用了多个第一插件,则获取所有第一插件提供的输出数据和所有第一插件依赖的输入数据,将所有第一插件提供的输出数据与所有第一插件依赖的输入数据进行比较,若所有第一插件提供的输出数据包括所有第一插件依赖的输入数据,则确定开发项目引用了所有的第二插件,否则确定存在未被开发项目引用的第二插件。
具体的,若开发项目引用了所有的第二插件,则可以进行开发项目的编译过程,否则执行S507。
S507、如果开发项目未引用第二插件,则在开发项目中为第二插件生成对应的插件接口。
具体的,S507可参照S303的具体描述,不再赘述。
本公开实施例中,确定开发项目所引用的第一插件,在插件容器中,获取第一插件提供的输出数据和依赖的输入数据,通过第一插件提供的输出数据和第一插件依赖的输入数据的比较,确定开发项目是否引用第二插件,在开发项目未引用第二插件时,在开发项目中生成第二插件的插件接口,通过为项目开发人员提供第二插件的插件接口,辅助开发人员了解第二插件所需要实现的功能,由项目开发人员自行实现第二插件,而无需强制开发项目引入插件开发人员在插件容器中开发的第二插件,有效地降低了插件之间的耦合程度,提高了前端开发的灵活度。
在一些实施例中,如果开发项目未引用第二插件,则可生成包括所有未被开发项目引用的第二插件的插件接口的类。其中,类是面向对象程序设计(Object-OrientedProgramming,OOP)实现信息封装的数据类型。
作为示例的,以图1所述的插件依赖关系为例,若开发项目中引用了插件A和插件C,但未引用插件B、插件D和插件G,则生成包括插件B的插件接口、插件D的插件接口和插件G的插件接口的类,该类的程序代码为下:
public abstract class AbsContainerDataProducer implementsBDataProducer,DDataProducer,GDataProducer{
//实现插件B的插件接口、插件D的插件接口、插件G的插件接口
}。其中,“AbsContainerDataProducer”表示生成的类,BDataProducer,DDataProducer,GDataProducer分别为插件B的插件接口、插件D的插件接口、插件G的插件接口。
在一些实施例中,插件容器中,除插件接口和功能实现外,各插件还包括与功能实现对应的功能实现索引。在项目编译过程中,通过该功能实现索引能够建立功能实现与插件接口之间一一对应的映射关系,实现开发项目基于插件接口对插件的调用。
在一些实施例中,项目开发人员根据第二插件的插件接口,编写第二插件的功能实现,同样可以在第二插件中为第二插件的功能实现添加对应的功能实现索引。在开发项目的编译过程中,在第二插件中检测功能实现索引,根据该功能实现索引找到与该功能实现索引对应的功能实现,建立该功能实现与第二插件的插件接口的映射关系。因此,基于第二插件的功能实现与第二插件的插件接口之间的映射关系,开发项目能够将通过插件接口调用第二插件的功能实现,提高插件调用的效率。
在一些实施例中,在开发项目的编译过程中,同样可在第一插件中检测功能实现索引,根据该功能实现索引找到与该功能实现索引对应的功能实现,建立该功能实现与第一插件的插件接口的映射关系。因此,基于第一插件的功能实现与第一插件的插件接口之间的映射关系,开发项目能够将通过插件接口调用第一插件的功能实现,提高插件调用的效率。
可选的,功能实现索引可为功能实现的注解。
可选的,在开发项目编译过程中,可通过Gradle插件中的Drouter工具,读取第一插件中的注解和/或第二插件中的注解,根据读取的注解获取第一插件的功能实现和/或第二插件的功能实现,运用Javaassist技术建立第一插件的插件接口与第一插件的功能实现之间的映射关系和/或建立第二插件的插件接口与第二插件的功能实现之间的映射关系。其中,Javaassist技术是一个高层的Java字节码处理类库,能动态生成类,修改类。
作为示例的,实现用户登录的插件的注解和功能实现的程序代码如下:
(1)@Service(function=AccountProducer.class)
(2)public class AccountProducerImpl implements AccountProducer{
@Override
public String getToken(){
return Login.getToken();}
@Override
public String getPhone(){
return Login.getPhone();
}}。
其中,(1)中“@Service(function=AccountProducer.class)”为注解,(2)中的内容为功能实现,“AccountProducerImpl”为功能实现的函数名,“AccountProducer”为插件接口的函数名。通过Drouter工具,除登录插件以外的其它插件,可以通过下述代码直接调用登录插件:
DRouter.build(AccountProducer.class).getService(new Object[0])。
为了更清楚的理解插件容器,图6示出了插件容器的架构示例图。如图6所示,插件容器包括编译工具(例如Gradle插件、Gradle插件中的PluginTools工具、Gradle插件中的Drouter工具)、多个插件和数据总线,数据总线包括多个插件的插件接口。其中,插件比如登录插件、设备信息插件、网页视图插件、消息推送插件、分享插件、地图插件、支付插件,各插件具有相应的插件接口。
图7为本公开的一实施例提供的插件处理装置的结构示意图。如图7所示,该装置包括:
获取模块701,用于获取开发项目的插件引用信息;
确定模块702,用于根据插件引用信息和预设的插件容器,确定开发项目所引用的第一插件和第一插件所依赖的第二插件;
生成模块703,用于如果开发项目未引用第二插件,则在开发项目中为第二插件生成对应的插件接口。
在一种可能的实现方式中,插件容器包括多个插件,各插件的插件接口包括数据输出接口和/或数据输入接口。
在一种可能的实现方式中,插件容器还包括多个插件的配置信息,各插件的配置信息用于描述插件提供的输出数据和/或插件依赖的输入数据。
在一种可能的实现方式中,确定模块702,具体用于:
根据插件引用信息,确定第一插件;
在插件容器中,获取第一插件依赖的输入数据;
根据第一插件依赖的输入数据,确定第二插件。
在一种可能的实现方式中,确定模块702,还用于:
在插件容器中,获取第一插件提供的输出数据;
通过将第一插件提供的输出数据与第一插件依赖的输入数据进行比较,确定开发项目是否引用第二插件。
在一种可能的实现方式中,在插件容器中,各插件还包括插件的功能实现和与功能实现对应的功能实现索引。
在一种可能的实现方式中,该装置还包括:
映射模块,用于在开发项目的编译过程中,在第二插件中检测功能实现索引,在开发项目中获取与检测到的功能实现索引对应的功能实现,建立检测到的功能实现索引所对应的功能实现与第二插件的插件接口的映射关系。
在一种可能的实现方式中,该装置还包括:
映射模块,用于在开发项目的编译过程中,在第一插件的插件接口中检测功能实现索引,在插件容器中获取与检测到的功能实现索引对应的功能实现,建立检测到的功能实现索引对应的功能实现与第一插件的的插件接口的映射关系。
图7提供的插件处理装置,可以执行上述相应方法实施例,其实现原理和技术效果类似,在此不再赘述。
图8为本公开的一实施例提供的一种电子设备的结构示意图。如图8所示,该电子设备可以包括:处理器801和存储器802。存储器802用于存储计算机执行指令,处理器801执行计算机程序时实现如上述任一实施例的方法。
上述的处理器801可以是通用处理器,包括中央处理器CPU、网络处理器(networkprocessor,NP)等。上述存储器802可能包含随机存取存储器(random access memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
本公开的一实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行如上述任一实施例的方法。
本公开的一实施例还提供一种程序产品,所述程序产品包括计算机程序,所述计算机程序存储在存储介质中,至少一个处理器可以从所述存储介质中读取所述计算机程序,所述至少一个处理器执行所述计算机程序时可实现上述任一实施例的方法。
图9为本公开的一实施例提供的插件处理装置900的框图。例如,装置900可以被提供为一计算机。参照图9,装置900包括处理组件901,其进一步包括一个或多个处理器,以及由存储器902所代表的存储器资源,用于存储可由处理组件901的执行的指令,例如应用程序。存储器902中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件901被配置为执行指令,以执行上述任一实施例的方法。
装置900还可以包括一个电源组件903被配置为执行装置900的电源管理,一个有线或无线网络接口904被配置为将装置900连接到网络,和一个输入输出(I/O)接口905。装置900可以操作基于存储在存储器902的操作系统,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM或类似。
可以理解的是,在本公开实施例中涉及的“第一”、“第二”仅为描述方便进行的区分,并不用来限制本公开实施例的范围。
可以理解的是,在本公开实施例中涉及的各种数字编号仅为描述方便进行的区分,并不用来限制本公开实施例的范围。
可以理解的是,在本公开的实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本公开实施例的实施过程构成任何限定。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开的实施例旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求书指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求书来限制。

Claims (18)

1.一种插件处理方法,其特征在于,所述方法包括:
获取开发项目的插件引用信息;
根据所述插件引用信息和预设的插件容器,确定所述开发项目所引用的第一插件和所述第一插件所依赖的第二插件;
如果所述开发项目未引用所述第二插件,则在所述开发项目中为所述第二插件生成对应的插件接口。
2.根据权利要求1所述的方法,其特征在于,所述插件容器包括多个插件,各所述插件的插件接口包括数据输出接口和/或数据输入接口。
3.根据权利要求2所述的方法,其特征在于,所述插件容器还包括所述多个插件的配置信息,各所述插件的配置信息用于描述所述插件提供的输出数据和/或所述插件依赖的输入数据。
4.根据权利要求3所述的方法,其特征在于,所述根据所述插件引用信息和预设的插件容器,确定所述开发项目所引用的第一插件和所述第一插件所依赖的第二插件,包括:
根据所述插件引用信息,确定所述第一插件;
在所述插件容器中,获取所述第一插件依赖的输入数据;
根据所述第一插件依赖的输入数据,确定所述第二插件。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在所述插件容器中,获取所述第一插件提供的输出数据;
通过将所述第一插件提供的输出数据与所述第一插件依赖的输入数据进行比较,确定所述开发项目是否引用所述第二插件。
6.根据权利要求3-5任一项所述的方法,其特征在于,在所述插件容器中,各所述插件还包括所述插件的功能实现和与所述功能实现对应的功能实现索引。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
在所述开发项目的编译过程中,在所述第二插件中检测功能实现索引;
在所述开发项目中获取与检测到的功能实现索引对应的功能实现;
建立所述检测到的功能实现索引所对应的功能实现与所述第二插件的插件接口的映射关系。
8.根据权利要求6所述的方法,其特征在于,所述方法还包括:
在所述开发项目的编译过程中,在所述第一插件中检测到功能实现索引;
在所述插件容器中获取与检测到的功能实现索引对应的功能实现;
建立所述检测到的功能实现索引所对应的功能实现与所述第一插件的插件接口的映射关系。
9.一种插件处理装置,其特征在于,所述装置包括:
获取模块,用于获取开发项目的插件引用信息;
确定模块,用于根据所述插件引用信息和预设的插件容器,确定所述开发项目所引用的第一插件和所述第一插件所依赖的第二插件;
生成模块,用于如果所述开发项目未引用所述第二插件,则在所述开发项目中为所述第二插件生成对应的插件接口。
10.根据权利要求9所述的装置,其特征在于,所述插件容器包括多个插件,各所述插件的插件接口包括数据输出接口和/或数据输入接口。
11.根据权利要求10所述的装置,其特征在于,所述插件容器还包括所述多个插件的配置信息,各所述插件的配置信息用于描述所述插件提供的输出数据和/或所述插件依赖的输入数据。
12.根据权利要求11所述的装置,其特征在于,所述确定模块,具体用于:
根据所述插件引用信息,确定所述第一插件;
在所述插件容器中,获取所述第一插件依赖的输入数据;
根据所述第一插件依赖的输入数据,确定所述第二插件。
13.根据权利要求11所述的装置,其特征在于,所述确定模块,还用于:
在所述插件容器中,获取所述第一插件提供的输出数据;
通过将所述第一插件提供的输出数据与所述第一插件依赖的输入数据进行比较,确定所述开发项目是否引用所述第二插件。
14.根据权利要求11-13任一项所述的装置,其特征在于,在所述插件容器中,各所述插件还包括所述插件的功能实现和与所述功能实现对应的功能实现索引。
15.根据权利要求14所述的装置,其特征在于,所述装置还包括:
映射模块,用于在所述开发项目的编译过程中,在所述第二插件中检测功能实现索引,在开发项目中获取与检测到的功能实现索引对应的功能实现,建立所述检测到的功能实现索引所对应的功能实现与所述第二插件的插件接口的映射关系。
16.根据权利要求14所述的装置,其特征在于,所述装置还包括:
映射模块,用于在所述开发项目的编译过程中,在所述第一插件的插件接口中检测功能实现索引,在所述插件容器中获取与检测到的功能实现索引对应的功能实现,建立所述检测到的功能实现索引对应的功能实现与所述第一插件的的插件接口的映射关系。
17.一种电子设备,包括:存储器和处理器;
所述存储器用于存储程序指令;
所述处理器用于调用所述存储器中的程序指令执行如权利要求1-8任一项所述的方法。
18.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序;所述计算机程序被执行时,实现如权利要求1-8任一项所述的方法。
CN202010899236.9A 2020-08-31 2020-08-31 插件处理方法、装置、设备及存储介质 Pending CN112052051A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010899236.9A CN112052051A (zh) 2020-08-31 2020-08-31 插件处理方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010899236.9A CN112052051A (zh) 2020-08-31 2020-08-31 插件处理方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN112052051A true CN112052051A (zh) 2020-12-08

Family

ID=73608445

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010899236.9A Pending CN112052051A (zh) 2020-08-31 2020-08-31 插件处理方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN112052051A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114461295A (zh) * 2021-12-27 2022-05-10 上海交通大学四川研究院 基于插件共享的软件系统生成方法、装置、设备及介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114461295A (zh) * 2021-12-27 2022-05-10 上海交通大学四川研究院 基于插件共享的软件系统生成方法、装置、设备及介质

Similar Documents

Publication Publication Date Title
CN109976761B (zh) 软件开发工具包的生成方法、装置及终端设备
CN110096338B (zh) 智能合约执行方法、装置、设备及介质
JP2020509443A (ja) ブロックチェーン上のネイティブ契約を実施するためのシステムおよび方法
US11726799B2 (en) Preventing framework conflicts for multi-OS applications
US8935686B2 (en) Error-code and exception-based function dispatch tables
CN110609687A (zh) 一种编译方法、装置、电子设备和存储介质
CN111767056A (zh) 一种源码编译方法、可执行文件运行方法及终端设备
US10620916B2 (en) Read-only communication operator
CN112052051A (zh) 插件处理方法、装置、设备及存储介质
US20160147559A1 (en) Modification of context saving functions
CN111625225A (zh) 一种程序指定数据输出方法和装置
CN111475148A (zh) 第三方依赖库隔离方法及装置、电子设备、存储介质
CN111475150A (zh) 一种跨语言绑定方法、装置、设备及存储介质
CN116048731A (zh) 代码处理方法、装置、电子设备及存储介质
CN115629795A (zh) 一种可执行文件的配置方法、装置及电子设备
US11573777B2 (en) Method and apparatus for enabling autonomous acceleration of dataflow AI applications
CN110333870B (zh) Simulink模型变量分配的处理方法、装置及设备
CN111782196A (zh) 基于mvp架构的开发方法及装置
CN112068814A (zh) 可执行文件的生成方法、装置、系统及介质
CN110673834A (zh) 一种源码调用方法、装置、计算机设备及存储介质
CN114371852B (zh) 一种编译方法及装置
KR20180048518A (ko) 패키지 파일에 대한 기능 확장 방법 및 시스템
CN114895921B (zh) 文件处理方法、装置、电子设备及存储介质
CN115543486B (zh) 面向无服务器计算的冷启动延迟优化方法、装置和设备
CN112328241B (zh) 一种应用程序开发中创建Android库模块依赖关系的方法及装置

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