插件化调试方法及装置与流程

文档序号:15200141发布日期:2018-08-19 10:42阅读:185来源:国知局

本发明涉及应用软件技术领域,特别是涉及一种插件化调试方法及装置。



背景技术:

在现有的android系统开发领域中,对于插件化方案的讨论一直热度不减,尤以插件化框架replugin的相关插件化方案为当下主流方案。但无论是插件化框架replugin,还是现有的其他插件化方案,在插件化方案调试过程中,若需要代码输入时,均需要用户进行代码的手动输入编译,通过编译一个debug版本,进行相应代码的手动添加,从而在debugger调试时,实现相应的调试。

然而现有的插件化调试处理,在每一次调试时均需要进行人工的手动处理,不仅耗时,而且处理上不方便,需要浪费大量的人力,效率低下。



技术实现要素:

本发明提供插件化调试方法及装置,以在需要插件化调试时实现自动的调试处理,提升了处理效率。

本发明提供了一种插件化调试方法,包括:

获取插件调试指令;

基于所述插件调试指令确定插件调试路径,以使宿主基于所述插件调试路径对待调试插件进行调试。

优选地,所述基于所述插件调试指令确定插件调试路径,包括如下至少一项:

基于用户输入的插件调试指令确定插件调试路径;

基于宿主发送的插件调试指令确定插件调试路径。

优选地,所述基于用户输入的插件调试指令确定插件调试路径,包括:

接收用户输入的插件调试指令;

对所述插件调试指令进行解析,得到待调试插件的标识信息;

基于所述标识信息确定所述待调试插件的插件调试路径。

优选地,所述基于所述标识信息确定所述待调试插件的插件调试路径,包括:

基于所述标识信息查询所属宿主,确定所属宿主中与所述标识信息对应的插件的插件调试路径;或

基于所述标识信息向对应的插件发送路径请求消息;

接收所述插件返回的路径响应消息,获取所述路径响应消息中携带的对应所述标识信息的插件调试路径。

优选地,所述基于宿主发送的插件调试指令确定插件调试路径,包括:

获取所述宿主发送的插件调试指令;

解析所述插件调试指令,得到待调试插件的标识信息;

确定所述待调试插件的标识信息与所属插件的标识信息是否一致;

并在一致时,确定所属插件的插件调试路径为所述待调试插件的插件调试路径。

优选地,还包括:

向所述宿主发送通知消息,并在所述通知消息中携带所述待调试插件的插件调试路径。

本发明还提供了一种插件化调试装置,包括:

获取单元,用于获取插件调试指令;

确定单元,用于基于所述插件调试指令确定插件调试路径。

优选地,所述确定单元,用于基于用户输入的插件调试指令确定插件调试路径;或,基于宿主发送的插件调试指令确定插件调试路径。

优选地,所述确定单元,具体用于接收用户输入的插件调试指令;对所述插件调试指令进行解析,得到待调试插件的标识信息;基于所述标识信息确定所述待调试插件的插件调试路径。

优选地,所述确定单元,进一步用于基于所述标识信息查询所属宿主,确定所属宿主中与所述标识信息对应的插件的插件调试路径;或基于所述标识信息向对应的插件发送路径请求消息;接收所述插件返回的路径响应消息,获取所述路径响应消息中携带的对应所述标识信息的插件调试路径。

优选地,所述确定单元,具体用于获取所述宿主发送的插件调试指令;解析所述插件调试指令,得到待调试插件的标识信息;确定所述待调试插件的标识信息与所属插件的标识信息是否一致;并在一致时,确定所属插件的插件调试路径为所述待调试插件的插件调试路径。

优选地,还包括:

发送单元,用于向所述宿主发送通知消息,并在所述通知消息中携带所述待调试插件的插件调试路径。

本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现上述插件化调试方法。

本发明还提供了一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;

所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行上述插件化调试方法对应的操作。

与现有技术相比,本发明至少具有以下优点:

通过获取插件调试指令;并基于所述插件调试指令确定插件调试路径,以使宿主基于所述插件调试路径对待调试插件进行调试,从而实现了自动的插件化调试处理,提升了处理效率,也节省了用户的时间,同时,由于预先的参数预设,避免了人为输入代码时的错误输入,进而提升了调试的准确率。

附图说明

图1是本发明实施例所提供的插件化调试方法流程图;

图2是本发明实施例所提供的应用于宿主的插件化调试方法具体实现流程图;

图3是本发明实施例所提供的应用于插件的插件化调试方法具体实现流程图;

图4是本发明实施例所提供的插件化调试装置结构图。

具体实施方式

本发明提出一种插件化调试方法及装置,下面结合附图,对本发明具体实施方式进行详细说明。

下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。

本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。

本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。

插件化框架replugin是一套完整的、稳定的、适合全面使用的占坑类插件化方案。相比其他插件,它只hook了classloader,最大程度的保证了稳定性、兼容性和可维护性。它的优势包括两个针对群体,即用户和开发者。

对于用户而言

一切按需:利用插件化方案,可以让用户的应用变得“小而精”。只有当用户需要使用某个特定功能时,才可以下载并开启,且可以随时卸载插件。这不仅可以减小apk大小、节省流量,还可明显的减少内存、内部存储的占用,将更多空间让给珍贵的相片、文档等资料。

随时体验新版:用户不用去应用市场等到大包升级,可以随时体验到新版的应用。现在红极一时的插件化、动态化(rn类)、热更新技术,都或多或少的在围绕此点而展开,可见其对用户带来的巨大价值。

对于开发者而言

发版灵活:不用等市场上线、等用户主动升级,结果错过宝贵的时机。插件化方案可让开发者做到“随时发版”,不受“发版窗口期”的限制。甚至可针对不同地域、不同用户群、不同时段来更新,且可以快速验证自己的构想。

组织结构灵活:一旦发版变得足够灵活,则组织结构上就可以由原来的“统一作战”变成“百团作战”,每个团队都在开发“自己的插件单品”,制定自己的发版计划模块思维:可以让团队形成“模块意识”。当然,插件间、插件与宿主间允许有适度的耦合,但不会是“毫无控制”的那种。这让开发者们意识到,我们之间是“插件间的协定”,而非“同一屋檐下,随便胡来”,迫使团队以全新又合适的方式来开发应用。

android原生优势:和动态化(rn类)不同,开发者可以使用最熟悉的java/kotlin语言,及各种原生api来开发插件。这使得应用能和系统更“契合”,充分利用原生的各种优势,且在性能上几乎感受不到影响。

对于插件化框架replugin而言,其包括4个相关的插件结构,分别为:

replugin-host-gradle,作用于宿主的脚本项目;

replugin-host-library,作用于宿主的依赖库;

replugin-plugin-gradle,作用于插件的脚本项目;

replugin-plugin-library,作用于插件的依赖库。

对于现有技术中所要解决的技术问题,基于上述插件化结构replugin的相关介绍,下面对本发明所提供的插件化调试方案进行具体的阐述。

如图1所示,为本发明所提供的插件化调试方法流程图,该流程包括如下步骤:

步骤101,获取插件调试指令。

步骤102,基于插件调试指令确定插件调试路径。

本步骤中,基于所确定的插件调试路径,以使得宿主能够基于该插件调试路径对待调试插件进行相应的调试处理。

通过上述处理流程的提供,实现了自动的插件化调试处理,提升了处理效率,也节省了用户的时间。

基于上述的插件化框架,本发明所提供的插件化调试方法可以应用于该插件化框架的宿主侧,也可以用于该插件化框架的插件侧,下面分别就该两种应用场景进行阐述。

其中,在宿主侧,该插件化调试处理方式可以包括插件的安装、插件的卸载、插件的更新、宿主当前运行信息的采集,以及插件当前运行信息的采集等,当然,上述所列举各插件化调试处理方式并非穷举,仅是为了介绍插件化调试处理所列举的几种调试方式,对于其他的插件化调试处理方式也均在本发明的保护范围之内。

如图2所示,为本发明实施例所提供的插件化调试方法具体实现流程图,该插件化调试方法应用于宿主中,具体包括如下步骤:

步骤201,接收用户输入的插件调试指令。

其中,在用户输入插件调试指令之前,会在该宿主中针对插件化调试处理进行相关函数的预埋处理,以为插件化调试提供对应的处理方式,实现了对应的调试处理,提升了调试效率。基于前述所列举的几种插件化调试处理方式,下面分别对其所分别对应的预埋的函数进行介绍,包括:

1.1、预埋调试接口协议广播接收器debuggerreceiver类。

1.1.1、在debuggerreceiver类继承broadcastreviceiver广播器类,并实现了里面的onreceive回调方法。在程序启动时,根据全局配置调试开关的状态来确定是否注册广播,从而选择是否开启该调试装置,该全局配置调试开关在云控配置文件里。

1.2、预埋相关安装插件代码函数,如下:

1.2.1、安装标准的apk函数oninstallbyapk(stringpath,booleanimmediately);其中,path表示apk放置在移动终端存储卡上面的位置,immediately表示该插件是否立即启用生效,函数返回值表示apk插件是否安装成功。

1.2.2、安装标准的apk函数oninstallbypn(stringpath,booleanimmediately);其中,path表示pn(一种特殊定制的插件,加载更快,安全性更高)放置在移动终端存储卡上面的位置,immediately表示该插件是否立即启用生效,函数返回值表示该pn插件是否安装成功。

1.3、预埋启动插件代码函数:

1.3.1、启动插件函数为onstartactivity(contextcontext,stringplugin,stringactivity);其中,context表示程序上下文(标准android的context参数即可),plugin表示插件的名字(这个名字在宿主中唯一表示一个插件实体,不可重复),activity表示插件中所期望启动的activity容器(该activity需要传入类的全路径字符串),函数返回值表示插件是否启动成功。另外该函数可以启动任何形式的插件,包括内置插件(宿主apk发布的时候已经提前内置的插件)和外置插件(通过云控配置,动态下发和存储卡安装成功的动态插件)。

1.4、预埋卸载插件代码函数:

1.4.1、卸载插件函数为onuninstallplugin(contextcontext,stringplugin);其中,context表示程序上下文(传入标准android的context参数即可),plugin表示插件的名字(这个名字在宿主中唯一表示一个插件实体,不可重复),函数返回值表示该插件是否卸载成功。另外该函数可以启动任何形式的插件,包括内置插件(宿主apk发布的时候已经提前内置的插件)和外置插件(通过云控配置,动态下发和存储卡安装成功的动态插件)。

1.5、预埋得到宿主当前运行信息采集函数代码:

1.5.1、宿主采集函数为gethostrunmsg(contextcontext,stringmode,longstarttime,longfinshtime,longext);其中,context表示程序上下文(传入标准android的context参数即可),mode表示采集方式,有下面几种方式:

1.5.1.1、mode=“oncetimebucket”时,表示采集时间段,starttime表示开始时间ntp时刻毫秒。finshtime表示结束ntp时刻毫秒。ext参数此时不生效。

1.5.1.2、mode=“oncetimedelay”时,表示延时多久后采集一次,starttime表示延时多久后采集一次(单位毫秒)。finshtime表示采集时长。ext参数此时不生效。

1.5.1.3、mode=“cycletimebucket”时,表示时刻后开始周期采集,starttime表示开始采集时间ntp时刻毫秒。finshtime表示采集时长。ext表示采样周期时间(单位毫秒),一个完整的采样周期是采集时长和间歇时间的和。

1.5.1.4、mode=“cycletimedelay”时,表示延时多久后开始周期采集,starttime表示延时多久后开始采集(单位毫秒)。finshtime表示采集时长。ext表示采样周期时间(单位毫秒),一个完整的采样周期是采集时长和间歇时间的和。

1.5.2、宿主采集函数gethostrunmsg(contextcontext,stringmode,longstarttime,longfinshtime,longext),其函数返回值表示是否配置采集参数成功。

