CN110286956A - 插件的运行方法、装置及电子设备 - Google Patents
插件的运行方法、装置及电子设备 Download PDFInfo
- Publication number
- CN110286956A CN110286956A CN201910427737.4A CN201910427737A CN110286956A CN 110286956 A CN110286956 A CN 110286956A CN 201910427737 A CN201910427737 A CN 201910427737A CN 110286956 A CN110286956 A CN 110286956A
- Authority
- CN
- China
- Prior art keywords
- plug
- request message
- unit
- identity information
- host
- 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.)
- Granted
Links
Classifications
-
- 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)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供的插件的运行方法、装置及电子设备,通过对插件发送的第一请求消息进行拦截,并将第一请求消息中的插件的身份信息替换为宿主应用的身份信息,生成第二请求消息,然而将第二请求消息发送给底层系统,使得底层系统能够认可插件的运行身份,并为插件的运行提供服务;本实施例中,插件和宿主应用一样,都是通过调用标准框架接口来向底层系统获取服务。由此可见,在插件需要集成到多个宿主应用的场景下,插件获取服务时直接调用底层系统提供的标准框架接口,而无需适配各宿主应用提供的框架接口,因此,降低了插件的开发成本。
Description
技术领域
本发明实施例涉及终端技术领域,尤其涉及一种插件的运行方法、装置及电子设备。
背景技术
随着智能终端设备的快速普及,移动终端中可以安装的应用(Application,APP)的种类和数量越来越多。为了满足应用中的各功能的快速上线、快速推广的需求,目前通常采用插件技术。插件的本质在于不修改应用的主体程序的情况下,对应用的功能进行扩展和加强,从而解决操作上的不便或者增加新的功能,实现“即插即用”。
具体的,宿主应用安装在电子设备的底层系统中,宿主应用向插件提供插件系统,插件安装在插件系统中。可见,插件系统是一种介于电子设备的底层系统与插件之间的虚拟系统,插件系统在底层系统与插件之间起到中间代理层的作用。示例性的,插件系统需要为其上的插件提供类真实可运行的虚拟系统环境,还需要保证底层系统认可插件的运行身份,使得底层系统能够为插件提供服务和支持。
现有技术中,不同的宿主应用提供的插件系统不同,不同的插件系统向插件提供的用于与底层系统交互的框架接口(Framework)不同。因此,当插件集成到不同的宿主应用时,插件需要适配不同的框架接口,使得开发成本较高。
发明内容
本发明实施例提供一种插件的运行方法、装置及电子设备,以降低插件的开发和维护成本。
第一方面,本发明实施例提供一种插件的运行方法,所述插件安装于宿主应用中,所述方法应用于所述宿主应用,所述方法包括:
拦截第一请求消息,所述第一请求消息为通过调用标准框架接口向电子设备的底层系统请求服务的消息,所述第一请求消息包括调用进程的身份信息,所述标准框架接口为所述底层系统提供的框架接口;
若所述调用进程的身份信息为所述插件的身份信息,则将所述第一请求消息中的所述插件的身份信息替换为所述宿主应用的身份信息,生成第二请求消息;
将所述第二请求消息发送给所述底层系统,以使所述底层系统根据所述第二请求消息为所述插件的运行提供服务。
可选的,所述将所述第二请求消息发送给所述底层系统之后,还包括:
拦截所述底层系统发送的第一响应消息,所述第一响应消息中包括所述宿主应用的身份信息;
根据所述第一响应消息,确定所述第一响应消息对应的目标插件;
将所述第一响应消息中的所述宿主应用的身份信息替换为所述目标插件的身份信息,生成第二响应消息;
将所述第二响应消息发送给所述目标插件。
可选的,所述第一请求消息中还包括请求标识,对应地,所述第二请求消息中还包括所述请求标识;
所述将所述第二请求消息发送给所述底层系统之前,所述方法还包括:
记录所述请求标识与所述插件的关联关系;
所述根据所述第一响应消息,确定所述第一响应消息对应的目标插件,包括:
根据所述第一响应消息,确定与所述第一响应消息匹配的请求标识;
根据所述匹配的请求标识和所述关联关系,确定所述第一响应消息对应的目标插件。
可选的,所述拦截第一请求消息之前,所述方法还包括:
接收插件发送的启动请求,并根据所述启动请求,获取所述插件所需要的服务类型;
根据所述服务类型,判断是否已创建所述服务类型对应的拦截对象;
若未创建所述服务类型对应的拦截对象,则生成并初始化所述服务类型对应的拦截对象;
相应的,所述拦截第一请求消息,包括:
通过所述拦截对象拦截所述第一请求消息,所述第一请求消息所请求的服务类型与所述拦截对象对应的服务类型相同;
所述将所述第一请求消息中的所述插件的身份信息替换为所述宿主应用的身份信息,包括:
通过所述拦截对象将所述第一请求消息中的所述插件的身份信息替换为所述宿主应用的身份信息;
所述将所述第二请求消息发送给所述底层系统,包括:
通过所述拦截对象将所述第二请求消息发送给所述底层系统。
可选的,所述方法还包括:
若已创建所述服务类型对应的拦截对象,则复用所述拦截对象。
可选的,所述方法还包括:
针对每个所述服务类型对应的拦截对象,判断所述拦截对象是否在预设时长内未拦截到所述服务类型对应的请求消息;
若所述拦截对象在预设时长内未拦截到所述服务类型对应的请求消息,则删除所述拦截对象;
若所述拦截对象在预设时长内拦截到所述服务类型对应的请求消息,则保留所述拦截对象,以拦截所述服务类型对应的新的请求消息。
可选的,所述方法还包括:
若所述调用进程的身份信息为所述宿主应用的身份信息,则将所述第一请求消息发送给所述底层系统,以使所述底层系统根据所述第一请求消息为所述宿主应用的运行提供服务。
第二方面,本发明实施例提供一种插件的运行装置,所述插件安装于宿主应用中,所述装置应用于所述宿主应用,所述装置包括:
拦截模块,用于拦截第一请求消息,所述第一请求消息为通过调用标准框架接口向电子设备的底层系统请求服务的消息,所述第一请求消息包括调用进程的身份信息,所述标准框架接口为所述底层系统提供的框架接口;
处理模块,用于若所述调用进程的身份信息为所述插件的身份信息,则将所述第一请求消息中的所述插件的身份信息替换为所述宿主应用的身份信息,生成第二请求消息;
发送模块,用于将所述第二请求消息发送给所述底层系统,以使所述底层系统根据所述第二请求消息为所述插件的运行提供服务。
可选的,所述拦截模块,还用于拦截所述底层系统发送的第一响应消息,所述第一响应消息中包括所述宿主应用的身份信息;
所述处理模块,还用于根据所述第一响应消息,确定所述第一响应消息对应的目标插件;将所述第一响应消息中的所述宿主应用的身份信息替换为所述目标插件的身份信息,生成第二响应消息;
所述发送模块,还用于将所述第二响应消息发送给所述目标插件。
可选的,所述第一请求消息中还包括请求标识,对应地,所述第二请求消息中还包括所述请求标识;
所述处理模块,还用于在将所述第二请求消息发送给所述底层系统之前,记录所述请求标识与所述插件的关联关系;
所述处理模块,具体用于:
根据所述第一响应消息,确定与所述第一响应消息匹配的请求标识;
根据所述匹配的请求标识和所述关联关系,确定所述第一响应消息对应的目标插件。
可选的,所述装置还包括:对象维护模块,所述对象维护模块用于:
接收插件发送的启动请求,并根据所述启动请求,获取所述插件所需要的服务类型;
根据所述服务类型,判断是否已创建所述服务类型对应的拦截对象;
若未创建所述服务类型对应的拦截对象,则生成并初始化所述服务类型对应的拦截对象;
相应的,所述拦截模块具体用于:
通过所述拦截对象拦截所述第一请求消息,所述第一请求消息所请求的服务类型与所述拦截对象对应的服务类型相同;
所述处理模块具体用于:通过所述拦截对象将所述第一请求消息中的所述插件的身份信息替换为所述宿主应用的身份信息,生成第二请求消息;
所述发送模块具体用于:通过所述拦截对象将所述第二请求消息发送给所述底层系统。
可选的,所述对象维护模块还用于:
若已创建所述服务类型对应的拦截对象,则复用所述拦截对象。
可选的,所述对象维护模块还用于:
针对每个所述服务类型对应的拦截对象,判断所述拦截对象是否在预设时长内未拦截到所述服务类型对应的请求消息;
若所述拦截对象在预设时长内未拦截到所述服务类型对应的请求消息,则删除所述拦截对象;
若所述拦截对象在预设时长内拦截到所述服务类型对应的请求消息,则保留所述拦截对象,以拦截所述服务类型对应的新的请求消息。
可选的,所述发送模块还用于:
若所述调用进程的身份信息为所述宿主应用的身份信息,则将所述第一请求消息发送给所述底层系统,以使所述底层系统根据所述第一请求消息为所述宿主应用的运行提供服务。
第三方面,本发明实施例提供一种电子设备,包括:存储器、处理器以及计算机程序,所述计算机程序存储在所述存储器中,所述处理器运行所述计算机程序执行如第一方面任一项所述的方法。
第四方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质包括计算机程序,所述计算机程序被处理器执行时实现如第一方面任一项所述的方法。
本发明实施例提供的插件的运行方法、装置及电子设备,通过对插件发送的第一请求消息进行拦截,并将第一请求消息中的插件的身份信息替换为宿主应用的身份信息,生成第二请求消息,然而将第二请求消息发送给底层系统,使得底层系统能够认可插件的运行身份,并为插件的运行提供服务;本实施例中,插件和宿主应用一样,都是通过调用标准框架接口来向底层系统获取服务。由此可见,插件和宿主应用之间不存在继承关系,插件和宿主应用之间为并级关系,一方面,保证了插件和宿主应用之间的有效解耦。另一方面,在插件需要集成到多个宿主应用的场景下,插件获取服务时直接调用底层系统提供的标准框架接口,而无需适配各宿主应用提供的框架接口,因此,降低了插件的开发成本。进一步的,由于插件无需适配不同的宿主应用,因此,插件只需要维护一套代码,降低了插件代码的维护成本。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中插件运行系统的框架示意图;
图2为本发明一实施例提供的插件运行方法的流程示意图;
图3为本发明实施例中应用软件向底层系统获取服务的示意图;
图4为本发明实施例中插件向底层系统获取服务的示意图;
图5为本发明另一实施例提供的插件运行方法的流程示意图;
图6为本发明又一实施例提供的插件运行方法的流程示意图;
图7为本发明一实施例提供的插件运行装置的结构示意图;
图8为本发明另一实施例提供的插件运行装置的结构示意图;
图9为本发明实施例提供的电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
随着智能终端的快速普及,以及移动智能互联技术的发展,移动终端中可以安装的应用(Application,APP)的种类和数量越来越多。然而,这些应用软件通常面临开发周期长,复杂功能在线增、删、改困难的问题,使得应用软件在出现问题时无法及时修复,在需要增加新功能时,应用软件的新老版本收敛较慢,影响了软件用户体验。
为了满足应用软件中各功能能够快速在线增、删、改的需求,目前,应用软件通常采用插件框架技术。具体的,对应用软件的主体框架和功能进行解耦,应用软件只需实现最基础的主体框架即可。应用软件的各个功能被封装到各插件中,每个插件由其对应功能涉及的界面、业务逻辑和数据访问等代码组成。每个插件可以独立开发、测试和部署,从而满足快速在线增、删、改的需求。
具体的,应用软件安装在电子设备的底层系统中,应用软件向插件提供插件系统,从而各个插件安装在插件系统中。本实施例中,将提供了插件系统的应用软件称为宿主应用。
现有技术中,不同的宿主应用提供的插件系统不同,不同的插件系统向插件提供的用于与底层系统交互的框架接口(Framework)不同。因此,当插件集成到不同的宿主应用时,插件需要适配不同的框架接口,使得开发成本较高。示例性的,当插件集成到宿主应用1中时,插件需要适配宿主应用1提供的框架接口,当插件集成到宿主应用2中时,插件需要适配宿主应用2提供的框架接口,当插件集成到宿主应用2中时,插件需要适配宿主应用3提供的框架接口。某些应用场景中,插件需要集成到多个宿主应用中时,插件就需要分别适配各个宿主应用提供的框架接口,插件开发人员需要学习各个宿主应用提供的框架接口,导致增加插件的开发成本。进一步的,插件需要针对不同的宿主应用分别维护一套代码,导致插件的维护成本增加。
为了解决上述问题,本发明实施例提供一种插件的运行方法,应用于宿主应用,该宿主应用向插件提供的框架接口为底层系统提供的标准框架接口,插件通过调用标准框架接口与底层系统交互,获取插件运行所需要的各项服务。当插件需要集成到多个宿主应用时,无需再与各宿主应用分别进行接口适配,节省了插件的开发成本。
本实施例提供的插件运行方法,应用于插件的宿主应用,该方法所实现的功能可以通过电子设备中的处理器调用程序代码来实现,该程序代码还可以保存在计算机可读存储介质中。其中,宿主应用可应用于各种具有信息处理能力的电子设备,包括但不限于手机、平台电脑、台式机、电视机等。电子设备可以向宿主应用提供其运行所需的平台系统,例如:电子设备提供的底层系统可以为Android平台系统,也可以为Mac平台系统,还可以为Linux平台系统等。
下面以具体地实施例对本发明的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
图1为本发明实施例中插件运行系统的框架示意图。如图1所示,本实施例的插件运行系统包括:底层系统、宿主应用和插件,其中,宿主应用为插件提供了插件系统。本实施例以及后续实施例中,将宿主应用为插件提供的运行环境统称为插件系统。
其中,底层系统是电子设备的核心中枢系统,统一管理着电子设备的核心功能并统一对上层应用软件提供各种类型的服务。不同类型的服务可以有不同的核心功能响应处理,也可以有不同等级身份的安全验证机制。
宿主应用是电子设备应用的核心产品功能层,其中,插件系统为宿主应用的核心,提供了标准框架接口的通用拦截和反射代理,为插件提供真实可运行的系统环境。
插件是宿主应用的各功能的实现,借助于插件系统,插件可以与宿主应用同主进程运行,方便UI数据等主进程交互处理。
本实施例中,通过采用底层系统+宿主应用+插件的分层框架的插件运行系统,方便对各层数据进行解耦以及隔离控制。
图2为本发明一实施例提供的插件运行方法的流程示意图。本实施例的方法,可应用于如图1所示的插件运行系统。更具体的,本实施例的方法可应用于图1中的宿主应用。
如图2所示,本实施例的方法,包括:
S201:拦截第一请求消息,所述第一请求消息为通过调用标准框架接口向电子设备的底层系统请求服务的消息,所述第一请求消息包括调用进程的身份信息,所述标准框架接口为所述底层系统提供的框架接口。
S202:若所述调用进程的身份信息为所述插件的身份信息,则将所述第一请求消息中的所述插件的身份信息替换为所述宿主应用的身份信息,生成第二请求消息。
S203:将所述第二请求消息发送给所述底层系统,以使所述底层系统根据所述第二请求消息为所述插件的运行提供服务。
首先以安装在底层系统中的应用软件为例,描述应用软件向底层系统获取服务的过程。对于安装在底层系统中的各应用软件,底层系统可以为其提供各种类型的服务。其中,本实施例中的服务是指:应用软件在运行过程中所需要使用的基础服务。本实施例中的服务包括但不限于:WIFI服务、蓝牙服务、移动数据服务、拨打电话服务、地理位置请求服务等。
图3为本发明实施例中应用软件向底层系统获取服务的示意图。如图3所示,底层系统为安装在其上的各应用软件提供了标准框架接口,该标准框架接口中包括请求各种类型的服务所需要的方法和类。安装在底层系统中的各应用软件可以通过调用该标准框架接口来向底层系统获取服务。以Android平台系统为例,应用软件和底层系统为不同的进程,不同进程之间不能共享内存,Android系统中在不同进程之间进行数据通信时需要采用Android接口定义语言(Android Interface Definition Language,AIDL)。如图3所示,应用软件和底层系统之间通过AIDL进行通信。
在应用软件采用插件框架技术实现时,宿主应用直接安装在底层系统中,而插件是安装在宿主应用中。插件在运行过程中,插件也需要向底层系统获取服务。本实施例中,插件和宿主应用一样,都是通过调用标准框架接口来向底层系统获取服务。
由此可见,插件和宿主应用之间不存在继承关系,插件和宿主应用之间为并级关系,一方面,保证了插件和宿主应用之间的有效解耦。另一方面,在插件需要集成到多个宿主应用的场景下,插件获取服务时直接调用底层系统提供的标准框架接口,而无需适配各宿主应用提供的框架接口,因此,降低了插件的开发成本。进一步的,由于插件无需适配不同的宿主应用,因此,插件只需要维护一套代码,降低了插件代码的维护成本。
然而,由于插件是安装在宿主应用中,并不是直接安装在底层系统中,因此,插件如果直接调用底层系统提供的标准框架接口获取服务的话,底层系统会不认可插件的运行身份,导致插件获取不到服务。本实施例中,为了保证插件能够获取到服务,在宿主应用中为插件提供了插件系统。插件系统是一种介于电子设备的底层系统与插件之间的虚拟系统,插件系统在底层系统与插件之间起到中间代理层的作用。具体的,插件系统需要为上层的插件提供类真实可运行的虚拟系统环境,还需要保证底层系统认可插件的运行身份,使得底层系统能够为插件提供各项服务。
步骤S201中,拦截第一请求消息。该第一请求消息是插件或者宿主应用通过调用标准框架接口向电子设备的底层系统请求服务的消息。第一请求消息包括调用进程的身份信息。其中,调用进程是指发送该第一请求消息的进程。示例性的,若第一请求消息是插件发送的,该第一请求消息中的调用进程的身份信息为该插件的身份信息;若第一请求消息是宿主应用发送的,则该第一请求消息中的调用进程的身份信息为宿主应用的身份信息。
可以理解的,本实施例中的身份信息可以是能够标识一个进程的任意信息,例如:进程标识。
当第一请求消息中的调用进程的身份信息为宿主应用的身份信息时,说明该第一请求消息是宿主应用发送的。由于宿主应用是直接安装在底层系统中的,底层系统认可宿主应用的合法性,因此,将第一请求消息直接发送给底层系统,以使底层系统根据第一请求消息为宿主应用的运行提供服务。
当第一请求消息中的调用进程的身份信息为插件的身份信息时,说明该第一请求信息是插件发送的。如果直接将该请求信息转发给底层系统的话,由于插件并未直接安装在底层系统中,底层系统会不认可插件的运行身份,导致插件获取不到服务。
因此,本实施例步骤S202和S203中,当确定第一请求消息是插件发送的时,将第一请求消息中的插件的身份信息替换为宿主应用的身份信息,生成第二请求消息。然后,将第二请求消息发送给底层系统,以使底层系统根据第二请求消息为插件的运行提供服务。
一种可能的实施方式中,图2中的S201至S203可以由拦截对象执行。拦截对象是指通过对拦截类进行实例化得到的对象。其中,拦截类是用于实现对调用标准框架接口的消息进行拦截的类,拦截类中包括成员变量和成员方法。本实施例中,拦截对象可以是动态生成的,具体可以详见后续实施例的描述。下面结合图4描述拦截对象执行图2所示实施例的具体过程。
图4为本发明实施例中插件向底层系统获取服务的示意图。如图4所示,当插件调用标准框架接口获取服务时,如图4中虚线所示,拦截对象拦截到插件发送的第一请求消息,并将第一请求消息中的插件的身份信息替换为宿主应用的身份消息,然后再通过AIDL发送给底层系统。当宿主应用调用标准框架接口获取服务时,如图4中实线所示,拦截对象无需进行身份信息的替换,直接将第一请求消息通过AIDL发送给底层系统。
由此可见,本实施例中宿主应用为插件提供的插件系统,在插件运行过程中起到了“欺上瞒下”的中间代理作用。“欺上”是指插件系统为上层插件提供与底层系统类似的运行环境,使插件认为其运行的环境就是电子设备的标准底层系统,因此,插件通过调用底层系统提供的标准框架接口获取服务。“瞒下”是指插件系统对插件的身份进行伪装,使底层系统认为插件就是安装在底层系统中的合法应用,从而,底层系统能够为插件提供服务。
图5为本发明另一实施例提供的插件运行方法的流程示意图。在图2所示实施例的基础上,如图5所示,本实施例的方法,还可以包括S501至S504。本实施例的方法同样应用于宿主应用。具体的,本实施例的方法可以由宿主应用中的拦截对象执行。
S501:拦截所述底层系统发送的第一响应消息,所述第一响应消息中包括所述宿主应用的身份信息。
底层系统接收到第二请求消息后,由于第二请求消息被伪装成是宿主应用发送的,底层系统能够认可宿主应用的运行身份,因此,底层系统向宿主应用发送第一响应消息。可以理解的,底层系统认为该第二请求消息是宿主应用发送的,因此,底层系统在第一响应消息中携带的目标进程的身份信息为宿主应用的身份信息。
S502:根据所述第一响应消息,确定所述第一响应消息对应的目标插件。
可以理解的,本实施例中,拦截对象可以拦截到宿主应用中所有插件发送的请求消息,并对请求消息进行代理处理,例如:身份信息的替换。因此,拦截对象可以知道各个请求消息与插件之间的对应关系。因此,当拦截对象接收到响应消息后,可以确定出该响应消息应该对应哪个插件。
一种可能的实施方式中,插件向底层系统发送的请求消息中包括请求标识,在拦截对象将请求消息发送给底层系统之前,拦截对象还可以记录请求标识与插件的关联关系,即,记录该请求消息是由哪个插件发送的。这样,当拦截对象拦截到第一响应消息后,可以根据该第一响应消息确定出该响应消息所对应的请求标识,然后,再根据请求标识与插件之间的关联关系,确定出该第一响应消息所对应的目标插件。
S503:将所述第一响应消息中的所述宿主应用的身份信息替换为所述目标插件的身份信息,生成第二响应消息。
S504:将所述第二响应消息发送给所述目标插件。
拦截对象在确定出第一响应消息对应的目标插件后,将第一响应消息中的宿主应用的身份信息替换为目标插件的身份信息,生成第二响应消息,从而保证该第二响应消息能够被正确的转发至目标插件。
本实施例提供的插件的运行方法,通过拦截对象对插件发送的第一请求消息进行拦截,并将第一请求消息中的插件的身份信息替换为宿主应用的身份信息,生成第二请求消息,然而将第二请求消息发送给底层系统,使得底层系统能够认可插件的运行身份,并为插件的运行提供服务;本实施例中,插件和宿主应用一样,都是通过调用标准框架接口来向底层系统获取服务。由此可见,插件和宿主应用之间不存在继承关系,插件和宿主应用之间为并级关系,一方面,保证了插件和宿主应用之间的有效解耦。另一方面,在插件需要集成到多个宿主应用的场景下,插件获取服务时直接调用底层系统提供的标准框架接口,而无需适配各宿主应用提供的框架接口,因此,降低了插件的开发成本。进一步的,由于插件无需适配不同的宿主应用,因此,插件只需要维护一套代码,降低了插件代码的维护成本。
在上述实施例中,每个宿主应用中安装的插件数量可能较多,每个插件运行过程中所需要的服务类型也各不相同。示例性的,有些插件需要获取蓝牙服务,有些插件需要获取WIFI服务,有些插件需要获取移动数据服务和拨打电话的服务,有些插件需要WIFI服务和地理位置请求服务,等等。
为了提高各种服务类型的代理效率,并加快拦截对象的处理速度,本实施例中的插件环境采用动态代理技术。也就是说,并不是在插件系统启动时就对所有服务类型对应的拦截对象进行初始化,而是在确定需要某种服务类型时再动态生成该服务类型对应的拦截对象。并且,每种服务类型的拦截对象只需要初始化一次。
图6为本发明又一实施例提供的插件运行方法的流程示意图。本实施例示例的是拦截对象的动态生成过程。如图6所示,本实施例的方法,包括:
S601:接收插件发送的启动请求,并根据所述启动请求,获取所述插件所需要的服务类型。
S602:根据所述服务类型,判断是否已创建所述服务类型对应的拦截对象。
S603:若未创建所述服务类型对应的拦截对象,则生成并初始化所述服务类型对应的拦截对象。
S604:若已创建所述服务类型对应的拦截对象,则复用所述拦截对象。
具体的,插件在宿主应用中启动时,会在启动请求中携带其运行所需要的服务类型。示例性的,假设宿主应用中安装的第一个插件为插件1,插件1在宿主应用中启动时,会通知宿主应用其需要的服务类型为蓝牙服务。宿主应用通过判断确定插件系统中未创建蓝牙服务对应的拦截对象,因此,宿主应用生成并初始化蓝牙服务对应的拦截对象。当插件2在宿主应用中启动时,假设插件2需要的服务类型为WIFI服务和蓝牙服务。由于插件系统中已创建蓝牙服务对应的拦截对象,因此,直接复用之前创建的蓝牙服务对应的拦截对象即可。由于插件系统中未创建WIFI服务对应的拦截对象,因此,需要生成并初始化WIFI服务对应的拦截对象。
其中,本实施例中生成并初始化拦截对象是指,生成该拦截对象所对应的服务类型所需要的运行环境,包括但不限于:该服务类型对应的系统类的加载、拦截对象的创建、系统服务接口的替换等。
以Android平台系统为例,插件系统可以提供Activity、Service、BroadcastReceiver以及ContentProvider等标准框架接口的通用拦截和反射代理。
进一步的,本实施例中,还可以进一步替换LocalActivityManager的Instrumentation为重写的PluginInstrumentation,从而,可以实现对所有服务的拦截处理和全生命周期的反射回调处理。
一种可能的实施方式中,采用JAVA动态代理(Java Dynamic Proxy)技术生成面向切面编程(Aspect Oriented Programming,AOP)拦截对象。其中,动态代理是利用Java的反射技术(Java Reflection),在运行时创建一个实现某些给定接口的新类(也称动态代理类)及其实例。也就是说,AOP拦截对象是在运行中动态生成的,而无需静态注册。同时,基于AOP技术,在插件动态运行时改变原有代码执行规则,即无需对代码进行静态修改,即可在运行时动态生成。
本实施例中,通过采用运行时的动态代理技术,使得每种服务类型对应的拦截对象只在首次使用时创建一次,后续同种服务类型则可以复用该拦截对象,降低了系统创建拦截对象的开销,保证了插件系统的稳定运行和运行速度。
在上述实施例的基础上,动态生成拦截对象之后,还可以对各个拦截对象进行监控,若其中某个拦截对象长时间未使用,或者后续不再需要时,可以将该拦截对象删除,从而可以更加有效地对插件运行进行动态控制和系统资源性能动态优化。
一种可能的实施方式中,针对每个服务类型对应的拦截对象,判断所述拦截对象是否在预设时长内未拦截到所述服务类型对应的请求消息。若所述拦截对象在预设时长内未拦截到所述服务类型对应的请求消息,则删除所述拦截对象。若所述拦截对象在预设时长内拦截到所述服务类型对应的请求消息,则保留所述拦截对象,以拦截所述服务类型对应的新的请求消息。
本实施例中,通过对拦截对象的数量进行动态控制,可以根据插件所需的服务类型进行灵活增减,避免了静态注册导致的组件数量冗余问题。
图7为本发明一实施例提供的插件运行装置的结构示意图。如图7所示,本实施例的插件运行装置700,包括:拦截模块701、处理模块702和发送模块703。
其中,拦截模块701,用于拦截第一请求消息,所述第一请求消息为通过调用标准框架接口向电子设备的底层系统请求服务的消息,所述第一请求消息包括调用进程的身份信息,所述标准框架接口为所述底层系统提供的框架接口;
处理模块702,用于若所述调用进程的身份信息为所述插件的身份信息,则将所述第一请求消息中的所述插件的身份信息替换为所述宿主应用的身份信息,生成第二请求消息;
发送模块703,用于将所述第二请求消息发送给所述底层系统,以使所述底层系统根据所述第二请求消息为所述插件的运行提供服务。
本实施例的装置,可用于执行上述如图2所示的方法实施例,其实现原理和技术效果类似,此处不再赘述。
图8为本发明另一实施例提供的插件运行装置的结构示意图。在图7所示实施例的基础上,如图8所示,本实施例的插件运行装置700,还可以包括:对象维护模块704。
可选的,所述拦截模块701,还用于拦截所述底层系统发送的第一响应消息,所述第一响应消息中包括所述宿主应用的身份信息;
所述处理模块702,还用于根据所述第一响应消息,确定所述第一响应消息对应的目标插件;将所述第一响应消息中的所述宿主应用的身份信息替换为所述目标插件的身份信息,生成第二响应消息;
所述发送模块703,还用于将所述第二响应消息发送给所述目标插件。
可选的,所述第一请求消息中还包括请求标识,对应地,所述第二请求消息中还包括所述请求标识;
所述处理模块702,还用于在将所述第二请求消息发送给所述底层系统之前,记录所述请求标识与所述插件的关联关系;
所述处理模块702,具体用于:
根据所述第一响应消息,确定与所述第一响应消息匹配的请求标识;
根据所述匹配的请求标识和所述关联关系,确定所述第一响应消息对应的目标插件。
可选的,所述对象维护模块704用于:
接收插件发送的启动请求,并根据所述启动请求,获取所述插件所需要的服务类型;
根据所述服务类型,判断是否已创建所述服务类型对应的拦截对象;
若未创建所述服务类型对应的拦截对象,则生成并初始化所述服务类型对应的拦截对象;
相应的,所述拦截模块701具体用于:通过所述拦截对象拦截所述第一请求消息,所述第一请求消息所请求的服务类型与所述拦截对象对应的服务类型相同;
所述处理模块702具体用于:通过所述拦截对象将所述第一请求消息中的所述插件的身份信息替换为所述宿主应用的身份信息,生成第二请求消息;
所述发送模块703具体用于:通过所述拦截对象将所述第二请求消息发送给所述底层系统。
可选的,所述对象维护模块704还用于:
若已创建所述服务类型对应的拦截对象,则复用所述拦截对象。
可选的,所述对象维护模块704还用于:
针对每个所述服务类型对应的拦截对象,判断所述拦截对象是否在预设时长内未拦截到所述服务类型对应的请求消息;
若所述拦截对象在预设时长内未拦截到所述服务类型对应的请求消息,则删除所述拦截对象;
若所述拦截对象在预设时长内拦截到所述服务类型对应的请求消息,则保留所述拦截对象,以拦截所述服务类型对应的新的请求消息。
可选的,所述发送模块703还用于:
若所述调用进程的身份信息为所述宿主应用的身份信息,则将所述第一请求消息发送给所述底层系统,以使所述底层系统根据所述第一请求消息为所述宿主应用的运行提供服务。
本实施例的装置,可用于执行上述任一方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图9为本发明实施例提供的电子设备的结构示意图。如图9所示,本实施例的电子设备900,包括:处理器901以及存储器902;其中,存储器902,用于存储计算机程序;处理器901,用于执行存储器存储的计算机程序,以实现上述实施例中的插件运行方法。具体可以参见前述方法实施例中的相关描述。
可选地,存储器902既可以是独立的,也可以跟处理器901集成在一起。
当所述存储器902是独立于处理器901之外的器件时,所述电子设备900还可以包括:总线903,用于连接所述存储器902和处理器901。
本实施例提供的电子设备,可用于执行上述任一方法实施例中的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质包括计算机程序,所述计算机程序用于实现如上任一方法实施例中的技术方案。
在本发明所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个单元中。上述模块成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本发明各个实施例所述方法的部分步骤。
应理解,上述处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application Specific Integrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合申请所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。
总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本发明附图中的总线并不限定仅有一根总线或一种类型的总线。
上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于专用集成电路(Application Specific Integrated Circuits,简称:ASIC)中。当然,处理器和存储介质也可以作为分立组件存在于电子设备或主控设备中。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (16)
1.一种插件的运行方法,其特征在于,所述插件安装于宿主应用中,所述方法应用于所述宿主应用,所述方法包括:
拦截第一请求消息,所述第一请求消息为通过调用标准框架接口向电子设备的底层系统请求服务的消息,所述第一请求消息包括调用进程的身份信息,所述标准框架接口为所述底层系统提供的框架接口;
若所述调用进程的身份信息为所述插件的身份信息,则将所述第一请求消息中的所述插件的身份信息替换为所述宿主应用的身份信息,生成第二请求消息;
将所述第二请求消息发送给所述底层系统,以使所述底层系统根据所述第二请求消息为所述插件的运行提供服务。
2.根据权利要求1所述的方法,其特征在于,所述将所述第二请求消息发送给所述底层系统之后,还包括:
拦截所述底层系统发送的第一响应消息,所述第一响应消息中包括所述宿主应用的身份信息;
根据所述第一响应消息,确定所述第一响应消息对应的目标插件;
将所述第一响应消息中的所述宿主应用的身份信息替换为所述目标插件的身份信息,生成第二响应消息;
将所述第二响应消息发送给所述目标插件。
3.根据权利要求2所述的方法,其特征在于,所述第一请求消息中还包括请求标识,对应地,所述第二请求消息中还包括所述请求标识;
所述将所述第二请求消息发送给所述底层系统之前,所述方法还包括:
记录所述请求标识与所述插件的关联关系;
所述根据所述第一响应消息,确定所述第一响应消息对应的目标插件,包括:
根据所述第一响应消息,确定与所述第一响应消息匹配的请求标识;
根据所述匹配的请求标识和所述关联关系,确定所述第一响应消息对应的目标插件。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述拦截第一请求消息之前,所述方法还包括:
接收插件发送的启动请求,并根据所述启动请求,获取所述插件所需要的服务类型;
根据所述服务类型,判断是否已创建所述服务类型对应的拦截对象;
若未创建所述服务类型对应的拦截对象,则生成并初始化所述服务类型对应的拦截对象;
相应的,所述拦截第一请求消息,包括:
通过所述拦截对象拦截所述第一请求消息,所述第一请求消息所请求的服务类型与所述拦截对象对应的服务类型相同;
所述将所述第一请求消息中的所述插件的身份信息替换为所述宿主应用的身份信息,包括:
通过所述拦截对象将所述第一请求消息中的所述插件的身份信息替换为所述宿主应用的身份信息;
所述将所述第二请求消息发送给所述底层系统,包括:
通过所述拦截对象将所述第二请求消息发送给所述底层系统。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
若已创建所述服务类型对应的拦截对象,则复用所述拦截对象。
6.根据权利要求4所述的方法,其特征在于,所述方法还包括:
针对每个所述服务类型对应的拦截对象,判断所述拦截对象是否在预设时长内未拦截到所述服务类型对应的请求消息;
若所述拦截对象在预设时长内未拦截到所述服务类型对应的请求消息,则删除所述拦截对象;
若所述拦截对象在预设时长内拦截到所述服务类型对应的请求消息,则保留所述拦截对象,以拦截所述服务类型对应的新的请求消息。
7.根据权利要求1至3任一项所述的方法,其特征在于,所述方法还包括:
若所述调用进程的身份信息为所述宿主应用的身份信息,则将所述第一请求消息发送给所述底层系统,以使所述底层系统根据所述第一请求消息为所述宿主应用的运行提供服务。
8.一种插件的运行装置,其特征在于,所述插件安装于宿主应用中,所述装置应用于所述宿主应用,所述装置包括:
拦截模块,用于拦截第一请求消息,所述第一请求消息为通过调用标准框架接口向电子设备的底层系统请求服务的消息,所述第一请求消息包括调用进程的身份信息,所述标准框架接口为所述底层系统提供的框架接口;
处理模块,用于若所述调用进程的身份信息为所述插件的身份信息,则将所述第一请求消息中的所述插件的身份信息替换为所述宿主应用的身份信息,生成第二请求消息;
发送模块,用于将所述第二请求消息发送给所述底层系统,以使所述底层系统根据所述第二请求消息为所述插件的运行提供服务。
9.根据权利要求8所述的装置,其特征在于,
所述拦截模块,还用于拦截所述底层系统发送的第一响应消息,所述第一响应消息中包括所述宿主应用的身份信息;
所述处理模块,还用于根据所述第一响应消息,确定所述第一响应消息对应的目标插件;将所述第一响应消息中的所述宿主应用的身份信息替换为所述目标插件的身份信息,生成第二响应消息;
所述发送模块,还用于将所述第二响应消息发送给所述目标插件。
10.根据权利要求9所述的装置,其特征在于,所述第一请求消息中还包括请求标识,对应地,所述第二请求消息中还包括所述请求标识;
所述处理模块,还用于在将所述第二请求消息发送给所述底层系统之前,记录所述请求标识与所述插件的关联关系;
所述处理模块,具体用于:
根据所述第一响应消息,确定与所述第一响应消息匹配的请求标识;
根据所述匹配的请求标识和所述关联关系,确定所述第一响应消息对应的目标插件。
11.根据权利要求8至10任一项所述的装置,其特征在于,所述装置还包括:对象维护模块,所述对象维护模块用于:
接收插件发送的启动请求,并根据所述启动请求,获取所述插件所需要的服务类型;
根据所述服务类型,判断是否已创建所述服务类型对应的拦截对象;
若未创建所述服务类型对应的拦截对象,则生成并初始化所述服务类型对应的拦截对象;
相应的,所述拦截模块具体用于:通过所述拦截对象拦截所述第一请求消息,所述第一请求消息所请求的服务类型与所述拦截对象对应的服务类型相同;
所述处理模块具体用于:通过所述拦截对象将所述第一请求消息中的所述插件的身份信息替换为所述宿主应用的身份信息,生成第二请求消息;
所述发送模块具体用于:通过所述拦截对象将所述第二请求消息发送给所述底层系统。
12.根据权利要求11所述的装置,其特征在于,所述对象维护模块还用于:
若已创建所述服务类型对应的拦截对象,则复用所述拦截对象。
13.根据权利要求11所述的装置,其特征在于,所述对象维护模块还用于:
针对每个所述服务类型对应的拦截对象,判断所述拦截对象是否在预设时长内未拦截到所述服务类型对应的请求消息;
若所述拦截对象在预设时长内未拦截到所述服务类型对应的请求消息,则删除所述拦截对象;
若所述拦截对象在预设时长内拦截到所述服务类型对应的请求消息,则保留所述拦截对象,以拦截所述服务类型对应的新的请求消息。
14.根据权利要求8至10任一项所述的装置,其特征在于,所述发送模块还用于:
若所述调用进程的身份信息为所述宿主应用的身份信息,则将所述第一请求消息发送给所述底层系统,以使所述底层系统根据所述第一请求消息为所述宿主应用的运行提供服务。
15.一种电子设备,其特征在于,包括:存储器、处理器以及计算机程序,所述计算机程序存储在所述存储器中,所述处理器运行所述计算机程序执行如权利要求1至7任一项所述的方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910427737.4A CN110286956B (zh) | 2019-05-22 | 2019-05-22 | 插件的运行方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910427737.4A CN110286956B (zh) | 2019-05-22 | 2019-05-22 | 插件的运行方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110286956A true CN110286956A (zh) | 2019-09-27 |
CN110286956B CN110286956B (zh) | 2022-07-05 |
Family
ID=68002292
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910427737.4A Active CN110286956B (zh) | 2019-05-22 | 2019-05-22 | 插件的运行方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110286956B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112148414A (zh) * | 2020-09-30 | 2020-12-29 | 亮风台(上海)信息科技有限公司 | 界面的交互响应方法、系统及终端设备 |
CN112148414B (zh) * | 2020-09-30 | 2024-05-31 | 亮风台(上海)信息科技有限公司 | 界面的交互响应方法、系统及终端设备 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5899987A (en) * | 1995-10-03 | 1999-05-04 | Memco Software Ltd. | Apparatus for and method of providing user exits on an operating system platform |
US20040060055A1 (en) * | 2000-01-28 | 2004-03-25 | Kukura Robert A. | Method and system for dynamic configuration of interceptors in a client-server environment |
CN103150154A (zh) * | 2011-12-07 | 2013-06-12 | 腾讯科技(深圳)有限公司 | 一种应用程序插件的实现方法及装置 |
CN104391880A (zh) * | 2014-10-31 | 2015-03-04 | 北京奇虎科技有限公司 | 拦截业务对象的方法及客户端 |
CN104536776A (zh) * | 2014-11-28 | 2015-04-22 | 百度在线网络技术(北京)有限公司 | 一种在宿主端插件运行环境中运行插件应用的方法与装置 |
CN106708580A (zh) * | 2016-12-27 | 2017-05-24 | 北京奇虎科技有限公司 | 应用程序免安装运行的方法、系统及智能终端 |
CN108170485A (zh) * | 2016-12-05 | 2018-06-15 | 腾讯科技(深圳)有限公司 | 一种插件加载方法、装置及移动终端 |
CN108717365A (zh) * | 2018-06-11 | 2018-10-30 | 广州酷狗计算机科技有限公司 | 在应用程序中执行功能的方法和装置 |
CN108958842A (zh) * | 2018-07-12 | 2018-12-07 | 北京猫眼文化传媒有限公司 | 应用程序以及应用程序的业务插件使用方法 |
US20190095646A1 (en) * | 2017-09-27 | 2019-03-28 | Avecto Limited | Computer Device and Method for Managing Privilege Delegation |
-
2019
- 2019-05-22 CN CN201910427737.4A patent/CN110286956B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5899987A (en) * | 1995-10-03 | 1999-05-04 | Memco Software Ltd. | Apparatus for and method of providing user exits on an operating system platform |
US20040060055A1 (en) * | 2000-01-28 | 2004-03-25 | Kukura Robert A. | Method and system for dynamic configuration of interceptors in a client-server environment |
CN103150154A (zh) * | 2011-12-07 | 2013-06-12 | 腾讯科技(深圳)有限公司 | 一种应用程序插件的实现方法及装置 |
CN104391880A (zh) * | 2014-10-31 | 2015-03-04 | 北京奇虎科技有限公司 | 拦截业务对象的方法及客户端 |
CN104536776A (zh) * | 2014-11-28 | 2015-04-22 | 百度在线网络技术(北京)有限公司 | 一种在宿主端插件运行环境中运行插件应用的方法与装置 |
CN108170485A (zh) * | 2016-12-05 | 2018-06-15 | 腾讯科技(深圳)有限公司 | 一种插件加载方法、装置及移动终端 |
CN106708580A (zh) * | 2016-12-27 | 2017-05-24 | 北京奇虎科技有限公司 | 应用程序免安装运行的方法、系统及智能终端 |
US20190095646A1 (en) * | 2017-09-27 | 2019-03-28 | Avecto Limited | Computer Device and Method for Managing Privilege Delegation |
CN108717365A (zh) * | 2018-06-11 | 2018-10-30 | 广州酷狗计算机科技有限公司 | 在应用程序中执行功能的方法和装置 |
CN108958842A (zh) * | 2018-07-12 | 2018-12-07 | 北京猫眼文化传媒有限公司 | 应用程序以及应用程序的业务插件使用方法 |
Non-Patent Citations (1)
Title |
---|
清风崔: "Spring AOP原理及拦截器", 《HTTPS://WWW.CNBLOGS.COM/VINCENT-BLOG/P/4386774.HTML》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112148414A (zh) * | 2020-09-30 | 2020-12-29 | 亮风台(上海)信息科技有限公司 | 界面的交互响应方法、系统及终端设备 |
CN112148414B (zh) * | 2020-09-30 | 2024-05-31 | 亮风台(上海)信息科技有限公司 | 界面的交互响应方法、系统及终端设备 |
Also Published As
Publication number | Publication date |
---|---|
CN110286956B (zh) | 2022-07-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11416373B2 (en) | Providing debug information on production containers using debug containers | |
CN106201566A (zh) | 利博伟特软件热升级方法及设备 | |
CN110673941B (zh) | 多机房中微服务的迁移方法、电子设备及存储介质 | |
CN108337106A (zh) | 物联网微服务系统架构的构建方法、平台及计算机设备 | |
CN106331065A (zh) | 一种用于具有服务容器的主机系统的代理应用以及系统 | |
CN103685608A (zh) | 一种自动配置安全虚拟机ip地址的方法及装置 | |
CN110764881A (zh) | 分布式系统后台重试方法及装置 | |
CN113835822A (zh) | 跨云平台虚拟机迁移方法、装置、存储介质及电子装置 | |
CN110362318A (zh) | 应用部署方法、装置、设备和存储介质 | |
CN111311254A (zh) | 一种基于区块链的业务处理方法、装置和系统 | |
CN112291082A (zh) | 机房容灾处理方法、终端及存储介质 | |
CN115390991A (zh) | 虚拟机的导入导出方法、装置、设备及存储介质 | |
CN113220432B (zh) | 多云互联方法、装置、设备、存储介质及产品 | |
CN109522021A (zh) | 参数回调处理方法、装置、电子设备及存储介质 | |
CN110266787B (zh) | 一种混合云管理系统、方法及计算机设备 | |
CN110286956A (zh) | 插件的运行方法、装置及电子设备 | |
CN112286622A (zh) | 虚机迁移处理及策略生成方法、装置、设备及存储介质 | |
CN116954810A (zh) | 容器应用实例的创建方法、系统、存储介质及程序产品 | |
CN115185847A (zh) | 一种故障测试方法、装置、存储介质及电子设备 | |
CN114422358A (zh) | Api网关配置更新方法及设备 | |
Wen et al. | Fraus: Launching cost-efficient and scalable mobile click fraud has never been so easy | |
CN115701077A (zh) | 一种对接微服务网格的方法以及装置 | |
CN113126912A (zh) | 一种个人磁盘的挂载方法及装置 | |
CN112350921A (zh) | 消息处理方法、终端及存储介质 | |
CN110286936A (zh) | 热修复方法、装置、电子设备以及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |