CN108170485A - 一种插件加载方法、装置及移动终端 - Google Patents
一种插件加载方法、装置及移动终端 Download PDFInfo
- Publication number
- CN108170485A CN108170485A CN201611101498.6A CN201611101498A CN108170485A CN 108170485 A CN108170485 A CN 108170485A CN 201611101498 A CN201611101498 A CN 201611101498A CN 108170485 A CN108170485 A CN 108170485A
- Authority
- CN
- China
- Prior art keywords
- component
- plug
- unit
- mark
- registration
- 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
-
- 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5055—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering software capabilities, i.e. software resources associated or available to the machine
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
技术领域
本发明涉及终端应用加载技术,尤其涉及一种插件加载方法、装置及移动终端。
背景技术
随着移动终端的操作系统的日趋发展,第三方应用(App,Application)功能越来越完备,从而导致App代码工程越来越多,最终导致方法数的超标。那么,对工程的拆分解耦就成了App开发团队的必经过程。此时,便出现了插件框架方案,为解决上述需求提供了完美的解决方案。插件框架方案不仅可以减少App的包容,同时,还可以及时推送用户更新更稳定的功能,对于改善用户体验,以及丰富产品维度有一定的推动作用。
目前,在移动终端的操作系统上,所采取的插件框架方案存在以下问题:1)对于传统的插件框架方案,插件App需要进行相应修改,才能满足宿主App的调度,大大的增加了开发的成本;插件App的组件运行不是通过系统进行调度,因此它不具备系统组件的属性;2)对于DroidPlugin插件框架解决方案,在适配上存在很大的风险,即在个别厂商以及操作系统新发布版本上,运行不是很完美,需要很大的适配成本,才能完成插件App的运行。
可见,在现有技术中并不存在一种合理的插件框架解决方案。
发明内容
有鉴于此,本发明实施例期望提供一种插件加载方法、装置及移动终端,以保证插件组件具备系统原有组件属性,同时具备较高的适配性。
为达到上述目的,本发明的技术方案是这样实现的:
第一方面,本发明实施例提供一种插件加载方法,应用于宿主模块,所述方法包括:当插件启动时,获得来自线程模块的所述插件的插件组件的组件标识,所述线程模块为所述宿主模块的父类组件;记录所述插件组件的组件标识,并将所述插件组件的组件标识替换为应用程序的预注册组件的组件标识,所述应用程序为所述插件的宿主程序;将所述预注册组件的组件标识发送给所述线程模块,以进行系统权限验证;当所述预注册组件的组件标识通过所述系统权限校验时,接收来自线程模块的可运行通知信息;响应所述可运行通知信息,根据记录的所述插件组件的组件标识,将所述预注册组件的组件标识替换为所述插件组件的组件标识;将所述插件组件的组件标识发送给所述线程模块,以加载所述插件。
第二方面,本发明实施例提供一种插件加载方法,应用于线程模块,所述方法包括:当插件启动时,获取所述插件的插件组件的组件标识;接收来自所述宿主模块的应用程序的预注册组件的组件标识,所述线程模块为所述宿主模块的父类组件,所述应用程序为所述插件的宿主程序;将所述预注册组件的组件标识发送给系统服务模块,以进行系统权限验证;当所述预注册组件的组件标识通过所述系统权限校验时,接收来自系统服务模块的可运行通知信息;将所述可运行通知信息转发给所述宿主模块;接收来自所述宿主模块的所述插件组件的组件标识;基于所述插件组件的组件标识,构建所述插件组件,以加载所述插件。
第三方面,本发明实施例提供一种插件加载装置,包括:第一获取单元,用于当插件启动时,获取来线程模块的所述插件的插件组件的组件标识,所述线程模块为自身所属装置的父类组件;第一替换单元,用于记录所述插件组件的组件标识,并将所述插件组件的组件标识替换为应用程序的预注册组件的组件标识,所述应用程序为所述插件的宿主程序;第一发送单元,用于将所述预注册组件的组件标识发送给所述线程模块,以进行系统权限验证;第一接收单元,用于当所述预注册组件的组件标识通过所述系统权限校验时,接收来自线程模块的可运行通知信息;第二替换单元,用于响应所述可运行通知信息,根据记录的所述插件组件的组件标识,将所述预注册组件的组件标识替换为所述插件组件的组件标识;第二发送单元,用于将所述插件组件的组件标识发送给所述线程模块,以加载所述插件。
第四方面,本发明实施例提供一种插件加载装置,所述装置包括:第二获取单元,用于当插件启动时,获取所述插件的插件组件的组件标识;第三替换单元,用于接收来自宿主模块的应用程序的预注册组件的组件标识,所述线程模块为自身所属装置的父类组件,所述应用程序为所述插件的宿主程序;第三发送单元,用于将所述预注册组件的组件标识发送给系统服务模块,以进行系统权限验证;第三接收单元,用于当所述预注册组件的组件标识通过所述系统权限校验时,接收来自系统服务模块的可运行通知信息;第四发送单元,用于将所述可运行通知信息转发给所述宿主模块;第四接收单元,用于接收来自所述宿主模块的所述插件组件的组件标识;加载单元,用于基于所述插件组件的组件标识,构建所述插件组件,以加载所述插件。
本发明实施例提供了一种插件加载方法及装置,其中,当插件启动时,线程模块获取该插件的插件组件的组件标识,然后,将插件组件的组件标识发送给自身的子类组件,即宿主模块,宿主模块记录插件组件的组件标识,并将该插件组件的组件标识替换为插件的宿主应用程序的预注册组件的组件标识,并将预注册组件的组件标识返回线程模块,线程模块调用系统服务模块根据预注册组件的组件标识对预注册组件进行系统权限验证,当预注册组件通过系统权限校验时,线程模块接收来自系统服务模块的可运行通知信息,并转发给宿主模块,宿主模块响应该可运行通知信息,根据之前的记录,将预注册组件的组件标识替换回上述插件的插件组件的组件标识,再返回线程模块,最后,线程模块基于插件组件的组件标识,构建该插件组件,以加载上述插件。可见,在本发明实施例中,通过构建子类的线程模块来替代系统原有的父类组件功能,确保插件组件绕过系统权限校验,从而运行在系统环境中,保证插件组件具备系统原有组件属性,进而具备较高的适配性。
附图说明
图1-1为相关技术中的传统插件框架解决方案的示意图;
图1-2为相关技术中的DroidPlugin插件框架解决方案的示意图;
图2-1为本发明实施例中的插件加载系统的框架示意图;
图2-2为本发明实施例中的Android平台中插件加载系统的框架示意图;
图3-1为本发明实施例中的插件加载方法的流程示意图;
图3-2为本发明实施例中的Android平台中插件加载方法的流程示意图;
图3-3为本发明实施例中的更新插件的方法流程示意图;
图3-4为本发明实施例中的双亲委派模型的示意图;
图4-1为本发明实施例中的桌面界面的示意图;
图4-2为本发明实施例中的应用程序的示意图;
图5-1为本发明实施例中的宿主模块执行插件加载方法的流程示意图;
图5-2为本发明实施例中的线程模块执行插件加载方法的流程示意图;
图6为本发明实施例中的插件加载装置的一种结构示意图;
图7为本发明实施例中的插件加载装置的另一种结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
在现有技术中,当前移动终端的操作系统采取以下两种插件框架方案:第一、传统的插件框架解决方案,参见图1-1所示,利用代理组件进行调度管理插件组件的运行。第二、DroidPlugin插件框架解决方案,参见图1-2所示,利用动态代理原理进行插件拦截,绕过操作系统权限的校验,完成插件组件的运行。
该两种插件框架方案都存在诸多技术问题。
为了解决这些技术问题,本发明实施例提供一种插件加载系统,图2-1为本发明实施例中的插件加载系统的框架示意图,参见图2-1所示,该系统包括:宿主模块21、线程模块22、插件(Plugin)23以及系统服务(System Service)模块24;这里,插件通过线程模块与系统服务模块进行交互,宿主模块为线程模块的子类组件,也就是说,线程模块为宿主模块的父类组件,宿主模块继承线程模块的功能。
在实际应用中,上述宿主模块位于插件的宿主App中,该App可以为微桌面插件系统(WPTS)。
下面结合上述系统对本发明实施例中的插件加载方法进行说明。
为了解决前述背景技术中的技术问题,本发明实施例提供一种插件加载方法,该方法应用于插件的宿主App,该方法所实现的功能可以通过终端中的处理器调用程序代码来实现,当然程序代码可以保存在计算机存储介质中,可见,该宿主App运行的移动终端至少包括处理器和存储介质。其中,应用在具体实施例的过程中可以为各种类型的具有信息处理能力的电子设备,例如移动终端可以包括手机、平板电脑、台式机、个人数字助理、导航仪、数字电话、视频电话、电视机等。
图3-1为本发明实施例中的插件加载方法的流程示意图,参见图3-1所示,该方法包括:
S310:当插件启动时,线程模块获取该插件的插件组件的标识信息;
这里,当用户想要通过微桌面插件系统运行未安装App时,可以在如图4-1所示的微桌面界面上点击想要运行的未安装App的图标41,如红包助手,此时,红包助手作为微桌面系统的插件App开始启动。那么,当插件启动时,线程模块接收来自宿主App,也就是微桌面插件系统的启动插件组件的启动请求,响应该请求,获取该插件的插件组件的标识信息,如组件的类名称(ClassName)。
举例来说,在Android平台中,线程模块可以为Activity Thread,在ActivityThread中可以包含有Instrumentation组件、ContextWrapper组件以及Callback组件,那么,Instrumentation组件获取插件的活动(Activity)组件、ContextWrapper组件获取服务(Service)组件或广播接收器(Broadcast Receiver)组件。
在实际应用中,参见图4-1所示,用户可以通过云端配置桌面图标,点击微桌面图标,直接启动运行未安装App。
S311:宿主模块拦截上述插件组件,获得插件组件的组件标识;
这里,由于宿主模块为线程模块的子类组件,所以,宿主模块能够知道父类组件加载的类文件,此时,宿主模块拦截上述插件组件。
举例来说,在Android平台中,线程模块可以包含Instrumentation组件、ContextWrapper组件以及Callback组件,相应地,在宿主模块中,就可以构建上述三个组件对应的子类组件,比如,构建与Instrumentation组件对应的PluginInstrumentation组件、与ContextWrapper组件对应的PluginContextWrapper组件以及与Callback组件对应的PluginCallback组件,这里,子类组件继承了父类组件的功能。这样,PluginInstrumentation组件可以拦截Instrumentation组件启动的Activity组件,PluginContextWrapper组件可以拦截ContextWrapper组件启动的Service组件或Broadcast Receiver组件。
在实际应用中,为了减少反射操作所带来的延时问题,上述方法还包括:基于双亲委派模型,构建线程模块对应的宿主模块。
这里,图3-2为本发明实施例中的双亲委派模型的示意图,参见图3-2所示,宿主模块基于宿主双亲委派模型原理,在编译时,创建一个假的Activity Thread 321来骗取工程环境编译成功,实际调用依然调用系统中的类(Class)方式,来替代原有反射调用操作,减少反射耗时,增加微桌面插件系统整体效率上的体验。
S312:宿主模块记录上述插件组件的组件标识,并将插件组件的组件标识替换为宿主App的预注册组件的组件标识;
这里,在插件启动之前,可以在宿主App中预注册几个常用的组件,比如,预先注册Activity组件、Service组件、Broadcast Receiver组件等。因为这些组件实在宿主App中注册的,那么,这些组件就具有宿主App所具有的权限。那么,当宿主模块拦截到插件组件后,便用对应的预注册组件的组件标识对插件组件的组件标识进行替换,比如,用预注册的Activity组件的组件标识替换插件的Activity组件的组件标识,或者用预先注册的Service组件/Broadcast Receiver组件的组件标识替换插件的Service组件/BroadcastReceiver组件的组件标识。
S313:宿主模块将替换后的预注册组件的组件标识发送给线程模块;
这里,宿主模块在替换插件组件的组件标识后,将替换后的预注册组件的组件标识发送给线程模块。比如,将预注册的Activity组件的组件标识发送给线程模块中的Instrumentation组件、Service组件/Broadcast Receiver组件的组件标识发送给线程模块中的ContextWrapper组件。
S314:线程模块将预注册组件的组件标识发送给系统服务模块,以进行系统权限验证;
S315:当预注册组件的组件标识通过系统权限校验时,系统服务模块向线程模块发送可运行通知信息;
其中,可运行通知信息表明预注册组件可运行。
这里,线程模块调用系统服务模块,将上述预注册组件的组件标识发送给系统服务模块,对其进行系统权限验证。例如,将上述预注册的Activity组件的组件标识发送给系统服务模块中的活动管理服务(ActivityManagerService),由ActivityManagerService转发给包管理服务(PackageManagerService),PackageManagerService根据组件标识验证该组件是否可以运行。由于预注册的Activity组件是具有宿主App的权限,所以,PackageManagerService在验证时,预注册的Activity组件是可以运行的,此时,PackageManagerService生成可运行通知信息,并发送给Instrumentation组件;反之,如果发送给PackageManagerService的Activity组件没有预先注册的话,此时,PackageManagerService判定Activity组件不可以运行,插件App禁止运行。
S316:宿主模块拦截上述可运行通知信息;
S317:宿主模块响应该可运行通知信息,根据记录的插件组件的组件标识将预注册组件的组件标识替换为插件组件的组件标识;
这里,当线程模块接收到上述可运行通知信息后,宿主模块拦截该信息,接下来,响应该信息,将预注册组件的组件标识替换回插件组件的组件标识。
S318:宿主模块将替换回的插件组件的组件标识发送给线程模块;
这里,宿主模块将预注册组件的组件标识替换回插件组件的组件标识之后,将其发送给线程模块中对应的组件。比如,将插件组件中的Activity组件的组件标识发送给线程模块中的Instrumentation组件、将Service组件/Broadcast Receiver组件的组件标识发送给线程模块中的Callback组件。
S319:线程模块基于插件组件的组件标识,构建插件组件,以加载插件。
这里,线程模块可以根据插件组件的标识分别加载该插件组件的代码和资源,以实现加载插件。例如,线程模块基于插件组件的组件标识,构建对应的类加载器(DexClassLoader),加载插件组件的插件代码,,同时,基于插件组件的组件标识,构建对应的资源管理器(AssetManager),并通过调用其中的新增插件路径(addAssetPath)方法加载插件的资源。
在本发明其它实施例中,在加载插件之前,还可以预先构造插件DexClassLoader,这样,线程模块在加载插件时,可以调用该DexClassLoader,以加载插件代码,从而达到自行完成插件代码的调度,无需安装到系统中进行插件代码的调用。并且,线程模块还可以构造AssetManager,并调用其中的addAssetPath方法,完成对插件资源的动态加载,从而达到无需安装到系统中即可满足插件资源的加载。
这里,由于AssetManager的addAssetPath方法为隐藏的应用程序编程接口(API,Application Programming Interface),此时,线程模块可以通过反射操作来调用addAssetPath方法。当然,还可以采用其它的方式,本发明不做具体限定。
至此,插件App便绕过了系统的权限验证,并且由于宿主模块为线程模块的子类组件,线程模块为Android平台的系统组件,这样,整个插件的加载过程完全交由系统调度运行,具备Android组件属性,进而具备较高的适配性。进一步地的,由于能够基于插件框架运行未安装的App,有效的解决了方法数个数超过65535的问题。进一步地,参见图4-2所示,本发明实施例中所提供的微桌面插件系统可以为微桌面减少3M-4M的包容,并且日后随着业务的不断接入,减少的包容也会也来越多。
基于前述实施例,以Android平台为例来对上述方法进行说明。
图2-2为本发明实施例中的Android平台中插件加载系统的框架示意图,参见图2-2所示,插件23的插件组件包括Android组件1、Android组件2、Android组件3,这里,Android组件可以为Activity组件、Service组件、Broadcast Receiver组件等;线程模块22为Activity Thread,Activity Thread可以包括Instrumentation组件、ContextWrapper组件以及Callback组件;宿主模块21包括与Instrumentation组件对应的PluginInstrumentation组件、与ContextWrapper组件对应的PluginContextWrapper组件以及与Callback组件对应的PluginCallback组件;System Service模块24包括ActivityManagerService以及PackageManagerService。
图3-3为本发明实施例中的Android平台中插件加载方法的流程示意图,参见图3-3所示,上述插件加载的方法包括:
S332:当插件启动时,宿主模块拦截Activity Thread上启动的插件组件,并利用预先注册在宿主App中的预注册组件的组件标识替换启动(Intent)方法中插件组件的组件标识;
S332:Activity Thread将预注册组件的组件标识发送给ActivityManagerService;
S333:ActivityManagerService转发给PackageManagerService;
S334:PackageManagerService判断预注册组件是否可以运行;若是,发送可运行通知信息给Activity Thread,并跳至S335;若否,流程结束;
S335:宿主模块拦截Activity Thread中的可运行通知信息,并将预注册组件的组件标识替换回插件组件的组件标识;
S336:Activity Thread构造DexClassLoader;
S337:通过DexClassLoader运行插件代码;
S338:Activity Thread构造AssetManager;
S339:Activity Thread调用AssetManager中的addAssetPath方法,加载插件资源。
基于前述实施例,在实际应用中,为了提高软件体验性和交互性,上述方法还可以包括:获取来自服务器的插件的新版本信息;解析新版本信息,获得对应的新版本插件的类加载器和资源管理器;将新版本插件的类加载器和资源管理器覆盖插件的类加载器和资源管理器。
这里,图3-4为本发明实施例中的更新插件的方法流程示意图,参见图3-4所示,上述方法还包括:
S340:服务器配置插件的新版本信息;
S341:服务器将新版本信息推送给宿主App中的宿主模块;
S342:宿主模块下载更新后的插件App;
S343:宿主模块解压更新后的插件App;
S344:宿主模块静默进行覆盖安装App;
S345:宿主模块将新版本的插件类加载器PluginDexClassLoader替换原来的PluginDexClassLoader;
S346:宿主模块将新版本的插件资源AssetManager替换原来的AssetManager。
基于前述实施例,站在宿主模块一侧,对上述方法进行说明。
图5-1为本发明实施例中的宿主模块执行插件加载方法的流程示意图,参加图5-1所示,上述方法包括:
S510:当插件启动时,获得来自线程模块的该插件的插件组件的组件标识;
其中,线程模块为宿主模块的父类组件;
S511:记录插件组件的组件标识,并将插件组件的组件标识替换为应用程序的预注册组件的组件标识;
其中,应用程序为插件的宿主程序;
S512:将预注册组件的组件标识发送给线程模块,以进行系统权限验证;
S513:当预注册组件的组件标识通过系统权限校验时,接收来自线程模块的可运行通知信息;
S514:响应可运行通知信息,根据记录的插件组件的组件标识将预注册组件的组件标识替换为插件组件的组件标识;
S515:将插件组件的组件标识发送给线程模块,以加载插件。
在本发明其它实施例中,上述方法还可以包括:获取来自服务器的插件的新版本信息;解析新版本信息,获得对应的新版本插件的类加载器和资源管理器;将新版本插件的类加载器和资源管理器覆盖插件的类加载器和资源管理器。
基于前述实施例,站在线程模块一侧,对上述方法进行说明。
图5-2为本发明实施例中的线程模块执行插件加载方法的流程示意图,参加图5-2所示,上述方法包括:
S520:当插件启动时,获取插件的插件组件的组件标识;
S521:接收来自宿主模块应用程序的预注册组件的组件标识;
其中,线程模块为宿主模块的父类组件,应用程序为插件的宿主程序;
S522:将预注册组件的组件标识发送给系统服务模块,以进行系统权限验证;
S523:当预注册组件的组件标识通过系统权限校验时,接收来自系统服务模块的可运行通知信息;
S524:将可运行通知信息转发给宿主模块;
S525:接收来自宿主模块的插件组件的组件标识;
S526:基于插件组件的组件标识,构造插件组件,以加载插件。
在本发明其它实施例中,S526,还可以包括:基于插件组件的组件标识分别加载插件组件的代码和资源,以加载插件。
这里,上述分别加载插件组件的代码和资源步骤可以包括:通过DexClassLoader加载插件组件的插件代码;通过AssetManager中的addAssetPath方法加载插件的插件资源。
在本发明其它实施例中,上述方法还可以包括:基于双亲委派模型,构建线程模块对应的宿主模块。
基于同一发明构思,本发明提供一种插件加载装置,该装置可以如上述一个或者多个实施例所述的宿主模块。
参见图6所示,该装置60,包括:第一获取单元61,用于当插件启动时,获取来线程模块的插件的插件组件的组件标识,线程模块为自身所属装置的父类组件;第一替换单元62,用于记录插件组件的组件标识,并将插件组件的组件标识替换为应用程序的预注册组件的组件标识,应用程序为插件的宿主程序;第一发送单元63,用于将预注册组件的组件标识发送给线程模块,以进行系统权限验证;第一接收单元64,用于当预注册组件的组件标识通过系统权限校验时,接收来自线程模块的可运行通知信息;第二替换单元65,用于响应可运行通知信息,将预注册组件的组件标识替换为插件组件的组件标识;第二发送单元66,用于将插件组件的组件标识发送给线程模块,以加载插件。
在本发明其它实施例中,上述装置还包括:第二获取单元,用于获取来自服务器的插件的新版本信息;解析单元,用于解析新版本信息,获得对应的新版本插件的类加载器和资源管理器;更新单元,用于采用新版本插件的类加载器和资源管理器替换插件的类加载器和资源管理器。
这里需要指出的是:以上装置实施例项的描述,与上述方法描述是类似的,具有同方法实施例相同的有益效果,因此不做赘述。对于本发明装置实施例中未披露的技术细节,本领域的技术人员请参照本发明方法实施例的描述而理解,为节约篇幅,这里不再赘述。
基于同一发明构思,本发明提供一种插件加载装置,该装置可以如上述一个或者多个实施例所述的线程模块。
参见图7所示,该装置70,包括:第二获取单元71,用于当插件启动时,获取插件的插件组件的组件标识;第三替换单元72,用于接收来自宿主模块的应用程序的预注册组件的组件标识,线程模块为自身所属装置的父类组件,应用程序为插件的宿主程序;第三发送单元73,用于将预注册组件的组件标识发送给系统服务模块,以进行系统权限验证;第三接收单元74,用于当预注册组件的组件标识通过系统权限校验时,接收来自系统服务模块的可运行通知信息;第四发送单元75,用于将可运行通知信息转发给宿主模块;第四接收单元76,用于接收来自宿主模块的插件组件的组件标识;加载单元77,用于基于插件组件的组件标识,构建插件组件,以加载插件。
在本发明其它实施例中,加载单元,用于基于插件组件的组件标识,分别加载插件组件的代码和资源,以加载插件。
在本发明其它实施例中,加载单元,用于通过类加载器加载插件组件的插件代码;通过资源管理器中的新增插件路径方法加载插件的插件资源。
在本发明其它实施例中,上述装置还包括:构建单元,用于基于双亲委派模型,构建线程模块对应的宿主模块。
这里需要指出的是:以上装置实施例项的描述,与上述方法描述是类似的,具有同方法实施例相同的有益效果,因此不做赘述。对于本发明装置实施例中未披露的技术细节,本领域的技术人员请参照本发明方法实施例的描述而理解,为节约篇幅,这里不再赘述。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其它变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本发明各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种插件加载方法,应用于宿主模块,其特征在于,所述方法包括:
当插件启动时,获得来自线程模块的所述插件的插件组件的组件标识,所述线程模块为所述宿主模块的父类组件;
记录所述插件组件的组件标识,并将所述插件组件的组件标识替换为应用程序的预注册组件的组件标识,所述应用程序为所述插件的宿主程序;
将所述预注册组件的组件标识发送给所述线程模块,以进行系统权限验证;
当所述预注册组件的组件标识通过所述系统权限校验时,接收来自线程模块的可运行通知信息;
响应所述可运行通知信息,根据记录的所述插件组件的组件标识,将所述预注册组件的组件标识替换为所述插件组件的组件标识;
将所述插件组件的组件标识发送给所述线程模块,以加载所述插件。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取来自服务器的所述插件的新版本信息;
解析所述新版本信息,获得对应的新版本插件的类加载器和资源管理器;
采用新版本插件的类加载器和资源管理器替换所述插件的类加载器和资源管理器。
3.一种插件加载方法,应用于线程模块,其特征在于,所述方法包括:
当插件启动时,获取所述插件的插件组件的组件标识;
接收来自所述宿主模块的应用程序的预注册组件的组件标识,所述线程模块为所述宿主模块的父类组件,所述应用程序为所述插件的宿主程序;
将所述预注册组件的组件标识发送给系统服务模块,以进行系统权限验证;
当所述预注册组件的组件标识通过所述系统权限校验时,接收来自系统服务模块的可运行通知信息;
将所述可运行通知信息转发给所述宿主模块;
接收来自所述宿主模块的所述插件组件的组件标识;
基于所述插件组件的组件标识,构建所述插件组件,以加载所述插件。
4.根据权利要求3所述的方法,其特征在于,所述基于所述插件组件的组件标识,构建所述插件组件并加载所述插件,包括:
基于所述插件组件的组件标识,分别加载所述插件组件的代码和资源,以加载所述插件。
5.根据权利要求4所述的方法,其特征在于,所述基于所述插件组件的组件标识,分别加载所述插件组件的代码和资源,包括:
基于所述插件组件的组件标识,通过类加载器加载所述插件组件的插件代码;
基于所述插件组件的组件标识,通过资源管理器中的新增插件路径方法加载所述插件的插件资源。
6.根据权利要求3所述的方法,其特征在于,所述方法还包括:
基于双亲委派模型,构建所述线程模块对应的所述宿主模块。
7.一种插件加载装置,其特征在于,包括:
第一获取单元,用于当插件启动时,获取来线程模块的所述插件的插件组件的组件标识,所述线程模块为自身所属装置的父类组件;
第一替换单元,用于记录所述插件组件的组件标识,并将所述插件组件的组件标识替换为应用程序的预注册组件的组件标识,所述应用程序为所述插件的宿主程序;
第一发送单元,用于将所述预注册组件的组件标识发送给所述线程模块,以进行系统权限验证;
第一接收单元,用于当所述预注册组件的组件标识通过所述系统权限校验时,接收来自线程模块的可运行通知信息;
第二替换单元,用于响应所述可运行通知信息,根据记录的所述插件组件的组件标识,将所述预注册组件的组件标识替换为所述插件组件的组件标识;
第二发送单元,用于将所述插件组件的组件标识发送给所述线程模块,以加载所述插件。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
第二获取单元,用于获取来自服务器的插件的新版本信息;
解析单元,用于解析所述新版本信息,获得对应的新版本插件的类加载器和资源管理器;
更新单元,用于采用新版本插件的类加载器和资源管理器替换所述插件的类加载器和资源管理器。
9.一种插件加载装置,其特征在于,所述装置包括:
第二获取单元,用于当插件启动时,获取所述插件的插件组件的组件标识;
第三替换单元,用于接收来自宿主模块的应用程序的预注册组件的组件标识,所述线程模块为自身所属装置的父类组件,所述应用程序为所述插件的宿主程序;
第三发送单元,用于将所述预注册组件的组件标识发送给系统服务模块,以进行系统权限验证;
第三接收单元,用于当所述预注册组件的组件标识通过所述系统权限校验时,接收来自系统服务模块的可运行通知信息;
第四发送单元,用于将所述可运行通知信息转发给所述宿主模块;
第四接收单元,用于接收来自所述宿主模块的所述插件组件的组件标识;
加载单元,用于基于所述插件组件的组件标识,构建所述插件组件,以加载所述插件。
10.根据权利要求9所述的装置,其特征在于,所述加载单元,用于基于所述插件组件的组件标识,分别加载所述插件组件的代码和资源,以加载所述插件。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611101498.6A CN108170485B (zh) | 2016-12-05 | 2016-12-05 | 一种插件加载方法、装置及移动终端 |
PCT/CN2017/114477 WO2018103610A1 (zh) | 2016-12-05 | 2017-12-04 | 一种插件加载方法及装置、终端、存储介质 |
US16/287,535 US10891141B2 (en) | 2016-12-05 | 2019-02-27 | Plugin loading method and apparatus, terminal, and storage medium |
US17/108,197 US11263027B2 (en) | 2016-12-05 | 2020-12-01 | Plugin loading method and apparatus, terminal, and storage medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611101498.6A CN108170485B (zh) | 2016-12-05 | 2016-12-05 | 一种插件加载方法、装置及移动终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108170485A true CN108170485A (zh) | 2018-06-15 |
CN108170485B CN108170485B (zh) | 2021-06-11 |
Family
ID=62491935
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611101498.6A Active CN108170485B (zh) | 2016-12-05 | 2016-12-05 | 一种插件加载方法、装置及移动终端 |
Country Status (3)
Country | Link |
---|---|
US (2) | US10891141B2 (zh) |
CN (1) | CN108170485B (zh) |
WO (1) | WO2018103610A1 (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108958842A (zh) * | 2018-07-12 | 2018-12-07 | 北京猫眼文化传媒有限公司 | 应用程序以及应用程序的业务插件使用方法 |
CN110286956A (zh) * | 2019-05-22 | 2019-09-27 | 百度在线网络技术(北京)有限公司 | 插件的运行方法、装置及电子设备 |
CN110445791A (zh) * | 2019-08-12 | 2019-11-12 | 北京顺丰同城科技有限公司 | 插件认证方法及装置、插件认证信息的存储方法及装置 |
CN110704035A (zh) * | 2019-10-17 | 2020-01-17 | 北京首贝科技发展有限公司 | 一种组插件式软件架构系统及其实现方法 |
CN110750259A (zh) * | 2018-07-23 | 2020-02-04 | 北京奇虎科技有限公司 | 构件的处理方法和装置 |
CN111190609A (zh) * | 2018-11-14 | 2020-05-22 | 广东万丈金数信息技术股份有限公司 | 业务的处理方法、装置、设备和存储介质 |
CN111722857A (zh) * | 2019-03-20 | 2020-09-29 | 北京柏林互动科技有限公司 | 软件开发工具包的更新方法、装置、电子设备及存储介质 |
CN113886854A (zh) * | 2021-10-14 | 2022-01-04 | 广州九尾信息科技有限公司 | 一种基于安卓平台权限监控与管理的方法和装置 |
CN117931317A (zh) * | 2024-03-22 | 2024-04-26 | 成都赢瑞科技有限公司 | 基于计算机仿真平台的虚拟插件系统和方法 |
CN117931317B (zh) * | 2024-03-22 | 2024-06-04 | 成都赢瑞科技有限公司 | 基于计算机仿真平台的虚拟插件系统和方法 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114780643B (zh) * | 2022-06-16 | 2022-10-21 | 恒生电子股份有限公司 | 数据同步处理方法、装置、电子设备及可读存储介质 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050120230A1 (en) * | 2002-02-18 | 2005-06-02 | Waterson David L. | System for preventing a computer virus accessing email addresses |
CN102411506A (zh) * | 2011-07-07 | 2012-04-11 | 杭州典能科技有限公司 | Java系统业务单元插件式管理系统及业务功能动态变更方法 |
US20120151464A1 (en) * | 2010-12-14 | 2012-06-14 | Bmc Software, Inc. | Running Injected Code Prior to Execution of an Application |
US8635618B2 (en) * | 2007-11-20 | 2014-01-21 | International Business Machines Corporation | Method and system to identify conflicts in scheduling data center changes to assets utilizing task type plugin with conflict detection logic corresponding to the change request |
CN103744669A (zh) * | 2013-12-26 | 2014-04-23 | 世纪龙信息网络有限责任公司 | 安卓系统Activity插件的创建、调用方法及系统 |
CN104375861A (zh) * | 2014-11-04 | 2015-02-25 | 北京奇虎科技有限公司 | 基于安卓平台的应用程序免安装运行的方法、装置及终端 |
CN104731625A (zh) * | 2015-03-27 | 2015-06-24 | 北京奇虎科技有限公司 | 一种加载插件的方法、装置和移动终端 |
CN104750528A (zh) * | 2015-03-31 | 2015-07-01 | 北京奇虎科技有限公司 | 一种Android程序中的组件管理方法和装置 |
CN104750555A (zh) * | 2015-03-31 | 2015-07-01 | 北京奇虎科技有限公司 | 一种Android程序中的进程管理方法和装置 |
CN105740033A (zh) * | 2016-03-15 | 2016-07-06 | 广州彩瞳网络技术有限公司 | 一种终端设备、插件加载运行装置及插件加载运行方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7451484B1 (en) * | 1999-05-27 | 2008-11-11 | International Business Machines Corporation | Method for enabling a program written in untrusted code to interact with a security subsystem of a hosting operating system |
US7434215B2 (en) * | 2003-09-11 | 2008-10-07 | International Business Machines Corporation | Mechanism for loading plugin classes at an appropriate location in the class loader hierarchy |
US9411616B2 (en) * | 2011-12-09 | 2016-08-09 | Ca, Inc. | Classloader/instrumentation approach for invoking non-bound libraries |
CN103514395B (zh) * | 2012-06-20 | 2016-09-28 | 阿里巴巴集团控股有限公司 | 插件权限控制方法及系统 |
WO2014159943A2 (en) * | 2013-03-14 | 2014-10-02 | Bitvore Corp. | Dynamically loaded plugin architecture |
CN104049986B (zh) * | 2013-03-14 | 2018-12-18 | 腾讯科技(深圳)有限公司 | 插件加载方法及装置 |
US10063508B2 (en) * | 2014-03-20 | 2018-08-28 | Oracle International Corporation | System and method for supporting a pluggable event service in a dependency injection framework |
US10469401B2 (en) * | 2014-09-25 | 2019-11-05 | Oracle International Corporation | System and method for supporting lifecycle plugins in a multitenant application server environment |
CN104679572B (zh) * | 2015-03-26 | 2017-09-22 | 北京神舟航天软件技术有限公司 | 基于预加载机制的插件支持方法 |
WO2017189629A1 (en) * | 2016-04-26 | 2017-11-02 | Ciphertext Solutions, Inc. | Issuance of virtual electronic cards using device and user-specific authentication information |
-
2016
- 2016-12-05 CN CN201611101498.6A patent/CN108170485B/zh active Active
-
2017
- 2017-12-04 WO PCT/CN2017/114477 patent/WO2018103610A1/zh active Application Filing
-
2019
- 2019-02-27 US US16/287,535 patent/US10891141B2/en active Active
-
2020
- 2020-12-01 US US17/108,197 patent/US11263027B2/en active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050120230A1 (en) * | 2002-02-18 | 2005-06-02 | Waterson David L. | System for preventing a computer virus accessing email addresses |
US8635618B2 (en) * | 2007-11-20 | 2014-01-21 | International Business Machines Corporation | Method and system to identify conflicts in scheduling data center changes to assets utilizing task type plugin with conflict detection logic corresponding to the change request |
US20120151464A1 (en) * | 2010-12-14 | 2012-06-14 | Bmc Software, Inc. | Running Injected Code Prior to Execution of an Application |
CN102411506A (zh) * | 2011-07-07 | 2012-04-11 | 杭州典能科技有限公司 | Java系统业务单元插件式管理系统及业务功能动态变更方法 |
CN103744669A (zh) * | 2013-12-26 | 2014-04-23 | 世纪龙信息网络有限责任公司 | 安卓系统Activity插件的创建、调用方法及系统 |
CN104375861A (zh) * | 2014-11-04 | 2015-02-25 | 北京奇虎科技有限公司 | 基于安卓平台的应用程序免安装运行的方法、装置及终端 |
CN104731625A (zh) * | 2015-03-27 | 2015-06-24 | 北京奇虎科技有限公司 | 一种加载插件的方法、装置和移动终端 |
CN104750528A (zh) * | 2015-03-31 | 2015-07-01 | 北京奇虎科技有限公司 | 一种Android程序中的组件管理方法和装置 |
CN104750555A (zh) * | 2015-03-31 | 2015-07-01 | 北京奇虎科技有限公司 | 一种Android程序中的进程管理方法和装置 |
CN105740033A (zh) * | 2016-03-15 | 2016-07-06 | 广州彩瞳网络技术有限公司 | 一种终端设备、插件加载运行装置及插件加载运行方法 |
Non-Patent Citations (1)
Title |
---|
齐志飞: ""插件式GIS开发与原生代码模块在ArcMap和.NET中复用技术"", 《电脑编程技巧与维护》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108958842A (zh) * | 2018-07-12 | 2018-12-07 | 北京猫眼文化传媒有限公司 | 应用程序以及应用程序的业务插件使用方法 |
CN110750259A (zh) * | 2018-07-23 | 2020-02-04 | 北京奇虎科技有限公司 | 构件的处理方法和装置 |
CN110750259B (zh) * | 2018-07-23 | 2024-04-05 | 三六零科技集团有限公司 | 构件的处理方法和装置 |
CN111190609A (zh) * | 2018-11-14 | 2020-05-22 | 广东万丈金数信息技术股份有限公司 | 业务的处理方法、装置、设备和存储介质 |
CN111190609B (zh) * | 2018-11-14 | 2024-01-12 | 广东万丈金数信息技术股份有限公司 | 业务的处理方法、装置、设备和存储介质 |
CN111722857A (zh) * | 2019-03-20 | 2020-09-29 | 北京柏林互动科技有限公司 | 软件开发工具包的更新方法、装置、电子设备及存储介质 |
CN110286956A (zh) * | 2019-05-22 | 2019-09-27 | 百度在线网络技术(北京)有限公司 | 插件的运行方法、装置及电子设备 |
CN110445791A (zh) * | 2019-08-12 | 2019-11-12 | 北京顺丰同城科技有限公司 | 插件认证方法及装置、插件认证信息的存储方法及装置 |
CN110704035A (zh) * | 2019-10-17 | 2020-01-17 | 北京首贝科技发展有限公司 | 一种组插件式软件架构系统及其实现方法 |
CN113886854A (zh) * | 2021-10-14 | 2022-01-04 | 广州九尾信息科技有限公司 | 一种基于安卓平台权限监控与管理的方法和装置 |
CN117931317A (zh) * | 2024-03-22 | 2024-04-26 | 成都赢瑞科技有限公司 | 基于计算机仿真平台的虚拟插件系统和方法 |
CN117931317B (zh) * | 2024-03-22 | 2024-06-04 | 成都赢瑞科技有限公司 | 基于计算机仿真平台的虚拟插件系统和方法 |
Also Published As
Publication number | Publication date |
---|---|
US11263027B2 (en) | 2022-03-01 |
US20190196848A1 (en) | 2019-06-27 |
US10891141B2 (en) | 2021-01-12 |
US20210081219A1 (en) | 2021-03-18 |
WO2018103610A1 (zh) | 2018-06-14 |
CN108170485B (zh) | 2021-06-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108170485A (zh) | 一种插件加载方法、装置及移动终端 | |
US7720865B2 (en) | Document management apparatus, document management method, and storage medium storing program | |
US10922437B2 (en) | Installation and management of client extensions | |
US20170323267A1 (en) | System and method for providing work allocation and collaboration | |
US9043861B2 (en) | Method and system for managing security policies | |
US20110289499A1 (en) | Techniques to automatically update software applications | |
US8595489B1 (en) | Grouping and ranking of application permissions | |
US10216510B2 (en) | Silent upgrade of software with dependencies | |
EP3138001B1 (en) | Methods and systems for managing multiple applications | |
US11474842B2 (en) | Integration application creator design | |
CN105528251B (zh) | 应用通知信息的处理方法、装置及移动终端 | |
US10956868B1 (en) | Virtual reality collaborative workspace that is dynamically generated from a digital asset management workflow | |
CN110083421A (zh) | 在线文档的通知方法、装置、终端、服务器及存储介质 | |
US8903889B2 (en) | Method, system and article for mobile metadata software agent in a data-centric computing environment | |
CN106845270B (zh) | 一种无痕浏览方法及装置 | |
CN109388435A (zh) | 实现app同时多次开启操作的方法和装置 | |
CN111045652A (zh) | 配电网开发及服务系统 | |
Zhang et al. | Research and implementation of cross-platform development of mobile widget | |
CN113032004B (zh) | 在开发环境中管理开发作业的方法、设备和程序产品 | |
CN109918147B (zh) | OpenStack下驱动的扩展方法、装置、电子设备 | |
CN114461909A (zh) | 信息处理方法、信息处理装置、电子设备和存储介质 | |
KR20180053872A (ko) | 애플리케이션 변환 장치 및 방법 | |
CN112463616A (zh) | 一种面向Kubernetes容器平台的混沌测试方法和装置 | |
US20130290830A1 (en) | System and method for managing a viewstate of a web application | |
Yu et al. | Research on credible demand analysis method based on risk driven mobile application software |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
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 |