1.5.3、宿主采集函数gethostrunmsg(contextcontext,stringmode,longstarttime,longfinshtime,longext)执行成功后,会根据云控配置的本地变量开关,选择启动一个进程或线程异步生成采样的数据结果文件到手机存储卡云控配置的目录地址中。该文件是经过加密的。用户看到都是密文。需要配套的上位机软件解密才能看到明文。

1.6、预埋得到插件当前运行信息采集函数代码:

1.6.1、插件采集函数为getpluginrunmsg(contextcontext,stringplugin,stringmode,longstarttime,longfinshtime,longext),context表示程序上下文(传入标准android的context参数即可)。plugin表示插件的名字(这个名字在宿主中唯一表示一个插件实体,不可重复)。mode表示采集方式,有下面几种方式:

1.6.1.1、mode=“oncetimebucket”时,表示采集时间段,starttime表示开始时间ntp时刻毫秒。finshtime表示结束ntp时刻毫秒。ext参数此时不生效。

1.6.1.2、mode=“oncetimedelay”时,表示延时多久后采集一次,starttime表示延时多久后采集一次(单位毫秒)。finshtime表示采集时长。ext参数此时不生效。

1.6.1.3、mode=“cycletimebucket”时,表示时刻后开始周期采集,starttime表示开始采集时间ntp时刻毫秒。finshtime表示采集时长。ext表示采样周期时间(单位毫秒),一个完整的采样周期是采集时长和间歇时间的和。

1.6.1.4、mode=“cycletimedelay”时,表示延时多久后开始周期采集,starttime表示延时多久后开始采集(单位毫秒)。finshtime表示采集时长。ext表示采样周期时间(单位毫秒),一个完整的采样周期是采集时长和间歇时间的和。

1.6.2、插件采集函数getpluginrunmsg(contextcontext,stringplugin,stringmode,longstarttime,longfinshtime,longext),其函数返回值表示采集参数是否配置成功。

1.6.3、插件采集函数getpluginrunmsg(contextcontext,stringplugin,stringmode,longstarttime,longfinshtime,longext)执行成功后,会根据云控配置的本地变量开关,选择启动一个进程或线程异步生成采样的数据结果文件到手机存储卡云控配置的目录地址中,该文件是经过加密的,用户看到都是密文,需要配套的上位机软件解密才能看到明文。

步骤202,基于用户输入的插件调试指令确定插件调试路径。

其中,该步骤还可以具体包括:

步骤2021,接收用户输入的插件调试指令。

步骤2022,对插件调试指令进行解析,得到待调试插件的标识信息。

步骤2023,基于标识信息确定待调试插件的插件调试路径。

进一步地,所述基于所述标识信息确定所述待调试插件的插件调试路径,包括:

基于所述标识信息查询所属宿主,确定所属宿主中与所述标识信息对应的插件的插件调试路径;或

基于所述标识信息向对应的插件发送路径请求消息;

接收所述插件返回的路径响应消息,获取所述路径响应消息中携带的对应所述标识信息的插件调试路径。

步骤203,宿主根据该确定的插件调试路径进行对应的插件调试处理。

对于宿主和插件二者而言,其彼此间的通信纽带为广播命令,具体为标准的adbshellambroadcast命令,简称adb命令。在一具体实施中,可以利用该adb命令和前述宿主中预埋的函数进行通信和调试执行的控制。如,"adbshellambroadcast-acom.qihoo360.mobilesafe.replugin.install-epath/users/roc/net.apk-eimmediatelytrue"来向com.qihoo360.mobilesafe包的宿主安装net.apk的插件。

在插件侧,该插件化调试处理方式可以包括宿主app的强制停止,将apk或pn文件推送到移动终端,宿主app的启动,标准插件的安装,pn插件的安装,插件运行,获取宿主信息和插件信息,当然,上述所列举各插件化调试处理方式并非穷举,仅是为了介绍插件化调试处理所列举的几种调试方式,对于其他的插件化调试处理方式也均在本发明的保护范围之内。

