应用程序运行控制的方法及装置的制造方法

文档序号:10697552阅读:872来源:国知局
应用程序运行控制的方法及装置的制造方法
【专利摘要】本发明提供了应用程序运行控制的方法及装置,该方法包括:响应于启动目标应用程序的操作指令,运行目标应用程序,其中,目标应用程序的运行包名不同于原生应用程序的运行包名;当目标应用程序通过调用其所需系统资源执行相应的运行操作时,将目标应用程序的运行包名修改为原生应用程序的运行包名;将所需系统资源分配至修改运行包名后的目标应用程序,以执行目标应用程序的相应运行操作。通过本发明,从根本上实现各类目标应用程序在终端设备中正常运行的目的;同时,在保证目标应用程序与原生应用程序分别独立运行互不干扰的同时,实现了目标应用程序具有原生应用程序的所有功能的目的。
【专利说明】
应用程序运行控制的方法及装置
技术领域
[0001]本发明涉及计算机技术领域,具体而言,本发明涉及一种应用程序运行控制的方法,及一种应用程序运行控制的装置。
【背景技术】
[0002]随着时代的发展,各种终端设备已成为人们生活中必不可少的工具,各种功能强大的终端操作系统及终端应用程序不断涌现,为用户带来了更加便捷的体验。现有技术中,应用程序在终端设备的系统环境中仅可以唯一的形式安装并运行,如对于一种即时通信类应用程序,在一台终端设备中仅可以安装并运行一个该即时通信类应用程序,用户仅可以通过唯一的账号登录并对其执行相关操作。但是,随着即时通信类应用程序的普及,越来越多的用户希望在一台终端设备中通过多个账号登录一种即时通信类应用程序以实现对不同好友信息的区分管理及交流。现有技术中,具有通过多个域账号在不同操作系统之间的切换来实现在一台终端设备中通过多个账号登录一种即时通信类应用程序的解决方案。但是,该方案是基于多操作系统才可以实现,并不具有普适性。
[0003]同时,现有技术中还可以利用沙箱技术,使得目标应用程序可实现原生应用程序的全部功能及相应服务,但是,在沙箱中运行的目标应用程序依赖于原生应用程序的运行,无法独立于原生应用程序独自运行于终端设备中,另一种方式是通过修改应用程序配置文件的包名实现双开技术,但是,该方式无法实现所有种类应用程序的双开,比如一些通过开发者注册账号的应用程序。
[0004]因此,需要一种控制目标应用程序运行的解决方案,使得各类目标应用程序可实现原生应用程序的全部功能及相应服务,且目标应用程序完全独立于原生应用程序运行于终端设备中,以解决现有技术中在一台终端设备中仅可以安装并运行一个应用程序,用户仅可以通过唯一的账号登录并对其执行相关操作带来的局限性问题。

【发明内容】

[0005]为克服上述技术问题或者至少部分地解决上述技术问题,特提出以下技术方案:
[0006]本发明的实施例提出了一种应用程序运行控制的方法,包括:
[0007]响应于启动目标应用程序的操作指令,运行目标应用程序,其中,目标应用程序的运行包名不同于原生应用程序的运行包名;
[0008]当目标应用程序通过调用其所需系统资源执行相应的运行操作时,将目标应用程序的运行包名修改为原生应用程序的运行包名;
[0009]将所需系统资源分配至修改运行包名后的目标应用程序,以执行目标应用程序的相应运行操作。
[0010]优选地,当目标应用程序通过调用其所需系统资源执行相应的运行操作时,将目标应用程序的运行包名修改为原生应用程序的运行包名,包括:
[0011]通过钩子函数对目标应用程序的进程进行监控以挂钩目标应用程序调用系统资源的资源名称;
[0012]在调用系统资源的预设接口中,将目标应用程序的运行包名修改为原生应用程序的运行包名。
[0013]优选地,将目标应用程序的运行包名修改为原生应用程序的运行包名,包括:
[0014]在调用系统资源的预设接口中判断预设接口的各参数是否带有目标应用程序的运行包名;
[0015]若带有,在调用系统资源的预设接口中将参数中带有的目标应用程序的运行包名修改为原生应用程序的运行包名。
[0016]可选地,还包括:
[0017]创建目标应用程序写入数据的存储地址;
[0018]当目标应用程序执行数据写入操作时,将数据相应地写入目标应用程序写入数据的存储地址。
[0019]优选地,调用系统资源的预设接口,包括调用以下任一项与目标应用程序之间的交互接口:
[0020]Activity 组件;
[0021]Service 组件;
[0022]Broadcast Receiver组件;
[0023]Content Provider组件;
[0024]NotifyServer 中间件。
[0025]优选地,对应同一原生应用程序的运行包名的不同目标应用程序可具有不同的运行包名。
[0026]本发明的另一实施例提出了一种应用程序运行控制的装置,包括:
[0027]运行模块,用于响应于启动目标应用程序的操作指令,运行目标应用程序,其中,目标应用程序的运行包名不同于原生应用程序的运行包名;
[0028]修改模块,用于当目标应用程序通过调用其所需系统资源执行相应的运行操作时,将目标应用程序的运行包名修改为原生应用程序的运行包名;
[0029]执行模块,用于将所需系统资源分配至修改运行包名后的目标应用程序,以执行目标应用程序的相应运行操作。
[0030 ]优选地,修改模块,包括:
[0031 ] 挂钩单元,用于通过钩子函数对目标应用程序的进程进行监控以挂钩目标应用程序调用系统资源的资源名称;
[0032]修改单元,用于在调用系统资源的预设接口中,将目标应用程序的运行包名修改为原生应用程序的运行包名。
[0033]优选地,修改单元,包括:
[0034]判断子单元,用于在调用系统资源的预设接口中判断预设接口的各参数是否带有目标应用程序的运行包名;
[0035]修改子单元,用于若带有,在调用系统资源的预设接口中将参数中带有的目标应用程序的运行包名修改为原生应用程序的运行包名。
[0036]可选地,还包括:
[0037]创建模块,用于创建目标应用程序写入数据的存储地址;
[0038]写入模块,用于当目标应用程序执行数据写入操作时,将数据相应地写入目标应用程序写入数据的存储地址。
[0039]优选地,调用系统资源的预设接口,包括调用以下任一项与目标应用程序之间的交互接口:
[0040]Activity 组件;
[0041]Service 组件;
[0042]Broadcast Receiver组件;
[0043]Content Provider组件;
[0044]NotifyServer 中间件。
[0045]优选地,对应同一原生应用程序的运行包名的不同目标应用程序可具有不同的运行包名。
[0046]本发明的实施例中,提出了一种应用程序运行控制的方案,响应于启动目标应用程序的操作指令,运行目标应用程序,其中,目标应用程序的运行包名不同于原生应用程序的运行包名,为目标应用程序独立于原生应用程序在终端设备中正常的运行提供了必要的前提保障;当目标应用程序通过调用其所需系统资源执行相应的运行操作时,将目标应用程序的运行包名修改为原生应用程序的运行包名,通过在系统调用资源的过程中修改目标应用程序的运行包名,保障了各类目标应用程序均可实现在终端设备中的正常运行,避免了因开发者注册信息等原因导致目标应用程序无法实现在终端设备中运行的情况,从根本上实现各类目标应用程序在终端设备中正常运行的目的;将所需系统资源分配至修改运行包名后的目标应用程序,以执行目标应用程序的相应运行操作,最终实现目标应用程序在终端设备中正常运行,在保证目标应用程序与原生应用程序分别独立运行互不干扰的同时,实现了目标应用程序具有原生应用程序的所有功能的目的;进一步地,突破了原生应用程序在同一终端设备中仅可使用唯一的账户进行登录使用的局限,提高了用户体验。
[0047]本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
【附图说明】
[0048]本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
[0049]图1为本发明中一个实施例的应用程序运行控制的方法的流程图;
[0050]图2为本发明中一个优选实施例的应用程序运行控制的方法的流程图;
[0051 ]图3a、图3b和图3c为本发明中一个具体应用场景下的应用程序运行控制的方法的示意图;
[0052]图4为本发明中另一实施例的应用程序运行控制的装置的结构示意图;
[0053]图5为本发明中另一优选实施例的应用程序运行控制的装置的结构示意图。
【具体实施方式】
[0054]下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
[0055]本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“親接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
[0056]本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
[0057]本发明下述实施例描述的应用程序运行控制方法所实施的应用场景,是安装在移动终端上的基于Android操作系统的运行环境,且该运行环境允许应用程序修改Android操作系统的系统源码。
[0058]图1为本发明中一个实施例的应用程序运行控制的方法的流程图。
[0059]本发明的实施例中,各步骤所执行的内容概述如下:步骤S110:响应于启动目标应用程序的操作指令,运行目标应用程序,其中,目标应用程序的运行包名不同于原生应用程序的运行包名;步骤S120:当目标应用程序通过调用其所需系统资源执行相应的运行操作时,将目标应用程序的运行包名修改为原生应用程序的运行包名;步骤S130:将所需系统资源分配至修改运行包名后的目标应用程序,以执行目标应用程序的相应运行操作。
[0060]本发明的实施例中,提出了一种应用程序运行控制的方法,响应于启动目标应用程序的操作指令,运行目标应用程序,其中,目标应用程序的运行包名不同于原生应用程序的运行包名,为目标应用程序独立于原生应用程序在终端设备中正常的运行提供了必要的前提保障;当目标应用程序通过调用其所需系统资源执行相应的运行操作时,将目标应用程序的运行包名修改为原生应用程序的运行包名,通过在系统调用资源的过程中修改目标应用程序的运行包名,保障了各类目标应用程序均可实现在终端设备中的正常运行,避免了因开发者注册信息等原因导致目标应用程序无法实现在终端设备中运行的情况,从根本上实现各类目标应用程序在终端设备中正常运行的目的;将所需系统资源分配至修改运行包名后的目标应用程序,以执行目标应用程序的相应运行操作,最终实现目标应用程序在终端设备中正常运行,在保证目标应用程序与原生应用程序分别独立运行互不干扰的同时,实现了目标应用程序具有原生应用程序的所有功能的目的;进一步地,突破了原生应用程序在同一终端设备中仅可使用唯一的账户进行登录使用的局限,提高了用户体验。以下针对各个步骤的具体实现做进一步的说明:
[0061]步骤S110:响应于启动目标应用程序的操作指令,运行目标应用程序,其中,目标应用程序的运行包名不同于原生应用程序的运行包名。
[0062]其中,对应同一原生应用程序的运行包名的不同目标应用程序可具有不同的运行包名。例如,在终端设备中,可运行多个具有不同运行包名的目标应用程序,该多个具有不同运行包名的目标应用程序对应同一原生应用程序的运行包名。
[0063]具体地,在终端设备中,响应于启动目标应用程序的操作指令,运行目标应用程序,其中,目标应用程序的运行包名不同于原生应用程序的运行包名,目标应用程序与原生应用程序可在终端设备中同时运行,且原生目标应用程序与其对应的原生应用程序读取相同的系统可读和系统只读文件。
[0064]Android操作系统有其不同于其他操作系统的原理,Android为开发者提供四大组件,具体指Activity、Service、Broadcast Receiver以及Content Provider等组件。Android应用程序以APK安装包的形式提供给用户进行安装,APK安装包中,具有用于封装实现各个组件的程序代码的classes, dex代码文件以及用于表达应用程序所用的各个组件的注册信息以及权限申请信息等内容的Androidmanifest.xml配置文件。
[0065]Android对进程的管理,以包名为单位,每个应用程序分配一个唯一的包名,由于应用程序的安装过程就是PackageManagerServi ce (PMS)解析Androidmanifest.xml文件的过程,而本发明中目标应用程序的包名不同于原生应用程序的包名,因此,当本地已安装原生应用程序的情况下,目标应用程序也可同时安装在本地,实现通过ActivityManagerService(AMS)正常运行目标应用程序。在Android操作系统中,PMS主要负责对系统的所有apk进行管理,管理其中的如Acti viey、Service等组件,从apk中解析其中的组件,保存到相关结构中后,可以通过相关的接口查询系统安装组件,apk的安装,卸载,删除都是由PMS负责的。在Android操作系统中,AMS不仅用于管理所有应用程序进程的Activity的生命周期,它同时也管理着系统的Service、Broadcast Receiver以及ContentProvider等组件,在应用程序中启动一个六(:1:;^;^7的方式包括通过调用8〖31^4(31:;^;^7方法启动指定的Activity和单击一个应用程序的图标来启动新的Activity等。
[0066]例如,在终端设备中,响应于用户启动目标应用程序Appl’的操作指令,如检测到用户双击AppI’的图标的操作,运行AppI’,AppI’的图标可以与原生目标应用程序AppI的图标不同,其中,目标应用程序Appl’的运行包名,如“com.AA.mm.1”,不同于原生应用程序AppI的运行包名,如“com.AA.mm”,App I,与App I可在终端设备中同时运行,且App I,与AppI共享终端设备的系统可读文件以及系统的只读文件,其中终端设备的系统可读文件以及系统的只读文件包括Activity、Service、Broadcast Receiver、Content Provider以及PMS等的可读、只读文件。
[0067]步骤S120:当目标应用程序通过调用其所需系统资源执行相应的运行操作时,将目标应用程序的运行包名修改为原生应用程序的运行包名。
[0068]具体地,当目标应用程序Appl,通过调用其所需系统资源执行相应的运行操作时,目标应用程序的运行包名为“com.AA.mm.1”对应的原生应用程序App I的运行包名为“com.AA.mm”,将AppI ’ 的运行包名 “com.AA.mm.1”修改为AppI的运行包名 “com.AA.mm”。
[0069]优选地,步骤S120具体包括步骤SI21 (图中未示出)和步骤S122(图中未示出);步骤S121:通过钩子函数对目标应用程序的进程进行监控以挂钩目标应用程序调用系统资源的资源名称;步骤S122:在调用系统资源的预设接口中,将目标应用程序的运行包名修改为原生应用程序的运行包名。
[0070]其中,调用系统资源的预设接口,包括但不限于调用以下任一项与目标应用程序之间的交互接口:
[0071]Activity 组件;
[0072]Service 组件;
[0073]Broadcast Receiver组件;
[0074]Content Provider组件;
[0075]NotifyServer 中间件。
[0076]这里需要说明的是:术语“钩子”涵盖了用于通过拦截在软件组件之间传递的函数调用、消息、或事件来改变或增加操作系统、应用程序、或其他软件组件的行为的技术。而处理这种被拦截的函数调用、事件或消息的代码就被称为钩子hook函数。钩子通常用于各种目标,包括对功能进行调试和对功能进行扩展。其示例可以包括在键盘或鼠标事件传递到应用程序之前拦截它们,或者拦截系统调用(system call)、或者系统函数行为、函数执行结果等,以监视或修改应用程序或其他组件的功能等等。本实施例即可采用钩子hook函数接管目标应用程序运行时调用所需的系统资源执行相应的运行操作,需要说明的是,本发明中接管目标应用程序运行时调用所需的系统资源执行相应的运行操作不局限于通过钩子hook函数的方式实现。
[0077]例如,在终端设备中,响应于用户启动目标应用程序Appl’的操作指令,如检测到用户双击Appl,的图标的操作,运行Appl ’,其中,Appl,的运行包名“com.AA.mm.1”不同于原生应用程序App I的运行包名“com.AA.mm”,在App I的运行过程中,通过钩子函数对已创建的Appl ’的进程进行监控,当Appl ’请求调用资源时,钩子函数可挂钩Appl ’调用资源的资源名称,得到Appl,调用资源的资源名称为Activity组件中的start Activity方法;随后通过预设的调用Activity组件资源的接口与Activity组件进行数据交互,在数据交互的过程中,将AppI ’ 的运行包名 “com.AA.mm.1”修改为 “com.AA.mm”。
[0078]在一优选实施例中,步骤S122具体包括步骤S1221(图中未示出)和步骤S1222(图中未示出);步骤S1221:在调用系统资源的预设接口中判断预设接口的各参数是否带有目标应用程序的运行包名;步骤S1222:若带有,在调用系统资源的预设接口中将参数中带有的目标应用程序的运行包名修改为原生应用程序的运行包名。
[0079]例如,在终端设备中,响应于用户启动目标应用程序Appl’的操作指令,如检测到用户双击Appl,的图标的操作,运行Appl ’,其中,Appl,的运行包名“com.AA.mm.1”不同于原生应用程序App I的运行包名“com.AA.mm”,在App I的运行过程中,通过钩子函数对已创建的Appl ’的进程进行监控,当Appl ’请求调用资源时,钩子函数可挂钩Appl ’调用资源的资源名称,得到Appl ’调用资源的资源名称为Activity组件中的start Activity方法;在预设调用Activity组件资源的接口中,当通过创建一个显示的Intent对象中的CompomentName方法显不调用Acti vity 中的 startActi vity 方法时,CompomentName 方法中包括了 packageName参数,packageName参数为调用的包名,本实施例中,具体值为“com.AA.mm.1”,Intent对象作为Activity之间传递数据的组件,通过Intent对象将数据封装起来,传递到Appl’需要传递的Activity中,通过AMS中的startActivity方法传递Intent对象,根据Intent对象的信息找到匹配的Component信息,AMS会调用系统内部的PackageManager对象去查询具体的CompomentName方法,在AMS中包括了预设对应的修改包名的处理方法,将compomentName方法中的packName参数值“com.AA.mm.I”修改为“com.AA.mm”,实现最终调用系统的Act i vi ty组件。在调用其他系统资源组件时,还涉及到修改相应的结构体,在相应的结构体中将对应包名值“com.AA.mm.1”修改为“com.AA.mm”。
[0080]步骤S130:将所需系统资源分配至修改运行包名后的目标应用程序,以执行目标应用程序的相应运行操作。
[0081 ]具体地,将所需系统资源分配至修改运行包名后的目标应用程序,以执行目标应用程序调用所需系统资源的操作。
[0082]例如,接上例,将Appl’所需的系统Activity资源根据Appl,的包名分配至Appl,,此时Appl ’的包名为“com.AA.mm”,随后执行Appl ’的相应运行操作。
[0083]在一优选实施例中,如图2所示,该方法包括步骤S210、步骤S220、步骤S230、步骤S240和步骤S250;步骤S210:响应于启动目标应用程序的操作指令,运行目标应用程序,其中,目标应用程序的运行包名不同于原生应用程序的运行包名;步骤S220:当目标应用程序通过调用其所需系统资源执行相应的运行操作时,将目标应用程序的运行包名修改为原生应用程序的运行包名;步骤S230:将所需系统资源分配至修改运行包名后的目标应用程序,以执行目标应用程序的相应运行操作;步骤S240:创建目标应用程序写入数据的存储地址;步骤S250:当目标应用程序执行数据写入操作时,将数据相应地写入目标应用程序写入数据的存储地址。
[0084]其中,本优选实施例中终端设备在步骤S210、步骤S220和步骤S230中执行的操作与参照图1所示的终端设备在步骤S110、步骤S120和步骤S130中执行的操作相同或相似,在此不再赘述。
[0085]例如,在终端设备中,创建目标应用程序Appl,写入数据的存储地址,如创建Appl,写入数据的存储地址的路径为“:/sdcard/AA/MicroMsg/”,当Appl’执行数据写入操作时,将数据相应地写入Appl ’中的写入数据的存储地址目录为“:/sdcard/AA/MicroMsg/”中的MicroMsg文件夹里。
[0086]在一具体应用场景中,用户可在终端设备中同时运行两个“微信”的应用程序,如图3a,两个“微信”的图标相同,其中一个“微信”A是通过运行腾讯官方下载的微信安装包创建的,另一个“微信”B通过本发明的实施方式创建的,两个“微信”进程分别用于登录不同的微信账号,如图3b,一个“微信”的登录账户为“al in”,假设该微信为“微信” A,另一个“微信”的登录账户为“郑劲松”,假设该微信为“微信”B,两个微信互不影响,可同时与外界进行通信,也可互相通信,如图3c,B可实现A中的所有功能,且当用户卸载A后,并不影响B的正常运行,其中“微信” A的运行包名如“com.ten cent.mm”,“微信” B的运行包名如“com.tencent.mm.1”,当检测到用户双击“微信”B的图标的操作时,在终端设备中以“com.tencent.mm.1”运行包名运行“微信” B,在“微信” B的运行过程中,通过钩子函数对已创建的“微信”B的进程进行监控,当“微信”B请求调用资源时,钩子函数可挂钩“微信”B调用资源的资源名称,随后通过预设的调用该系统资源的接口与该系统资源进行数据交互,在数据交互的过程中,将“微信”B的运行包名“com.tencent.mm.1”修改为“com.tencent.mm”,使得“微信”正常运行,同时,当“微信”B中发生数据写入操作时,将数据写入已创建的“微信” B的写入数据的存储地址,如将数据写入“:/sdcard/Tencent/MicroMsg/”目录中的MicroMsg文件夹里。
[0087]图4为本发明中另一实施例的应用程序运行控制的装置的结构示意图。
[0088]本发明的实施例中,各模块所执行的内容概述如下:运行模块410响应于启动目标应用程序的操作指令,运行目标应用程序,其中,目标应用程序的运行包名不同于原生应用程序的运行包名;修改模块420当目标应用程序通过调用其所需系统资源执行相应的运行操作时,将目标应用程序的运行包名修改为原生应用程序的运行包名;执行模块430将所需系统资源分配至修改运行包名后的目标应用程序,以执行目标应用程序的相应运行操作。
[0089]本发明的实施例中,提出了一种应用程序运行控制的装置,响应于启动目标应用程序的操作指令,运行目标应用程序,其中,目标应用程序的运行包名不同于原生应用程序的运行包名,为目标应用程序独立于原生应用程序在终端设备中正常的运行提供了必要的前提保障;当目标应用程序通过调用其所需系统资源执行相应的运行操作时,将目标应用程序的运行包名修改为原生应用程序的运行包名,通过在系统调用资源的过程中修改目标应用程序的运行包名,保障了各类目标应用程序均可实现在终端设备中的正常运行,避免了因开发者注册信息等原因导致目标应用程序无法实现在终端设备中运行的情况,从根本上实现各类目标应用程序在终端设备中正常运行的目的;将所需系统资源分配至修改运行包名后的目标应用程序,以执行目标应用程序的相应运行操作,最终实现目标应用程序在终端设备中正常运行,在保证目标应用程序与原生应用程序分别独立运行互不干扰的同时,实现了目标应用程序具有原生应用程序的所有功能的目的;进一步地,突破了原生应用程序在同一终端设备中仅可使用唯一的账户进行登录使用的局限,提高了用户体验。以下针对各个模块的具体实现做进一步的说明:
[0090]运行模块410响应于启动目标应用程序的操作指令,运行目标应用程序,其中,目标应用程序的运行包名不同于原生应用程序的运行包名。
[0091]其中,对应同一原生应用程序的运行包名的不同目标应用程序可具有不同的运行包名。例如,在终端设备中,可运行多个具有不同运行包名的目标应用程序,该多个具有不同运行包名的目标应用程序对应同一原生应用程序的运行包名。
[0092]具体地,在终端设备中,响应于启动目标应用程序的操作指令,运行目标应用程序,其中,目标应用程序的运行包名不同于原生应用程序的运行包名,目标应用程序与原生应用程序可在终端设备中同时运行,且原生目标应用程序与其对应的原生应用程序读取相同的系统可读和系统只读文件。
[0093]Android操作系统有其不同于其他操作系统的原理,Android为开发者提供四大组件,具体指Activity、Service、Broadcast Receiver以及Content Provider等组件。Android应用程序以APK安装包的形式提供给用户进行安装,APK安装包中,具有用于封装实现各个组件的程序代码的classes, dex代码文件以及用于表达应用程序所用的各个组件的注册信息以及权限申请信息等内容的Androidmanifest.xml配置文件。
[0094]Android对进程的管理,以包名为单位,每个应用程序分配一个唯一的包名,由于应用程序的安装过程就是PMS解析Androidmanifest.xml文件的过程,而本发明中目标应用程序的包名不同于原生应用程序的包名,因此,当本地已安装原生应用程序的情况下,目标应用程序也可同时安装在本地,实现通过AMS正常运行目标应用程序。在Android操作系统中,PMS主要负责对系统的所有apk进行管理,管理其中的如Activiey、Service等组件,从apk中解析其中的组件,保存到相关结构中后,可以通过相关的接口查询系统安装组件,apk的安装,卸载,删除都是由PMS负责的。在Android操作系统中,AMS不仅用于管理所有应用程序进程的Acti vity的生命周期,它同时也管理着系统的Service'Broadcast Receiver以及Content Provider等组件,在应用程序中启动一个Acti vity的方式包括通过调用StartActivity方法启动指定的Activity和单击一个应用程序的图标来启动新的Activity等。
[0095]例如,在终端设备中,响应于用户启动目标应用程序Appl’的操作指令,如检测到用户双击AppI’的图标的操作,运行AppI’,AppI’的图标可以与原生目标应用程序AppI的图标不同,其中,目标应用程序Appl’的运行包名,如“com.AA.mm.1”,不同于原生应用程序AppI的运行包名,如“com.AA.mm”,App I,与App I可在终端设备中同时运行,且App I,与AppI共享终端设备的系统可读文件以及系统的只读文件,其中终端设备的系统可读文件以及系统的只读文件包括Activity、Service、Broadcast Receiver、Content Provider以及PMS等的可读、只读文件。
[0096]修改模块420当目标应用程序通过调用其所需系统资源执行相应的运行操作时,将目标应用程序的运行包名修改为原生应用程序的运行包名。
[0097]具体地,当目标应用程序Appl,通过调用其所需系统资源执行相应的运行操作时,目标应用程序的运行包名为“com.AA.mm.1”对应的原生应用程序App I的运行包名为“com.AA.mm”,将AppI ’ 的运行包名 “com.AA.mm.1”修改为AppI的运行包名 “com.AA.mm”。
[0098]优选地,修改模块420具体包括挂钩单元(图中未示出)和修改单元(图中未示出);挂钩单元通过钩子函数对目标应用程序的进程进行监控以挂钩目标应用程序调用系统资源的资源名称;修改单元在调用系统资源的预设接口中,将目标应用程序的运行包名修改为原生应用程序的运行包名。
[0099]其中,调用系统资源的预设接口,包括但不限于调用以下任一项与目标应用程序之间的交互接口:
[0100]Activity 组件;
[0101]Service 组件;
[0102]Broadcast Receiver组件;
[0103]Content Provider组件;
[0104]NotifyServer 中间件。
[0105]这里需要说明的是:术语“钩子”涵盖了用于通过拦截在软件组件之间传递的函数调用、消息、或事件来改变或增加操作系统、应用程序、或其他软件组件的行为的技术。而处理这种被拦截的函数调用、事件或消息的代码就被称为钩子hook函数。钩子通常用于各种目标,包括对功能进行调试和对功能进行扩展。其示例可以包括在键盘或鼠标事件传递到应用程序之前拦截它们,或者拦截系统调用(system call)、或者系统函数行为、函数执行结果等,以监视或修改应用程序或其他组件的功能等等。本实施例即可采用钩子hook函数接管目标应用程序运行时调用所需的系统资源执行相应的运行操作,需要说明的是,本发明中接管目标应用程序运行时调用所需的系统资源执行相应的运行操作不局限于通过钩子hook函数的方式实现。
[0106]例如,在终端设备中,响应于用户启动目标应用程序Appl’的操作指令,如检测到用户双击Appl,的图标的操作,运行Appl ’,其中,Appl,的运行包名“com.AA.mm.1”不同于原生应用程序App I的运行包名“com.AA.mm”,在App I的运行过程中,通过钩子函数对已创建的Appl ’的进程进行监控,当Appl ’请求调用资源时,钩子函数可挂钩Appl ’调用资源的资源名称,得到Appl,调用资源的资源名称为Activity组件中的start Activity方法;随后通过预设的调用Activity组件资源的接口与Activity组件进行数据交互,在数据交互的过程中,将AppI ’ 的运行包名 “com.AA.mm.1”修改为 “com.AA.mm”。
[0107]在一优选实施例中,修改单元具体包括判断子单元(图中未示出)和修改子单元(图中未示出);判断子单元在调用系统资源的预设接口中判断预设接口的各参数是否带有目标应用程序的运行包名;修改子单元若带有,在调用系统资源的预设接口中将参数中带有的目标应用程序的运行包名修改为原生应用程序的运行包名。
[0108]例如,在终端设备中,响应于用户启动目标应用程序Appl’的操作指令,如检测到用户双击Appl,的图标的操作,运行Appl ’,其中,Appl,的运行包名“com.AA.mm.1”不同于原生应用程序App I的运行包名“com.AA.mm”,在App I的运行过程中,通过钩子函数对已创建的Appl ’的进程进行监控,当Appl ’请求调用资源时,钩子函数可挂钩Appl ’调用资源的资源名称,得到Appl ’调用资源的资源名称为Activity组件中的start Activity方法;在预设调用Activity组件资源的接口中,当通过创建一个显示的Intent对象中的CompomentName方法显不调用Acti vity 中的 startActi vity 方法时,CompomentName 方法中包括了 packageName参数,packageName参数为调用的包名,本实施例中,具体值为“com.AA.mm.1”,Intent对象作为Activity之间传递数据的组件,通过Intent对象将数据封装起来,传递到Appl’需要传递的Activity中,通过AMS中的startActivity方法传递Intent对象,根据Intent对象的信息找到匹配的Component信息,AMS会调用系统内部的PackageManager对象去查询具体的CompomentName方法,在AMS中包括了预设对应的修改包名的处理方法,将compomentName方法中的packName参数值“com.AA.mm.I”修改为“com.AA.mm”,实现最终调用系统的Act i vi ty组件。在调用其他系统资源组件时,还涉及到修改相应的结构体,在相应的结构体中将对应包名值“com.AA.mm.1”修改为“com.AA.mm”。
[0109]执行模块430将所需系统资源分配至修改运行包名后的目标应用程序,以执行目标应用程序的相应运行操作。
[0110]具体地,将所需系统资源分配至修改运行包名后的目标应用程序,以执行目标应用程序调用所需系统资源的操作。
[0?11 ]例如,接上例,将Appl ’所需的系统Activity资源根据Appl ’的包名分配至Appl ’,此时Appl,的包名为“com.AA.mm”,随后执行Appl,的相应运行操作。
[0112]在一优选实施例中,如图5所不,该装置包括运行模块510、修改模块520、执行模块530、创建模块540和写入模块550;运行模块510响应于启动目标应用程序的操作指令,运行目标应用程序,其中,目标应用程序的运行包名不同于原生应用程序的运行包名;修改模块520当目标应用程序通过调用其所需系统资源执行相应的运行操作时,将目标应用程序的运行包名修改为原生应用程序的运行包名;执行模块530将所需系统资源分配至修改运行包名后的目标应用程序,以执行目标应用程序的相应运行操作;创建模块540创建目标应用程序写入数据的存储地址;写入模块550当目标应用程序执行数据写入操作时,将数据相应地写入目标应用程序写入数据的存储地址。
[0113]其中,本优选实施例中终端设备在运行模块510、修改模块520和执行模块530中执行的操作与参照图4所示的终端设备在运行模块410、修改模块420和执行模块430中执行的操作相同或相似,在此不再赘述。
[0114]例如,在终端设备中,创建目标应用程序Appl’写入数据的存储地址,如创建AppI ’写入数据的存储地址的路径为“:/sdcard/AA/MicroMsg/”,当Appl’执行数据写入操作时,将数据相应地写入Appl ’中的写入数据的存储地址目录为“:/sdcard/AA/MicroMsg/”中的MicroMsg文件夹里。
[0115]在一具体应用场景中,用户可在终端设备中同时运行两个“微信”的应用程序,如图3a,两个“微信”的图标相同,其中一个“微信”A是通过运行腾讯官方下载的微信安装包创建的,另一个“微信”B通过本发明的实施方式创建的,两个“微信”进程分别用于登录不同的微信账号,如图3b,一个“微信”的登录账户为“al in”,假设该微信为“微信” A,另一个“微信”的登录账户为“郑劲松”,假设该微信为“微信”B,两个微信互不影响,可同时与外界进行通信,也可互相通信,如图3c,B可实现A中的所有功能,且当用户卸载A后,并不影响B的正常运行,其中“微信” A的运行包名如“com.tencent.mm”,“微信” B的运行包名如“com.tencent.mm.1”,当检测到用户双击“微信”B的图标的操作时,在终端设备中以“com.tencent.mm.1”运行包名运行“微信” B,在“微信” B的运行过程中,通过钩子函数对已创建的“微信”B的进程进行监控,当“微信”B请求调用资源时,钩子函数可挂钩“微信”B调用资源的资源名称,随后通过预设的调用该系统资源的接口与该系统资源进行数据交互,在数据交互的过程中,将“微信”B的运行包名“com.tencent.mm.1”修改为“com.tencent.mm”,使得“微信”正常运行,同时,当“微信”B中发生数据写入操作时,将数据写入已创建的“微信” B的写入数据的存储地址,如将数据写入“:/sdcard/Tencent/MicroMsg/”目录中的MicroMsg文件夹里。
[0116]本技术领域技术人员可以理解,本发明包括涉及用于执行本申请中所述操作中的一项或多项的设备。这些设备可以为所需的目的而专门设计和制造,或者也可以包括通用计算机中的已知设备。这些设备具有存储在其内的计算机程序,这些计算机程序选择性地激活或重构。这样的计算机程序可以被存储在设备(例如,计算机)可读介质中或者存储在适于存储电子指令并分别耦联到总线的任何类型的介质中,所述计算机可读介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、R0M(Read-0nly Memory,只读存储器)、RAM (Random Access Memory,随即存储器)、EPR0M(Erasable ProgrammableRead-Only Memory,可擦写可编程只读存储器)、EEPR0M(E1 ectricalIy ErasableProgrammable Read-Only Memory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,可读介质包括由设备(例如,计算机)以能够读的形式存储或传输信息的任何介质。
[0117]本技术领域技术人员可以理解,可以用计算机程序指令来实现这些结构图和/或框图和/或流图中的每个框以及这些结构图和/或框图和/或流图中的框的组合。本技术领域技术人员可以理解,可以将这些计算机程序指令提供给通用计算机、专业计算机或其他可编程数据处理方法的处理器来实现,从而通过计算机或其他可编程数据处理方法的处理器来执行本发明公开的结构图和/或框图和/或流图的框或多个框中指定的方案。
[0118]本技术领域技术人员可以理解,本发明中已经讨论过的各种操作、方法、流程中的步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本发明中已经讨论过的各种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。进一步地,现有技术中的具有与本发明中公开的各种操作、方法、流程中的步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。
[0119]以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
【主权项】
1.一种应用程序运行控制的方法,包括: 响应于启动目标应用程序的操作指令,运行所述目标应用程序,其中,所述目标应用程序的运行包名不同于原生应用程序的运行包名; 当所述目标应用程序通过调用其所需系统资源执行相应的运行操作时,将所述目标应用程序的运行包名修改为所述原生应用程序的运行包名; 将所需系统资源分配至修改运行包名后的所述目标应用程序,以执行所述目标应用程序的相应运行操作。2.根据权利要求1所述的方法,当所述目标应用程序通过调用其所需系统资源执行相应的运行操作时,将所述目标应用程序的运行包名修改为所述原生应用程序的运行包名,包括: 通过钩子函数对所述目标应用程序的进程进行监控以挂钩所述目标应用程序调用系统资源的资源名称; 在调用系统资源的预设接口中,将所述目标应用程序的运行包名修改为所述原生应用程序的运行包名。3.根据权利要求2所述的方法,将所述目标应用程序的运行包名修改为所述原生应用程序的运行包名,包括: 在调用系统资源的预设接口中判断所述预设接口的各参数是否带有所述目标应用程序的运行包名; 若带有,在调用系统资源的预设接口中将所述参数中带有的所述目标应用程序的运行包名修改为所述原生应用程序的运行包名。4.根据权利要求1所述的方法,还包括: 创建所述目标应用程序写入数据的存储地址; 当所述目标应用程序执行数据写入操作时,将数据相应地写入所述目标应用程序写入数据的存储地址。5.根据权利要求2所述的方法,所述调用系统资源的预设接口,包括调用以下任一项与所述目标应用程序之间的交互接口: Activity 组件; Serv ice组件; Broadcast Receiver组件; Content Provider组件; NotifyServer 中间件。6.根据权利要求1所述的方法,对应同一原生应用程序的运行包名的不同目标应用程序可具有不同的运行包名。7.一种应用程序运行控制的装置,包括: 运行模块,用于响应于启动目标应用程序的操作指令,运行所述目标应用程序,其中,所述目标应用程序的运行包名不同于原生应用程序的运行包名; 修改模块,用于当所述目标应用程序通过调用其所需系统资源执行相应的运行操作时,将所述目标应用程序的运行包名修改为所述原生应用程序的运行包名; 执行模块,用于将所需系统资源分配至修改运行包名后的所述目标应用程序,以执行所述目标应用程序的相应运行操作。8.根据权利要求7所述的装置,所述修改模块,包括: 挂钩单元,用于通过钩子函数对所述目标应用程序的进程进行监控以挂钩所述目标应用程序调用系统资源的资源名称; 修改单元,用于在调用系统资源的预设接口中,将所述目标应用程序的运行包名修改为所述原生应用程序的运行包名。9.根据权利要求8所述的装置,所述修改单元,包括: 判断子单元,用于在调用系统资源的预设接口中判断所述预设接口的各参数是否带有所述目标应用程序的运行包名; 修改子单元,用于若带有,在调用系统资源的预设接口中将所述参数中带有的所述目标应用程序的运行包名修改为所述原生应用程序的运行包名。10.根据权利要求7所述的装置,还包括: 创建模块,用于创建所述目标应用程序写入数据的存储地址; 写入模块,用于当所述目标应用程序执行数据写入操作时,将数据相应地写入所述目标应用程序写入数据的存储地址。
【文档编号】G06F9/445GK106066803SQ201610353934
【公开日】2016年11月2日
【申请日】2016年5月25日 公开号201610353934.2, CN 106066803 A, CN 106066803A, CN 201610353934, CN-A-106066803, CN106066803 A, CN106066803A, CN201610353934, CN201610353934.2
【发明人】郑劲松, 宋丽, 杨东, 李涓
【申请人】北京奇虎科技有限公司, 奇智软件(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1