CN106648937B - 一种安卓应用的广播代理方法和装置 - Google Patents
一种安卓应用的广播代理方法和装置 Download PDFInfo
- Publication number
- CN106648937B CN106648937B CN201611246885.9A CN201611246885A CN106648937B CN 106648937 B CN106648937 B CN 106648937B CN 201611246885 A CN201611246885 A CN 201611246885A CN 106648937 B CN106648937 B CN 106648937B
- Authority
- CN
- China
- Prior art keywords
- broadcast receiver
- broadcast
- application
- broadcast message
- android
- 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.)
- Active
Links
Images
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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- 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/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45508—Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种安卓应用的广播代理方法和装置,其中所述方法包括:构造虚拟机环境,将安卓系统中的一个或多个指定安卓应用的分身应用放入虚拟机中,使得每个指定安卓应用的分身应用可以与相应的指定安卓应用并行运行;通过虚拟机的常驻服务代理虚拟机中的指定安卓应用的分身应用接受广播消息,并按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器。本方案使得用户在安卓系统中并行运行同一应用程序时,避免由于广播接收器注册信息重复而无法接受广播消息,甚至程序无法运行的弊端。
Description
技术领域
本发明涉及互联网技术领域,具体涉及一种安卓应用的广播代理方法和装置。
背景技术
现有技术中,安卓系统中的应用程序被安装时,应用程序安装包中的配置文件会向系统进行注册,以声明应用程序在运行过程中所需要用到的各种相关组件、资源的信息,以及,应用程序在运行过程中也可以向系统动态地进行进行注册,相应地,系统会记住应用程序被安装时或运行过程中的注册信息。以应用程序所用到的广播接收器组件为例,当有符合条件的广播消息到达时,该应用程序的广播接收器会正常接收并作出相应处理。
然而,当用户想在同一个安卓系统中,并行运行两个相同的应用程序时,由于两个相同的应用程序中的注册信息重复,系统无法接纳两个相同的应用程序的相同的注册信息,仍然以应用程序所用到的广播接收器组件为例,该应用程序对系统发送的或者系统转发的广播消息的应答就会出现异常,甚至无法接受到广播消息。这给用户带来诸多不便。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的安卓应用的广播代理方法和装置。
依据本发明的一个方面,提供了一种安卓应用的广播代理方法,该方法包括:
构造虚拟机环境,将安卓系统中的一个或多个指定安卓应用的分身应用放入虚拟机中,使得每个指定安卓应用的分身应用可以与相应的指定安卓应用并行运行;
代理虚拟机中的指定安卓应用的分身应用接收广播消息,按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器。
可选地,所述代理虚拟机中的指定安卓应用的分身应用接收广播消息包括:
监听安卓系统中发送广播消息的事件;
当监听到安卓系统中发送广播消息的事件时,判断所述广播消息的目标广播接收器是否为虚拟机中的指定安卓应用的分身应用的广播接收器;
是则,拦截并接收所述广播消息。
可选地,所述监听安卓系统中发送广播消息的事件包括:
将钩子函数挂载在安卓系统中发送广播消息的接口上,当拦截到所述发送广播消息的接口发送的广播消息时,确定监听到安卓系统中发送广播消息的事件;
该方法进一步包括:当确定所述广播消息的目标广播接收器不是虚拟机中的指定安卓应用的分身应用的广播接收器时,放行所述广播消息。
可选地,在所述代理虚拟机中的指定安卓应用的分身应用接收广播消息之前,该方法进一步包括:获取各指定安卓应用的分身应用所注册的广播接收器的相关信息并保存至配置管理表中;
则所述判断所述广播消息的目标广播接收器是否为虚拟机中的指定安卓应用的分身应用的广播接收器包括:
判断所述广播消息的目标广播接收器是否命中所述配置管理表中记录的广播接收器;
是则,确定所述广播消息的目标广播接收器是虚拟机中的指定安卓应用的分身应用的广播接收器;否则,确定所述广播消息的目标广播接收器不是虚拟机中的指定安卓应用的分身应用的广播接收器。
可选地,所述获取各指定安卓应用的分身应用所注册的广播接收器的相关信息并保存至配置管理表中包括:
获取各指定安卓应用的安装包复件并保存至指定目录,作为各指定安卓应用的分身应用的安装包;
解析各指定安卓应用的分身应用的安装包中的配置文件,获取各指定安卓应用的分身应用在相应配置文件中所注册的广播接收器的相关信息并保存至所述配置管理表中的静态注册表。
可选地,所述获取各指定安卓应用的分身应用所注册的广播接收器的相关信息并保存至配置管理表中还包括:
监听虚拟机中的指定安卓应用的分身应用向安卓系统注册广播接收器的事件;
当监听到该事件时,禁止该事件继续执行;获取该事件对应的广播接收器的相关信息并保存至所述配置管理表中的动态注册表。
可选地,所述监听虚拟机中的各指定安卓应用的分身应用向安卓系统注册广播接收器的事件包括:
将钩子函数挂载在虚拟机中注册广播接收器的接口上,当拦截到所述注册广播接收器的接口发送的注册请求时,确定监听到虚拟机中的指定安卓应用的分身应用向安卓系统注册广播接收器的事件;
所述当监听到该事件时,禁止该事件继续执行;获取该事件对应的广播接收器的相关信息并保存至所述配置管理表中的动态注册表包括:当监听到所述注册请求时,强制结束所述注册请求的继续传播;从所述注册请求中提取对应的广播接收器的相关信息并保存至所述动态注册表。
可选地,所述静态注册表和所述动态注册表中的每个广播接收器的相关信息包括:该广播接收器的属性数据;
所述判断所述广播消息的目标广播接收器是否命中所述配置管理表中记录的广播接收器包括:
从所述广播消息对应的Intent参数中提取指示目标广播接收器的属性数据,判断所提取的属性数据是否匹配于所述静态注册表和所述动态注册表中的广播接收器的属性数据;
如果所提取的属性数据匹配于所述静态注册表中的广播接收器的属性数据,确定所述广播消息的目标广播接收器命中所述静态注册表;
如果所提取的属性数据匹配于所述动态注册表中的广播接收器的属性数据,确定所述广播消息的目标广播接收器命中所述动态注册表。
可选地,该方法进一步包括:在安卓系统中预先声明用于运行广播接收器的预留进程;
当所述广播消息的目标广播接收器命中所述静态注册表时,所述按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器包括:
启动所述用于运行广播接收器的预留进程;在所述预留进程中对所述静态注册表中命中的广播接收器进行实例化;将所述广播消息发送至该实例化后的广播接收器。
可选地,所述在所述预留进程中对所述静态注册表中命中的广播接收器进行实例化包括:根据所述广播消息对应的Intent参数中指示目标广播接收器的属性数据在所述预留进程中对所述广播接收器进行实例化;
所述将所述广播消息发送至该实例化后的广播接收器包括:将所述广播消息对应的Intent参数发送至该实例化后的广播接收器,并回调该广播接收器中的onReceive方法。
可选地,所述动态注册表中的每个广播接收器的相关信息还包括:该广播接收器所属的进程信息;
当所述广播消息的目标广播接收器命中所述动态注册表时,所述按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器包括:
根据所述动态注册表中命中的广播接收器所属的进程信息,将所述广播消息发送至所述动态注册表中命中的广播接收器所属的进程中,使得该进程中的广播接收器接收所述广播消息。
可选地,所述动态注册表中的每个广播接收器所属的进程信息包括:该广播接收器对应的注册广播接收器的事件所用的Binder机制信息;
所述根据所述动态注册表中命中的广播接收器所属的进程信息,将所述广播消息发送至所述动态注册表中命中的广播接收器所属的进程中包括:根据所述动态注册表中命中的广播接收器对应的注册广播接收器的事件所用的Binder机制信息,通过调用相应的Binder机制将所述广播消息对应的Intent参数发送至相应的进程中。
可选地,所述代理虚拟机中的指定安卓应用的分身应用接收广播消息,按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器包括:
通过虚拟机中的常驻服务代理指定安卓应用的分身应用接收广播消息,按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器。
依据本发明的另一个方面,提供了一种安卓应用的广播代理装置,该装置包括:
环境构造单元,适于构造虚拟机环境,将安卓系统中的一个或多个指定安卓应用的分身应用放入虚拟机中,使得每个指定安卓应用的分身应用可以与相应的指定安卓应用并行运行;
常驻服务单元,适于代理虚拟机中的指定安卓应用的分身应用接收广播消息,按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器。
可选地,所述常驻服务单元,适于监听安卓系统中发送广播消息的事件;当监听到安卓系统中发送广播消息的事件时,判断所述广播消息的目标广播接收器是否为虚拟机中的指定安卓应用的分身应用的广播接收器;是则,拦截并接收所述广播消息。
可选地,所述常驻服务单元,适于将钩子函数挂载在安卓系统中发送广播消息的接口上,当拦截到所述发送广播消息的接口发送的广播消息时,确定监听到安卓系统中发送广播消息的事件;还适于当确定所述广播消息的目标广播接收器不是虚拟机中的指定安卓应用的分身应用的广播接收器时,放行所述广播消息。
可选地,所述常驻服务单元,进一步适于在所述代理虚拟机中的指定安卓应用的分身应用接收广播消息之前,获取各指定安卓应用的分身应用所注册的广播接收器的相关信息并保存至配置管理表中;适于判断所述广播消息的目标广播接收器是否命中所述配置管理表中记录的广播接收器;是则,确定所述广播消息的目标广播接收器是虚拟机中的指定安卓应用的分身应用的广播接收器;否则,确定所述广播消息的目标广播接收器不是虚拟机中的指定安卓应用的分身应用的广播接收器。
可选地,所述常驻服务单元,适于获取各指定安卓应用的安装包复件并保存至指定目录,作为各指定安卓应用的分身应用的安装包;解析各指定安卓应用的分身应用的安装包中的配置文件,获取各指定安卓应用的分身应用在相应配置文件中所注册的广播接收器的相关信息并保存至所述配置管理表中的静态注册表。
可选地,所述常驻服务单元,还适于监听虚拟机中的指定安卓应用的分身应用向安卓系统注册广播接收器的事件;当监听到该事件时,禁止该事件继续执行;获取该事件对应的广播接收器的相关信息并保存至所述配置管理表中的动态注册表。
可选地,所述常驻服务单元,适于将钩子函数挂载在虚拟机中注册广播接收器的接口上,当拦截到所述注册广播接收器的接口发送的注册请求时,确定监听到虚拟机中的指定安卓应用的分身应用向安卓系统注册广播接收器的事件;当监听到所述注册请求时,强制结束所述注册请求的继续传播;从所述注册请求中提取对应的广播接收器的相关信息并保存至所述动态注册表。
可选地,所述静态注册表和所述动态注册表中的每个广播接收器的相关信息包括:该广播接收器的属性数据;
所述常驻服务单元,适于从所述广播信息对应的Intent参数中提取指示目标广播接收器的属性数据,判断所提取的属性数据是否匹配于所述静态注册表和所述动态注册表中的广播接收器的属性数据;如果所提取的属性数据匹配于所述静态注册表中的广播接收器的属性数据,确定所述广播消息的目标广播接收器命中所述静态注册表;如果所提取的属性数据匹配于所述动态注册表中的广播接收器的属性数据,确定所述广播消息的目标广播接收器命中所述动态注册表。
可选地,该装置进一步包括:信息配置单元,适于在安卓系统中预先声明用于运行广播接收器的预留进程;
所述常驻服务单元,适于当所述广播消息的目标广播接收器命中所述静态注册表时,启动所述用于运行广播接收器的预留进程;在所述预留进程中对所述静态注册表中命中的广播接收器进行实例化;将所述广播消息发送至该实例化后的广播接收器。
可选地,所述常驻服务单元,适于根据所述广播消息对应的Intent参数中指示目标广播接收器的属性数据在所述预留进程中对所述广播接收器进行实例化;将所述广播消息对应的Intent参数发送至该实例化后的广播接收器,并回调该广播接收器中的onReceice方法。
可选地,所述动态注册表中的每个广播接收器的相关信息还包括:该广播接收器所属的进程信息;
所述常驻服务单元,适于当所述广播消息的目标广播接收器命中所述动态注册表时,根据所述动态注册表中命中的广播接收器所属的进程信息,将所述广播消息发送至所述动态注册表中命中的广播接收器所属的进程中,使得该进程中的广播接收器接收所述广播消息。
可选地,所述动态注册表中的每个广播接收器所属的进程信息包括:该广播接收器对应的注册广播接收器的事件所用的Binder机制信息;
所述常驻服务单元,适于当根据所述动态注册表中命中的广播接收器对应的注册广播接收器的事件所用的Binder机制信息,通过调用相应的Binder机制将所述广播消息对应的Intent参数发送至相应的进程中。
由上述可知,本发明的技术方案所构造的虚拟机环境在系统中额外的提供了一个平台,将安卓系统中的一个或多个指定安卓应用的分身应用放入虚拟机中运行,使得每个指定安卓应用的分身应用可以与相应的指定安卓应用并行运行,实现了指定安卓应用自身与指定安卓应用分身的并行运行,对于在虚拟机中运行的指定安卓应用的分身应用,由于这些虚拟机中运行的指定安卓应用的分身应用对于安卓系统来说是未知的,为了使得指定安卓应用的分身应用能够正常地接收广播消息并执行相应操作,本方案代理指定安卓应用的分身应用接收广播消息后,按一定的方式进行分析处理,并选择性的将符合条件的广播消息传送给指定安卓应用的分身应用的广播接收器。保证了指定安卓应用的分身应用与其对应的指定安卓应用一样能够正常的运行以及和系统正常的交互。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的一种安卓应用的广播的代理处理方法的流程图;
图2示出了根据本发明一个实施例的一种安卓应用的广播的代理处理装置的示意图;
图3示出了根据本发明另一个实施例的一种安卓应用的广播代理装置的示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的一种安卓应用的广播的代理处理方法的流程图,该方法包括:
步骤S110,构造虚拟机环境,将安卓系统中的一个或多个指定安卓应用的分身应用放入虚拟机中,使得每个指定安卓应用的分身应用可以与相应的指定安卓应用并行运行。
其中,指定安卓应用指的是能够在安卓系统中正常运行的,类似于QQ聊天、UC浏览器等的应用软件。而指定安卓应用的分身应用作为指定安卓应用的复制体,可以看做是指定安卓应用的分身。现有技术中,每个指定安卓应用的分身应用可以与相应的指定安卓应用是不可以并行运行的,其原因是安卓系统无法认可两个相同的应用所声明的相同的注册信息,因此,在指定安卓应用已安装的情况下,指定安卓应用的分身应用是无法成功注册到安卓系统中的,对于安卓系统来说,指定安卓应用的分身应用是未知的,安卓系统无法与其进行正常交互。
步骤S120,代理虚拟机中的指定安卓应用的分身应用接收广播消息,按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器。
其中,广播消息是指由安卓系统发送或者由安卓系统中的应用发送且由安卓系统转发的广播类的消息,包括系统的运行指令,或参数设定、更改等的消息。例如,对某一特定应用软件的开机启动,即为一条广播消息。
可见,图1所示的方法所构造的虚拟机环境在系统中额外的提供了一个平台,将安卓系统中的一个或多个指定安卓应用的分身应用放入虚拟机中运行,使得每个指定安卓应用的分身应用可以与相应的指定安卓应用并行运行,实现了指定安卓应用自身与指定安卓应用分身的并行运行,对于在虚拟机中运行的指定安卓应用的分身应用,由于这些虚拟机中运行的指定安卓应用的分身应用对于安卓系统来说是未知的,为了使得指定安卓应用的分身应用能够正常地接收广播消息并执行相应操作,本方案代理指定安卓应用的分身应用接收广播消息后,按一定的方式进行分析处理,并选择性的将符合条件的广播消息传送给指定安卓应用的分身应用的广播接收器。保证了指定安卓应用的分身应用与其对应的指定安卓应用一样能够正常的运行以及和系统正常的交互。
例如,依据本方案,用户可以在安卓手机上以不同账号登录两个QQ应用,使得这两个QQ应用并行地运行,用户可以根据需求分别使用这两个QQ应用与不同的好友进行对话。
在本发明的一个实施例中,图1所示方法的步骤S120中所述代理虚拟机中的指定安卓应用的分身应用接受广播消息包括:监听安卓系统中发送广播消息的事件;当监听到安卓系统中发送广播消息的事件时,判断所述广播消息的目标广播接收器是否为虚拟机中的指定安卓应用的分身应用的广播接收器;是则,拦截并接收所述广播消息。
具体地,上述监听安卓系统中发送广播消息的事件包括:将钩子函数挂载在安卓系统中发送广播消息的接口上,当拦截到所述发送广播消息的接口发送的广播消息时,确定监听到安卓系统中发送广播消息的事件;则当确定所述广播消息的目标广播接收器不是虚拟机中的指定安卓应用的分身应用的广播接收器时,该方法进一步包括:放行所述广播消息。
其中,系统的广播消息都是由接口发出的。在不曾发送广播消息的接口上,钩子函数抓取不到任何指令,即表示,系统在该接口处无广播消息;若钩子函数在接口处拦截到发送广播消息的指令,则表示系统在该接口处有发送广播消息的事件发生。
系统总是在不停的向应用程序发送各种各样的广播消息。因为系统中的应用有很多,对某一特定的应用,系统发送的很多广播消息实际上是与它无关的。比如,用户在安卓系统中正同时在运行一个QQ聊天应用和一个UC浏览器应用。此时系统发送了一条“关闭UC浏览器软件”的广播消息,那这条消息对QQ聊天应用软件是没有作用的。也就是该广播消息的目标接收器为UC浏览器应用软件的广播接收器,而非QQ聊天应用软件的应用接收器。
所以,在钩子函数确定拦截到的广播消息的广播接收器,并非是虚拟机中的指定安卓应用的分身应用的广播接收器时,则放行该广播消息。即该广播消息对分身应用接下来的行为不会产生任何影响。
在本发明的一个实施例中,在所述代理虚拟机中的指定安卓应用的分身应用接收广播消息之前,图1所示的方法进一步包括:获取各指定安卓应用的分身应用所注册的广播接收器的相关信息,并保存至配置管理表中。
则上述判断所述广播消息的目标广播接收器是否为虚拟机中的指定安卓应用的分身应用的广播接收器包括:判断所述广播消息的目标广播接收器是否命中所述配置管理表中记录的广播接收器;是则,确定所述广播消息的目标广播接收器时虚拟机中的指定安卓应用的分身应用的广播接收器;否则,确定所述广播消息的目标广播接收器不是虚拟机中的指定安卓应用的分身应用的广播接收器。
其中,每一个应用软件在被安装到安卓系统中时,该应用的安装包被安装在安卓系统中,安装包中包含配置文件,配置文件中的配置信息被相应地注册到安卓系统中,以向安卓系统声明应用在运行过程中所需要用到的组件和资源等信息。一般情况下,不同应用所注册的信息是不同的。
通常来说,不同的安卓应用的分身应用所注册的广播接收器的相关注册信息是不同的。同一个安卓应用的分身应用在不同时刻的广播接收器的相关注册信息也有可能是不同的。所以,在代理虚拟机中的指定安卓应用的分身应用每一次接收广播之前,都要先获取该时刻之前的该安卓应用的分身应用在不同时刻的广播接收器的相关注册信息,并保存至配置管理表中。
在本发明的一个实施例中,上述获取到的分身应用所注册的广播接收器的相关信息是指广播接收器的静态注册信息,即上述获取各指定安卓应用的分身应用所注册的广播接收器的相关信息并保存至配置管理表中包括:获取各指定安卓应用的安装包复件并保存至指定目录,作为各指定安卓应用的分身应用的安装包;解析各指定安卓应用的分身应用的安装包中的配置文件,获取各指定安卓应用的分身应用在相应配置文件中所注册的广播接收器的相关信息并保存至所述配置管理表中的静态注册表。
例如,用户在安卓系统中正常安装一个QQ聊天应用,包含该应用注册信息的安装包被复制到虚拟机环境中,故所有与广播接收器有关的注册信息均静态的存在于该安装包中。
在本发明的另一个实施例中,上述获取到的分身应用所注册的广播接收器的相关信息是指广播接收器的动态注册信息,即上述获取各指定安卓应用的分身应用所注册的广播接收器的相关信息并保存至配置管理表中还包括:监听虚拟机中的指定安卓应用的分身应用向安卓系统注册广播接收器的事件;当监听到该事件时,禁止该事件继续执行;获取该事件对应的广播接收器的相关信息并保存至所述配置管理表中的动态注册表。
具体地,上述监听虚拟机中的各指定安卓应用的分身应用向安卓系统注册广播接收器的事件包括:将钩子函数挂载在虚拟机中注册广播接收器的接口上,当拦截到所述注册广播接收器的接口发送的注册请求时,确定监听到虚拟机中的指定安卓应用的分身应用向安卓系统注册广播接收器的事件;所述当监听到该事件时,禁止该事件继续执行;上述该事件对应的广播接收器的相关信息并保存至所述配置管理表中的动态注册表包括:当监听到所述注册请求时,强制结束所述注册请求的继续传播;从所述注册请求中提取对应的广播接收器的相关信息并保存至所述动态注册表中。
例如,用户在安卓系统中运行一个QQ聊天应用,同时在虚拟机中运行该QQ聊天应用的分身应用。此时,该分身应用向安卓系统发送事件A,该事件A的内容为:向安卓系统注册广播接收器。该事件A以注册请求的方式发送,并且该注册请求中包含了与广播接收器相关的信息。
在上述建立动态注册表和静态注册表的基础上,所述静态注册表和所述动态注册表中的每个广播接收器的相关信息包括:该广播接收器的属性数据。
则所述判断所述广播消息的目标广播接收器是否命中所述配置管理表中记录的广播接收器包括:从所述广播消息对应的Intent参数中提取指示目标广播接收器的属性数据,判断所提取的属性数据是否匹配于所述静态注册表和所述动态注册表中的广播接收器的属性数据;如果所提取的属性数据匹配于所述静态注册表中的广播接收器的属性数据,确定所述广播消息的目标广播接收器命中所述静态注册表;如果所提取的属性数据匹配于所述动态注册表中的广播接收器的属性数据,确定所述广播消息的目标广播接收器命中所述动态注册表。其中,Intent参数用来描述广播消息的特征,这些参数中也包含目标广播接收器的某些参数。
因为一个应用安装到系统之后,该系统就会记住该应用配置文件中声明的固有的广播参数。
当确定所述广播消息的目标广播接收器命中所述静态注册表时,在本发明的一个实施例中,图1所示的方法进一步包括:在安卓系统中预先声明用于运行广播接收器的预留进程。
则当所述广播消息的目标广播接收器命中所述静态注册表时,所述按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器包括:启动所述用于运行广播接收器的预留进程;在所述预留进程中对所述静态注册表中命中的广播接收器进行实例化;将所述广播消息发送至该实例化后的广播接收器。
例如name1代表一个广播接收器,name2代表另一个广播接收器。若一条广播消息Intent参数用来指示目标广播接收器的属性数据为name1,则表示该广播消息应该被name1广播接收器接受并执行。
具体地,所述在所述预留进程中对所述静态注册表中命中的广播接收器进行实例化包括:根据所述广播消息对应的Intent参数中指示目标广播接收器的属性数据在所述预留进程中对所述广播接收器进行实例化;
所述将所述广播消息发送至该实例化后的广播接收器包括:将所述广播消息对应的Intent参数发送至该实例化后的广播接收器,并回调该广播接收器的onReceive方法。
例如,现有四个广播消息:1、2、3、4,每个广播消息各自带Intent参数。若四个广播消息均为静态,则虚拟机会为每一个广播消息分配一个相对应的接收预留进程1、2、3、4。当然也有可能不同的广播消息对应同一个接收预留进程,表示可以这些不同的广播消息可以被同一个广播接收器接收,即在同一个进程中运行。若启动预留进程1,则记录在预留进程1中的广播消息1的Intent参数被提取出来,把其目标广播接收器实例化,调用该目标广播接收器的onReceiver方法。则该广播消息成功完成。依次类推,其他的广播消息用同样的方式处理。
当确定所述广播消息的目标广播接收器命中所述动态注册表时,在本发明的一个实施例中,所述动态注册表中的每个广播接收器的相关信息还包括:该广播接收器所属的进程信息;当所述广播消息的目标广播接收器命中所述动态注册表时,所述按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器包括:根据所述动态注册表中命中的广播接收器所属的进程信息,将所述广播消息发送至所述动态注册表中命中的广播接收器所属的进程中,使得该进程中的广播接收器接受所述广播消息。
其中,所述动态注册表中的每个广播接收器所属的进程信息包括:该广播接收器对应的注册广播接收器的事件所用的Binder机制信息;所述根据所述动态注册表中命中的广播接收器所属的进程信息,将所述广播消息发送至所述动态注册表中命中的广播接收器所述的进程中包括:根据所述动态注册表中命中的广播接收器对应的注册广播接收器的事件所用的Binder机制信息,通过调用相应的Binder机制将所述广播消息对应的Intent参数发送至相应的进程中。
即,动态注册的广播消息,因为是动态的,它对应一个进程中的Binder。该Binder中就包含了该广播消息的属性数据,即Intent参数。动态注册的广播消息于广播接收器可能是一对一的匹配,也可能是多对一的匹配。
在本发明的一个实施例中,所述代理虚拟机中的指定安卓应该的分身应用接收广播消息,按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器包括:通过虚拟机中的常驻服务代理指定安卓应用的分身应用接收广播消息,安卓预设策略将所述广播消息转发至相应指定安卓应用的复件应该的广播接收器。其中,该常驻服务存在于该构建的虚拟机中。
图2示出了根据本发明一个实施例的一种安卓应用的广播代理装置的示意图。如图2所示,该安卓应用的广播代理装置200包括:
环境构造单元210,适于构造虚拟机环境,将安卓系统中的一个或多个指定安卓应用的分身应用放入虚拟机中,使得每个指定安卓应用的分身应用可以与相应的指定安卓应用并行运行;
常驻服务单元220,适于代理虚拟机中的指定安卓应用的分身应用接收广播消息,按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器。
可见,图2所示的装置所构造的虚拟机环境在系统中额外的提供了一个平台,将安卓系统中的一个或多个指定安卓应用的分身应用放入虚拟机中运行,使得每个指定安卓应用的分身应用可以与相应的指定安卓应用并行运行,实现了指定安卓应用自身与指定安卓应用分身的并行运行,对于在虚拟机中运行的指定安卓应用的分身应用,由于这些虚拟机中运行的指定安卓应用的分身应用对于安卓系统来说是未知的,为了使得指定安卓应用的分身应用能够正常地接收广播消息并执行相应操作,本方案代理指定安卓应用的分身应用接收广播消息后,按一定的方式进行分析处理,并选择性的将符合条件的广播消息传送给指定安卓应用的分身应用的广播接收器。保证了指定安卓应用的分身应用与其对应的指定安卓应用一样能够正常的运行以及和系统正常的交互。
在本发明的一个实施例中,常驻服务单元220,适于监听安卓系统中发送广播消息的事件;当监听到安卓系统中发送广播消息的事件时,判断所述广播消息的目标广播接收器是否为虚拟机中的指定安卓应用的分身应用的广播接收器;是则,拦截并接收所述广播消息。
具体地,常驻服务单元220,适于将钩子函数挂载在安卓系统中发送广播消息的接口上,当拦截到所述发送广播消息的接口发送的广播消息时,确定监听到安卓系统中发送广播消息的事件;还适于当确定所述广播消息的目标广播接收器不是虚拟机中的指定安卓应用的分身应用的广播接收器时,放行所述广播消息。
在本发明的一个实施例中,常驻服务单元220,进一步适于在所述代理虚拟机中的指定安卓应用的分身应用接收广播消息之前,获取各指定安卓应用的分身应用所注册的广播接收器的相关信息并保存至配置管理表中;适于判断所述广播消息的目标广播接收器是否命中所述配置管理表中记录的广播接收器;是则,确定所述广播消息的目标广播接收器是虚拟机中的指定安卓应用的分身应用的广播接收器;否则,确定所述广播消息的目标广播接收器不是虚拟机中的指定安卓应用的分身应用的广播接收器。
在本发明的一个实施例中,常驻服务单元220,适于获取各指定安卓应用的安装包复件并保存至指定目录,作为各指定安卓应用的分身应用的安装包;解析各指定安卓应用的分身应用的安装包中的配置文件,获取各指定安卓应用的分身应用在相应配置文件中所注册的广播接收器的相关信息并保存至所述配置管理表中的静态注册表。
进一步地,在本发明的一个实施例中,常驻服务单元220,还适于监听虚拟机中的指定安卓应用的分身应用向安卓系统注册广播接收器的事件;当监听到该事件时,禁止该事件继续执行;获取该事件对应的广播接收器的相关信息并保存至所述配置管理表中的动态注册表。
其中,常驻服务单元220,适于将钩子函数挂载在虚拟机中注册广播接收器的接口上,当拦截到所述注册广播接收器的接口发送的注册请求时,确定监听到虚拟机中的指定安卓应用的分身应用向安卓系统注册广播接收器的事件;当监听到所述注册请求时,强制结束所述注册请求的继续传播;从所述注册请求中提取对应的广播接收器的相关信息并保存至所述动态注册表。
具体地,所述静态注册表和所述动态注册表中的每个广播接收器的相关信息包括:该广播接收器的属性数据;
所述常驻服务单元220,适于从所述广播信息对应的Intent参数中提取指示目标广播接收器的属性数据,判断所提取的属性数据是否匹配于所述静态注册表和所述动态注册表中的广播接收器的属性数据;如果所提取的属性数据匹配于所述静态注册表中的广播接收器的属性数据,确定所述广播消息的目标广播接收器命中所述静态注册表;如果所提取的属性数据匹配于所述动态注册表中的广播接收器的属性数据,确定所述广播消息的目标广播接收器命中所述动态注册表。
在本发明的一个实施例中,所述动态注册表中的每个广播接收器的相关信息还包括:该广播接收器所属的进程信息;所述常驻服务单元220,适于当所述广播消息的目标广播接收器命中所述动态注册表时,根据所述动态注册表中命中的广播接收器所属的进程信息,将所述广播消息发送至所述动态注册表中命中的广播接收器所属的进程中,使得该进程中的广播接收器接收所述广播消息。
在本发明的一个实施例中,所述动态注册表中的每个广播接收器所属的进程信息包括:该广播接收器对应的注册广播接收器的事件所用的Binder机制信息;所述常驻服务单元220,适于当根据所述动态注册表中命中的广播接收器对应的注册广播接收器的事件所用的Binder机制信息,通过调用相应的Binder机制将所述广播消息对应的Intent参数发送至相应的进程中。
图3示出了根据本发明另一个实施例的一种安卓应用的广播代理装置的示意图。如图3所示,该安卓应用的广播代理装置300包括:环境构造单元310、常驻服务单元320和信息配置单元330。
其中,环境构造单元310、常驻服务单元320具有与上述环境构造单元210、常驻服务单元220对应相同的功能,相同的部分在此不再赘述。
信息配置单元330,适于在安卓系统中预先声明用于运行广播接收器的预留进程。
在本发明的一个实施例中,所述常驻服务单元320,还适于当所述广播消息的目标广播接收器命中所述静态注册表时,启动所述用于运行广播接收器的预留进程;在所述预留进程中对所述静态注册表中命中的广播接收器进行实例化;将所述广播消息发送至该实例化后的广播接收器。
具体地,常驻服务单元320,适于根据所述广播消息对应的Intent参数中指示目标广播接收器的属性数据在所述预留进程中对所述广播接收器进行实例化;将所述广播消息对应的Intent参数发送至该实例化后的广播接收器,并回调该广播接收器中的onReceice方法。
需要说明的是,图2-图3所示装置的各实施例与图1所示方法的各实施例对应相同,上文已有详细说明,在此不再赘述。
综上所述,在本发明的技术方案中,所构造的虚拟机环境在系统中额外的提供了一个平台,将安卓系统中的一个或多个指定安卓应用的分身应用放入虚拟机中运行,使得每个指定安卓应用的分身应用可以与相应的指定安卓应用并行运行,实现了指定安卓应用自身与指定安卓应用分身的并行运行,对于在虚拟机中运行的指定安卓应用的分身应用,由于这些虚拟机中运行的指定安卓应用的分身应用对于安卓系统来说是未知的,为了使得指定安卓应用的分身应用能够正常地接收广播消息并执行相应操作,本方案代理指定安卓应用的分身应用接收广播消息后,按一定的方式进行分析处理,并选择性的将符合条件的广播消息传送给指定安卓应用的分身应用的广播接收器。保证了指定安卓应用的分身应用与其对应的指定安卓应用一样能够正常的运行以及和系统正常的交互。
需要说明的是:
在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的安卓应用的广播代理装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明公开了A1、一种安卓应用的广播代理方法,其中,包括:
构造虚拟机环境,将安卓系统中的一个或多个指定安卓应用的分身应用放入虚拟机中,使得每个指定安卓应用的分身应用可以与相应的指定安卓应用并行运行;
代理虚拟机中的指定安卓应用的分身应用接收广播消息,按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器。
A2、如A1所述的方法,其中,所述代理虚拟机中的指定安卓应用的分身应用接收广播消息包括:
监听安卓系统中发送广播消息的事件;
当监听到安卓系统中发送广播消息的事件时,判断所述广播消息的目标广播接收器是否为虚拟机中的指定安卓应用的分身应用的广播接收器;
是则,拦截并接收所述广播消息。
A3、如A2所述的方法,其中,所述监听安卓系统中发送广播消息的事件包括:
将钩子函数挂载在安卓系统中发送广播消息的接口上,当拦截到所述发送广播消息的接口发送的广播消息时,确定监听到安卓系统中发送广播消息的事件;
该方法进一步包括:当确定所述广播消息的目标广播接收器不是虚拟机中的指定安卓应用的分身应用的广播接收器时,放行所述广播消息。
A4、如A2所述的方法,其中,在所述代理虚拟机中的指定安卓应用的分身应用接收广播消息之前,该方法进一步包括:获取各指定安卓应用的分身应用所注册的广播接收器的相关信息并保存至配置管理表中;
则所述判断所述广播消息的目标广播接收器是否为虚拟机中的指定安卓应用的分身应用的广播接收器包括:
判断所述广播消息的目标广播接收器是否命中所述配置管理表中记录的广播接收器;
是则,确定所述广播消息的目标广播接收器是虚拟机中的指定安卓应用的分身应用的广播接收器;否则,确定所述广播消息的目标广播接收器不是虚拟机中的指定安卓应用的分身应用的广播接收器。
A5、如A4所述的方法,其中,所述获取各指定安卓应用的分身应用所注册的广播接收器的相关信息并保存至配置管理表中包括:
获取各指定安卓应用的安装包复件并保存至指定目录,作为各指定安卓应用的分身应用的安装包;
解析各指定安卓应用的分身应用的安装包中的配置文件,获取各指定安卓应用的分身应用在相应配置文件中所注册的广播接收器的相关信息并保存至所述配置管理表中的静态注册表。
A6、如A5所述的方法,其中,所述获取各指定安卓应用的分身应用所注册的广播接收器的相关信息并保存至配置管理表中还包括:
监听虚拟机中的指定安卓应用的分身应用向安卓系统注册广播接收器的事件;
当监听到该事件时,禁止该事件继续执行;获取该事件对应的广播接收器的相关信息并保存至所述配置管理表中的动态注册表。
A7、如A6所述的方法,其中,所述监听虚拟机中的各指定安卓应用的分身应用向安卓系统注册广播接收器的事件包括:
将钩子函数挂载在虚拟机中注册广播接收器的接口上,当拦截到所述注册广播接收器的接口发送的注册请求时,确定监听到虚拟机中的指定安卓应用的分身应用向安卓系统注册广播接收器的事件;
所述当监听到该事件时,禁止该事件继续执行;获取该事件对应的广播接收器的相关信息并保存至所述配置管理表中的动态注册表包括:当监听到所述注册请求时,强制结束所述注册请求的继续传播;从所述注册请求中提取对应的广播接收器的相关信息并保存至所述动态注册表。
A8、如A6所述的方法,其中,所述静态注册表和所述动态注册表中的每个广播接收器的相关信息包括:该广播接收器的属性数据;
所述判断所述广播消息的目标广播接收器是否命中所述配置管理表中记录的广播接收器包括:
从所述广播消息对应的Intent参数中提取指示目标广播接收器的属性数据,判断所提取的属性数据是否匹配于所述静态注册表和所述动态注册表中的广播接收器的属性数据;
如果所提取的属性数据匹配于所述静态注册表中的广播接收器的属性数据,确定所述广播消息的目标广播接收器命中所述静态注册表;
如果所提取的属性数据匹配于所述动态注册表中的广播接收器的属性数据,确定所述广播消息的目标广播接收器命中所述动态注册表。
A9、如A8所述的方法,其中,该方法进一步包括:在安卓系统中预先声明用于运行广播接收器的预留进程;
当所述广播消息的目标广播接收器命中所述静态注册表时,所述按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器包括:
启动所述用于运行广播接收器的预留进程;在所述预留进程中对所述静态注册表中命中的广播接收器进行实例化;将所述广播消息发送至该实例化后的广播接收器。
A10、如A9所述的方法,其中,所述在所述预留进程中对所述静态注册表中命中的广播接收器进行实例化包括:根据所述广播消息对应的Intent参数中指示目标广播接收器的属性数据在所述预留进程中对所述广播接收器进行实例化;
所述将所述广播消息发送至该实例化后的广播接收器包括:将所述广播消息对应的Intent参数发送至该实例化后的广播接收器,并回调该广播接收器中的onReceive方法。
A11、如A8所述的方法,其中,所述动态注册表中的每个广播接收器的相关信息还包括:该广播接收器所属的进程信息;
当所述广播消息的目标广播接收器命中所述动态注册表时,所述按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器包括:
根据所述动态注册表中命中的广播接收器所属的进程信息,将所述广播消息发送至所述动态注册表中命中的广播接收器所属的进程中,使得该进程中的广播接收器接收所述广播消息。
A12、如A11所述的方法,其中,所述动态注册表中的每个广播接收器所属的进程信息包括:该广播接收器对应的注册广播接收器的事件所用的Binder机制信息;
所述根据所述动态注册表中命中的广播接收器所属的进程信息,将所述广播消息发送至所述动态注册表中命中的广播接收器所属的进程中包括:根据所述动态注册表中命中的广播接收器对应的注册广播接收器的事件所用的Binder机制信息,通过调用相应的Binder机制将所述广播消息对应的Intent参数发送至相应的进程中。
A13、如A1所述的方法,其中,所述代理虚拟机中的指定安卓应用的分身应用接收广播消息,按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器包括:
通过虚拟机中的常驻服务代理指定安卓应用的分身应用接收广播消息,按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器。
本发明还公开了B14、一种安卓应用的广播代理装置,其中,包括:
环境构造单元,适于构造虚拟机环境,将安卓系统中的一个或多个指定安卓应用的分身应用放入虚拟机中,使得每个指定安卓应用的分身应用可以与相应的指定安卓应用并行运行;
常驻服务单元,适于代理虚拟机中的指定安卓应用的分身应用接收广播消息,按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器。
B15、如B14所述的装置,其中,
所述常驻服务单元,适于监听安卓系统中发送广播消息的事件;当监听到安卓系统中发送广播消息的事件时,判断所述广播消息的目标广播接收器是否为虚拟机中的指定安卓应用的分身应用的广播接收器;是则,拦截并接收所述广播消息。
B16、如B15所述的装置,其中,
所述常驻服务单元,适于将钩子函数挂载在安卓系统中发送广播消息的接口上,当拦截到所述发送广播消息的接口发送的广播消息时,确定监听到安卓系统中发送广播消息的事件;还适于当确定所述广播消息的目标广播接收器不是虚拟机中的指定安卓应用的分身应用的广播接收器时,放行所述广播消息。
B17、如B15所述的装置,其中,
所述常驻服务单元,进一步适于在所述代理虚拟机中的指定安卓应用的分身应用接收广播消息之前,获取各指定安卓应用的分身应用所注册的广播接收器的相关信息并保存至配置管理表中;适于判断所述广播消息的目标广播接收器是否命中所述配置管理表中记录的广播接收器;是则,确定所述广播消息的目标广播接收器是虚拟机中的指定安卓应用的分身应用的广播接收器;否则,确定所述广播消息的目标广播接收器不是虚拟机中的指定安卓应用的分身应用的广播接收器。
B18、如B17所述的装置,其中,
所述常驻服务单元,适于获取各指定安卓应用的安装包复件并保存至指定目录,作为各指定安卓应用的分身应用的安装包;解析各指定安卓应用的分身应用的安装包中的配置文件,获取各指定安卓应用的分身应用在相应配置文件中所注册的广播接收器的相关信息并保存至所述配置管理表中的静态注册表。
B19、如B18所述的装置,其中,
所述常驻服务单元,还适于监听虚拟机中的指定安卓应用的分身应用向安卓系统注册广播接收器的事件;当监听到该事件时,禁止该事件继续执行;获取该事件对应的广播接收器的相关信息并保存至所述配置管理表中的动态注册表。
B20、如B19所述的装置,其中,
所述常驻服务单元,适于将钩子函数挂载在虚拟机中注册广播接收器的接口上,当拦截到所述注册广播接收器的接口发送的注册请求时,确定监听到虚拟机中的指定安卓应用的分身应用向安卓系统注册广播接收器的事件;当监听到所述注册请求时,强制结束所述注册请求的继续传播;从所述注册请求中提取对应的广播接收器的相关信息并保存至所述动态注册表。
B21、如B19所述的装置,其中,所述静态注册表和所述动态注册表中的每个广播接收器的相关信息包括:该广播接收器的属性数据;
所述常驻服务单元,适于从所述广播信息对应的Intent参数中提取指示目标广播接收器的属性数据,判断所提取的属性数据是否匹配于所述静态注册表和所述动态注册表中的广播接收器的属性数据;如果所提取的属性数据匹配于所述静态注册表中的广播接收器的属性数据,确定所述广播消息的目标广播接收器命中所述静态注册表;如果所提取的属性数据匹配于所述动态注册表中的广播接收器的属性数据,确定所述广播消息的目标广播接收器命中所述动态注册表。
B22、如B21所述的装置,其中,该装置进一步包括:信息配置单元,适于在安卓系统中预先声明用于运行广播接收器的预留进程;
所述常驻服务单元,适于当所述广播消息的目标广播接收器命中所述静态注册表时,启动所述用于运行广播接收器的预留进程;在所述预留进程中对所述静态注册表中命中的广播接收器进行实例化;将所述广播消息发送至该实例化后的广播接收器。
B23、如B22所述的装置,其中,所述常驻服务单元,适于根据所述广播消息对应的Intent参数中指示目标广播接收器的属性数据在所述预留进程中对所述广播接收器进行实例化;将所述广播消息对应的Intent参数发送至该实例化后的广播接收器,并回调该广播接收器中的onReceice方法。
B24、如B21所述的装置,其中,所述动态注册表中的每个广播接收器的相关信息还包括:该广播接收器所属的进程信息;
所述常驻服务单元,适于当所述广播消息的目标广播接收器命中所述动态注册表时,根据所述动态注册表中命中的广播接收器所属的进程信息,将所述广播消息发送至所述动态注册表中命中的广播接收器所属的进程中,使得该进程中的广播接收器接收所述广播消息。
B25、如B24所述的装置,其中,所述动态注册表中的每个广播接收器所属的进程信息包括:该广播接收器对应的注册广播接收器的事件所用的Binder机制信息;
所述常驻服务单元,适于当根据所述动态注册表中命中的广播接收器对应的注册广播接收器的事件所用的Binder机制信息,通过调用相应的Binder机制将所述广播消息对应的Intent参数发送至相应的进程中。
Claims (24)
1.一种安卓应用的广播代理方法,其中,包括:
构造虚拟机环境,将安卓系统中的一个或多个指定安卓应用的分身应用放入虚拟机中,使得每个指定安卓应用的分身应用可以与相应的指定安卓应用并行运行;
代理虚拟机中的指定安卓应用的分身应用接收广播消息,按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器;
所述代理虚拟机中的指定安卓应用的分身应用接收广播消息,按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器包括:
通过虚拟机中的常驻服务代理指定安卓应用的分身应用接收广播消息,按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器。
2.如权利要求1所述的方法,其中,所述代理虚拟机中的指定安卓应用的分身应用接收广播消息包括:
监听安卓系统中发送广播消息的事件;
当监听到安卓系统中发送广播消息的事件时,判断所述广播消息的目标广播接收器是否为虚拟机中的指定安卓应用的分身应用的广播接收器;
是则,拦截并接收所述广播消息。
3.如权利要求2所述的方法,其中,所述监听安卓系统中发送广播消息的事件包括:
将钩子函数挂载在安卓系统中发送广播消息的接口上,当拦截到所述发送广播消息的接口发送的广播消息时,确定监听到安卓系统中发送广播消息的事件;
该方法进一步包括:当确定所述广播消息的目标广播接收器不是虚拟机中的指定安卓应用的分身应用的广播接收器时,放行所述广播消息。
4.如权利要求2所述的方法,其中,在所述代理虚拟机中的指定安卓应用的分身应用接收广播消息之前,该方法进一步包括:获取各指定安卓应用的分身应用所注册的广播接收器的相关信息并保存至配置管理表中;
则所述判断所述广播消息的目标广播接收器是否为虚拟机中的指定安卓应用的分身应用的广播接收器包括:
判断所述广播消息的目标广播接收器是否命中所述配置管理表中记录的广播接收器;
是则,确定所述广播消息的目标广播接收器是虚拟机中的指定安卓应用的分身应用的广播接收器;否则,确定所述广播消息的目标广播接收器不是虚拟机中的指定安卓应用的分身应用的广播接收器。
5.如权利要求4所述的方法,其中,所述获取各指定安卓应用的分身应用所注册的广播接收器的相关信息并保存至配置管理表中包括:
获取各指定安卓应用的安装包复件并保存至指定目录,作为各指定安卓应用的分身应用的安装包;
解析各指定安卓应用的分身应用的安装包中的配置文件,获取各指定安卓应用的分身应用在相应配置文件中所注册的广播接收器的相关信息并保存至所述配置管理表中的静态注册表。
6.如权利要求5所述的方法,其中,所述获取各指定安卓应用的分身应用所注册的广播接收器的相关信息并保存至配置管理表中还包括:
监听虚拟机中的指定安卓应用的分身应用向安卓系统注册广播接收器的事件;
当监听到该事件时,禁止该事件继续执行;获取该事件对应的广播接收器的相关信息并保存至所述配置管理表中的动态注册表。
7.如权利要求6所述的方法,其中,所述监听虚拟机中的各指定安卓应用的分身应用向安卓系统注册广播接收器的事件包括:
将钩子函数挂载在虚拟机中注册广播接收器的接口上,当拦截到所述注册广播接收器的接口发送的注册请求时,确定监听到虚拟机中的指定安卓应用的分身应用向安卓系统注册广播接收器的事件;
所述当监听到该事件时,禁止该事件继续执行;获取该事件对应的广播接收器的相关信息并保存至所述配置管理表中的动态注册表包括:当监听到所述注册请求时,强制结束所述注册请求的继续传播;从所述注册请求中提取对应的广播接收器的相关信息并保存至所述动态注册表。
8.如权利要求6所述的方法,其中,所述静态注册表和所述动态注册表中的每个广播接收器的相关信息包括:该广播接收器的属性数据;
所述判断所述广播消息的目标广播接收器是否命中所述配置管理表中记录的广播接收器包括:
从所述广播消息对应的Intent参数中提取指示目标广播接收器的属性数据,判断所提取的属性数据是否匹配于所述静态注册表和所述动态注册表中的广播接收器的属性数据;
如果所提取的属性数据匹配于所述静态注册表中的广播接收器的属性数据,确定所述广播消息的目标广播接收器命中所述静态注册表;
如果所提取的属性数据匹配于所述动态注册表中的广播接收器的属性数据,确定所述广播消息的目标广播接收器命中所述动态注册表。
9.如权利要求8所述的方法,其中,该方法进一步包括:在安卓系统中预先声明用于运行广播接收器的预留进程;
当所述广播消息的目标广播接收器命中所述静态注册表时,所述按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器包括:
启动所述用于运行广播接收器的预留进程;在所述预留进程中对所述静态注册表中命中的广播接收器进行实例化;将所述广播消息发送至该实例化后的广播接收器。
10.如权利要求9所述的方法,其中,所述在所述预留进程中对所述静态注册表中命中的广播接收器进行实例化包括:根据所述广播消息对应的Intent参数中指示目标广播接收器的属性数据在所述预留进程中对所述广播接收器进行实例化;
所述将所述广播消息发送至该实例化后的广播接收器包括:将所述广播消息对应的Intent参数发送至该实例化后的广播接收器,并回调该广播接收器中的onReceive方法。
11.如权利要求8所述的方法,其中,所述动态注册表中的每个广播接收器的相关信息还包括:该广播接收器所属的进程信息;
当所述广播消息的目标广播接收器命中所述动态注册表时,所述按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器包括:
根据所述动态注册表中命中的广播接收器所属的进程信息,将所述广播消息发送至所述动态注册表中命中的广播接收器所属的进程中,使得该进程中的广播接收器接收所述广播消息。
12.如权利要求11所述的方法,其中,所述动态注册表中的每个广播接收器所属的进程信息包括:该广播接收器对应的注册广播接收器的事件所用的Binder机制信息;
所述根据所述动态注册表中命中的广播接收器所属的进程信息,将所述广播消息发送至所述动态注册表中命中的广播接收器所属的进程中包括:根据所述动态注册表中命中的广播接收器对应的注册广播接收器的事件所用的Binder机制信息,通过调用相应的Binder机制将所述广播消息对应的Intent参数发送至相应的进程中。
13.一种安卓应用的广播代理装置,其中,包括:
环境构造单元,适于构造虚拟机环境,将安卓系统中的一个或多个指定安卓应用的分身应用放入虚拟机中,使得每个指定安卓应用的分身应用可以与相应的指定安卓应用并行运行;
常驻服务单元,适于代理虚拟机中的指定安卓应用的分身应用接收广播消息,按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器;
所述常驻服务单元,进一步适于通过虚拟机中的常驻服务代理指定安卓应用的分身应用接收广播消息,按照预设策略将所述广播消息转发至相应指定安卓应用的分身应用的广播接收器。
14.如权利要求13所述的装置,其中,
所述常驻服务单元,适于监听安卓系统中发送广播消息的事件;当监听到安卓系统中发送广播消息的事件时,判断所述广播消息的目标广播接收器是否为虚拟机中的指定安卓应用的分身应用的广播接收器;是则,拦截并接收所述广播消息。
15.如权利要求14所述的装置,其中,
所述常驻服务单元,适于将钩子函数挂载在安卓系统中发送广播消息的接口上,当拦截到所述发送广播消息的接口发送的广播消息时,确定监听到安卓系统中发送广播消息的事件;还适于当确定所述广播消息的目标广播接收器不是虚拟机中的指定安卓应用的分身应用的广播接收器时,放行所述广播消息。
16.如权利要求14所述的装置,其中,
所述常驻服务单元,进一步适于在所述代理虚拟机中的指定安卓应用的分身应用接收广播消息之前,获取各指定安卓应用的分身应用所注册的广播接收器的相关信息并保存至配置管理表中;适于判断所述广播消息的目标广播接收器是否命中所述配置管理表中记录的广播接收器;是则,确定所述广播消息的目标广播接收器是虚拟机中的指定安卓应用的分身应用的广播接收器;否则,确定所述广播消息的目标广播接收器不是虚拟机中的指定安卓应用的分身应用的广播接收器。
17.如权利要求16所述的装置,其中,
所述常驻服务单元,适于获取各指定安卓应用的安装包复件并保存至指定目录,作为各指定安卓应用的分身应用的安装包;解析各指定安卓应用的分身应用的安装包中的配置文件,获取各指定安卓应用的分身应用在相应配置文件中所注册的广播接收器的相关信息并保存至所述配置管理表中的静态注册表。
18.如权利要求17所述的装置,其中,
所述常驻服务单元,还适于监听虚拟机中的指定安卓应用的分身应用向安卓系统注册广播接收器的事件;当监听到该事件时,禁止该事件继续执行;获取该事件对应的广播接收器的相关信息并保存至所述配置管理表中的动态注册表。
19.如权利要求18所述的装置,其中,
所述常驻服务单元,适于将钩子函数挂载在虚拟机中注册广播接收器的接口上,当拦截到所述注册广播接收器的接口发送的注册请求时,确定监听到虚拟机中的指定安卓应用的分身应用向安卓系统注册广播接收器的事件;当监听到所述注册请求时,强制结束所述注册请求的继续传播;从所述注册请求中提取对应的广播接收器的相关信息并保存至所述动态注册表。
20.如权利要求18所述的装置,其中,所述静态注册表和所述动态注册表中的每个广播接收器的相关信息包括:该广播接收器的属性数据;
所述常驻服务单元,适于从所述广播信息对应的Intent参数中提取指示目标广播接收器的属性数据,判断所提取的属性数据是否匹配于所述静态注册表和所述动态注册表中的广播接收器的属性数据;如果所提取的属性数据匹配于所述静态注册表中的广播接收器的属性数据,确定所述广播消息的目标广播接收器命中所述静态注册表;如果所提取的属性数据匹配于所述动态注册表中的广播接收器的属性数据,确定所述广播消息的目标广播接收器命中所述动态注册表。
21.如权利要求20所述的装置,其中,该装置进一步包括:信息配置单元,适于在安卓系统中预先声明用于运行广播接收器的预留进程;
所述常驻服务单元,适于当所述广播消息的目标广播接收器命中所述静态注册表时,启动所述用于运行广播接收器的预留进程;在所述预留进程中对所述静态注册表中命中的广播接收器进行实例化;将所述广播消息发送至该实例化后的广播接收器。
22.如权利要求21所述的装置,其中,所述常驻服务单元,适于根据所述广播消息对应的Intent参数中指示目标广播接收器的属性数据在所述预留进程中对所述广播接收器进行实例化;将所述广播消息对应的Intent参数发送至该实例化后的广播接收器,并回调该广播接收器中的onReceice方法。
23.如权利要求20所述的装置,其中,所述动态注册表中的每个广播接收器的相关信息还包括:该广播接收器所属的进程信息;
所述常驻服务单元,适于当所述广播消息的目标广播接收器命中所述动态注册表时,根据所述动态注册表中命中的广播接收器所属的进程信息,将所述广播消息发送至所述动态注册表中命中的广播接收器所属的进程中,使得该进程中的广播接收器接收所述广播消息。
24.如权利要求23所述的装置,其中,所述动态注册表中的每个广播接收器所属的进程信息包括:该广播接收器对应的注册广播接收器的事件所用的Binder机制信息;
所述常驻服务单元,适于当根据所述动态注册表中命中的广播接收器对应的注册广播接收器的事件所用的Binder机制信息,通过调用相应的Binder机制将所述广播消息对应的Intent参数发送至相应的进程中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611246885.9A CN106648937B (zh) | 2016-12-29 | 2016-12-29 | 一种安卓应用的广播代理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611246885.9A CN106648937B (zh) | 2016-12-29 | 2016-12-29 | 一种安卓应用的广播代理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106648937A CN106648937A (zh) | 2017-05-10 |
CN106648937B true CN106648937B (zh) | 2020-02-28 |
Family
ID=58835771
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611246885.9A Active CN106648937B (zh) | 2016-12-29 | 2016-12-29 | 一种安卓应用的广播代理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106648937B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107729158B (zh) * | 2017-09-20 | 2022-01-11 | 惠州Tcl移动通信有限公司 | 一种简化应用程序注册器的方法、存储介质及电子设备 |
CN110035030B (zh) * | 2018-01-11 | 2020-10-16 | 武汉斗鱼网络科技有限公司 | 一种防止广播反注册异常方法、存储介质、设备及系统 |
CN108804147B (zh) * | 2018-05-28 | 2022-05-10 | 新华三云计算技术有限公司 | 联动关机方法、装置及客户端 |
CN112540773B (zh) * | 2020-12-14 | 2023-08-01 | 咪咕互动娱乐有限公司 | 一种云游戏安装方法、装置、电子设备及存储介质 |
CN116185669B (zh) * | 2023-04-27 | 2023-09-22 | 荣耀终端有限公司 | 一种广播分发方法及相关设备 |
CN117437728B (zh) * | 2023-12-21 | 2024-03-01 | 飞天诚信科技股份有限公司 | 一种pos设备工作的实现方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103823699A (zh) * | 2014-02-27 | 2014-05-28 | 广州视源电子科技股份有限公司 | 一种控制应用程序自启动的方法和装置 |
CN104580715A (zh) * | 2014-12-30 | 2015-04-29 | 北京奇虎科技有限公司 | 一种移动端应用客户端装置和移动终端 |
CN105843668A (zh) * | 2016-03-11 | 2016-08-10 | 北京奇虎科技有限公司 | 派生进程驻存方法、派生程序生成方法及相应的装置 |
CN105893839A (zh) * | 2016-06-20 | 2016-08-24 | 北京奇虎科技有限公司 | 一种安卓应用的广播的代理处理方法和装置 |
CN106095603A (zh) * | 2016-06-23 | 2016-11-09 | 厦门芯鸽信息科技有限公司 | 一种Android系统相同的应用程序可同时开启多个的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140137247A1 (en) * | 2012-11-09 | 2014-05-15 | International Business Machines Corporation | Limiting Information Leakage and Piracy due to Virtual Machine Cloning |
-
2016
- 2016-12-29 CN CN201611246885.9A patent/CN106648937B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103823699A (zh) * | 2014-02-27 | 2014-05-28 | 广州视源电子科技股份有限公司 | 一种控制应用程序自启动的方法和装置 |
CN104580715A (zh) * | 2014-12-30 | 2015-04-29 | 北京奇虎科技有限公司 | 一种移动端应用客户端装置和移动终端 |
CN105843668A (zh) * | 2016-03-11 | 2016-08-10 | 北京奇虎科技有限公司 | 派生进程驻存方法、派生程序生成方法及相应的装置 |
CN105893839A (zh) * | 2016-06-20 | 2016-08-24 | 北京奇虎科技有限公司 | 一种安卓应用的广播的代理处理方法和装置 |
CN106095603A (zh) * | 2016-06-23 | 2016-11-09 | 厦门芯鸽信息科技有限公司 | 一种Android系统相同的应用程序可同时开启多个的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106648937A (zh) | 2017-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106648937B (zh) | 一种安卓应用的广播代理方法和装置 | |
US9335983B2 (en) | Method and system for displaying a non-installed android application and for requesting an action from a non-installed android application | |
CN107832100B (zh) | 一种apk插件的加载方法及其终端 | |
US8966632B1 (en) | In-the-cloud sandbox for inspecting mobile applications for malicious content | |
JP2020512718A5 (zh) | ||
US10542422B2 (en) | Data backup method, storage medium and electronic device | |
WO2018045873A1 (zh) | 即时通信应用的消息处理方法及相关产品 | |
US8752063B2 (en) | Programming interface for data communications | |
CN108241496B (zh) | 应用程序的平滑升级方法及装置 | |
CN103699835B (zh) | 一种面向Android系统资源的访问控制方法 | |
CN106528210A (zh) | 一种应用程序的运行方法及装置 | |
US20180262522A1 (en) | Malicious url detection method and apparatus, terminal, and computer storage medium | |
CN108563472B (zh) | 基于多开应用的服务插件加载方法及装置 | |
CN110888683B (zh) | 操作系统的性能优化方法、装置及可读介质 | |
CN109889468B (zh) | 网络数据的传输方法、系统、装置、设备及存储介质 | |
CN103309668B (zh) | 应用程序未截获异常的处理方法及装置 | |
CN107479985B (zh) | 一种远程过程调用的方法、装置及计算机设备 | |
WO2016070690A1 (zh) | 实现终端设备上的网页和应用间通信的方法、装置和系统 | |
CN106713395A (zh) | 数据下载方法和装置 | |
CN109032767A (zh) | 异步多进程的业务处理系统、方法、装置及存储介质 | |
CN106598642B (zh) | 在插件中使用服务的方法及装置 | |
CN107463395B (zh) | 组件调用方法及装置 | |
CN109901849B (zh) | 应用程序安装方法、装置、电子设备及存储介质 | |
CN105809027B (zh) | 应用程序的权限控制方法及装置 | |
WO2023051466A1 (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 |