如图3所示,为本发明实施例所提供的插件化调试方法具体实现流程图,该插件化调试方法应用于插件中,尤其用于插件replugin-plugin-gradle中,具体包括如下步骤:

步骤301,接收用户输入的插件调试指令。

其中,在用户输入插件调试指令之前,由于插件replugin-plugin-gradle中封装有adbshellambroadcast命令,故在开发者需要调试当前代码工程的插件时,只要执行点击可视化环境或者手动输出插件replugin-plugin-gradle里面对应的task任务就可以完成调试。基于此,会在插件replugin-plugin-gradle中针对插件化调试处理进行相关的task任务预设,以为插件化调试时提供对应的处理方式,实现了对应的调试处理,提升了调试效率。基于前述所列举的几种插件化调试处理方式,下面分别对其所分别对应的预埋的task任务进行介绍,包括:

2.1.1、强制停止宿主app:核心实现原理是发送广播"${adbfile.absolutepath}shellamforce-stop${config.hostapplicationid}",其中${adbfile.absolutepath}表示标准adb工具文件所在的位置,${config.hostapplicationid}表示宿主apk的包名。

2.1.2、推送apk或pn文件到移动终端:核心实现原理是发送广播"${adbfile.absolutepath}push${apkfile.absolutepath}${config.phonestoragedir}",其中,${adbfile.absolutepath}表示标准adb工具文件所在的位置,${apkfile.absolutepath}表示插件apk或pn插件所在开发机上的文件路径,${config.phonestoragedir}表示插件apk或pn插件需要推送到移动终端存储卡上的位置。

2.1.3、启动宿主app:核心实现原理是发送广播"${adbfile.absolutepath}shellamstart-n\"${config.hostapplicationid}/${config.hostapplauncheractivity}\"-aandroid.intent.action.main-candroid.intent.category.launcher";其中,${adbfile.absolutepath}表示标准adb工具文件所在的位置,${config.hostapplicationid}表示宿主apk的包名。${config.hostapplauncheractivity}代表宿主配置的launcher的activtity。

2.1.4、安装标准插件:向宿主发送广播"${adbfile.absolutepath}shellambroadcast-a${config.hostapplicationid}.replugin.install-epath${apkpath}-eimmediately${immediately}";其中,${adbfile.absolutepath}表示标准adb工具文件所在的位置,${config.hostapplicationid}表示宿主的包名,${apkpath}表示apk所在的移动终端存储卡的路径,${immediately}表示是否立即生效。

2.1.5、安装特制pn插件:向宿主发送广播"${adbfile.absolutepath}shellambroadcast-a${config.hostapplicationid}.replugin.install_with_pn-epath${apkpath}-eimmediately${immediately}";其中,${adbfile.absolutepath}表示标准adb工具文件所在的位置,${config.hostapplicationid}表示宿主的包名,${apkpath}表示apk所在的移动终端存储卡的路径,${immediately}表示是否立即生效。

2.1.6、运行插件:核心实现原理是发送广播"${adbfile.absolutepath}shellambroadcast-a${config.hostapplicationid}.replugin.start_activity-eplugin${config.pluginname}";其中,${adbfile.absolutepath}代表标准adb工具文件所在的位置,${config.hostapplicationid}代表宿主的包名,${config.pluginname}代表plugin插件的名字(这个名字是宿主中唯一表示一个插件实体,不可重复)。

2.1.7、得到宿主信息:向宿主发送广播"${adbfile.absolutepath}shellambroadcast-a${config.hostapplicationid}.replugin.gethostrunmsg-emode${mode}-estarttime${starttime}-efinshtime${finshtime}-eext${ext}";其中,${adbfile.absolutepath}代表标准adb工具文件所在的位置,${config.hostapplicationid}代表宿主的包名,${mode}代表采集方式,${starttime},${finshtime},${ext}根据采集方式不同有不同的意义,具体参考前述1.5.1中的相关介绍。

2.1.8、得到插件信息:向宿主发送广播"${adbfile.absolutepath}shellambroadcast-a${config.hostapplicationid}.replugin.getpluginrunmsg-eplugin${config.pluginname}-emode${mode}-estarttime${starttime}-efinshtime${finshtime}-eext${ext}";其中,${adbfile.absolutepath}代表标准adb工具文件所在的位置,${config.hostapplicationid}代表宿主的包名,${config.pluginname}代表plugin代表插件的名字(这个名字是宿主中唯一表示一个插件实体,不可重复),${mode}代表采集方式,${starttime},${finshtime},和${ext}根据采集方式不同有不同的意义,具体参考前述1.6.1中的相关介绍。

步骤302,基于宿主发送的插件调试指令确定插件调试路径。

其中,该步骤还可以具体包括:

步骤3021,获取所述宿主发送的插件调试指令。

步骤3022,解析所述插件调试指令,得到待调试插件的标识信息。

步骤3023,确定所述待调试插件的标识信息与所属插件的标识信息是否一致。

当一致时,转到步骤3024,否则结束流程。

步骤3024,确定所属插件的插件调试路径为所述待调试插件的插件调试路径。

步骤303,向所述宿主发送通知消息。

其中,在该通知消息中会携带待调试插件的插件调试路径。

步骤304,宿主根据该插件调试路径进行对应的插件调试处理。

基于上述本发明所提供的技术方案,实现了自动的插件化调试处理,提升了处理效率,也节省了用户的时间,同时,由于预先的参数预设,避免了人为输入代码时的错误输入,进而提升了调试的准确率。

基于上述本发明所提供的插件化调试方法,本发明还提供了一种插件化调试装置,如图4所示,包括:

获取单元41,用于获取插件调试指令;

确定单元42,用于基于所述插件调试指令确定插件调试路径。

优选地,所述确定单元42,用于基于用户输入的插件调试指令确定插件调试路径;或,基于宿主发送的插件调试指令确定插件调试路径。

优选地,所述确定单元42,具体用于接收用户输入的插件调试指令;对所述插件调试指令进行解析,得到待调试插件的标识信息;基于所述标识信息确定所述待调试插件的插件调试路径。

优选地,所述确定单元42,进一步用于基于所述标识信息查询所属宿主,确定所属宿主中与所述标识信息对应的插件的插件调试路径;或基于所述标识信息向对应的插件发送路径请求消息;接收所述插件返回的路径响应消息,获取所述路径响应消息中携带的对应所述标识信息的插件调试路径。

优选地,所述确定单元42,具体用于获取所述宿主发送的插件调试指令;解析所述插件调试指令,得到待调试插件的标识信息;确定所述待调试插件的标识信息与所属插件的标识信息是否一致;并在一致时,确定所属插件的插件调试路径为所述待调试插件的插件调试路径。

优选地,还包括:

发送单元43,用于向所述宿主发送通知消息,并在所述通知消息中携带所述待调试插件的插件调试路径。

本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现上述插件化调试方法。

本发明还提供了一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;

所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行上述插件化调试方法对应的操作。

本发明中,通过获取插件调试指令;并基于所述插件调试指令确定插件调试路径,以使宿主基于所述插件调试路径对待调试插件进行调试,从而实现了自动的插件化调试处理,提升了处理效率,也节省了用户的时间,同时,由于预先的参数预设,避免了人为输入代码时的错误输入,进而提升了调试的准确率。

本技术领域技术人员可以理解,可以用计算机程序指令来实现这些结构图和/或框图和/或流图中的每个框以及这些结构图和/或框图和/或流图中的框的组合。本技术领域技术人员可以理解,可以将这些计算机程序指令提供给通用计算机、专业计算机或其他可编程数据处理方法的处理器来实现,从而通过计算机或其他可编程数据处理方法的处理器来执行本发明公开的结构图和/或框图和/或流图的框或多个框中指定的方案。

其中,本发明装置的各个模块可以集成于一体,也可以分离部署。上述模块可以合并为一个模块,也可以进一步拆分成多个子模块。

本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。

本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。

上述本发明序号仅仅为了描述,不代表实施例的优劣。

以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1