CN107967169A - 页面跳转监听方法及装置 - Google Patents
页面跳转监听方法及装置 Download PDFInfo
- Publication number
- CN107967169A CN107967169A CN201711172049.5A CN201711172049A CN107967169A CN 107967169 A CN107967169 A CN 107967169A CN 201711172049 A CN201711172049 A CN 201711172049A CN 107967169 A CN107967169 A CN 107967169A
- Authority
- CN
- China
- Prior art keywords
- objects
- activity
- mcallback
- change messages
- messages
- 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.)
- Pending
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/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/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
Abstract
本发明提供的页面跳转监听方法及装置,应用于Android系统。反射获取应用进程对应的ActivityThread对象及其mH对象与mCallback对象;将mCallback对象替换为预设对象;利用预设对象获取Activity变化消息;根据Activity变化消息获取Activity对象的状态变化信息。本发明利用预设对象来替换mCallback对象,进而获取Activity对象的状态变化信息,整个过程并不涉及到具体的业务代码,从而对页面跳转实现了无侵入式监听,其实现方式简单、高效,并不会受到插件化环境的影响,也就无需对插件化应用进行复杂的AOP插桩处理,从而还具有较高的安全可靠性。
Description
技术领域
本发明数据处理领域,更具体的说,涉及页面跳转监听方法及装置。
背景技术
在Android系统中,对页面跳转的监听,实际上就是对Activity生命周期变化的监听。Activity是Android组件中最基本、最为常见用的组件之一。
现有的一种技术方案,利用Application组件通过ActivityLifecycleCall-backs使用接口提供了一套回调方法,用于让开发者对Activity的生命周期事件进行集中处理。但是,目前大部分重量级应用都采用了插件化开发,而插件中的Activity,通常都不是Android系统层面的真实Activity,所以插件中的Activity并不会调用系统层面callback,对于这种情况,利用Application组件通过ActivityLifecycleCallbacks使用接口提供的回调方法,就无法监听到Android系统中的Activity的状态变化了。并且,ActivityLifecycleCall backs只能在API 14+(Android 4.0+)的环境条件下使用,受Android系统版本限制。
现有的另一种技术方案,采用的是静态代码注入方式,利用AOP(Aspect OrientedProgramming,面向切向编程)字节码插桩来侵入实现的Activity代码来完成,该方案虽然能够解决由于应用插件化而无法实现对Android系统Activity进行监听的问题,但却需要对所有的插件化应用进行AOP字节码插桩,实现复杂,联动性较强,导致安全性较差且不易维护。
所以,目前迫切需要一种简单、高效且安全可靠的页面跳转监听方案,能够在应用插件化的环境中对系统Activity的状态变化信息进行监听。
发明内容
有鉴于此,本发明提供了一种页面跳转监听方法及装置,以解决现有的页面跳转监听方案,虽然能够在应用插件化的环境中对系统Activity的状态变化进行监听,但其实现复杂、安全性较差且不易维护的技术问题。
为实现上述目的,本发明提供如下技术方案:
一种页面跳转监听方法,应用于Android系统,所述方法包括:
反射获取应用进程对应的ActivityThread对象;
反射获取与所述ActivityThread对象相对应的mH对象;
反射获取与mH对象相对应的mCallback对象;
将所述mCallback对象替换为预设对象;
利用所述预设对象,获取Activity变化消息;
根据所述Activity变化消息,获取Activity对象的状态变化信息;其中,所述Activity对象与所述Activity变化消息相对应。
优选的,所述将所述mCallback对象替换为预设对象包括:
当所述mCallback对象为空时,将所述mCallback对象替换为自定义的Hander.CallBack对象;
当所述mCallback对象不为空时,将所述mCallback对象替换为动态代理对象;所述动态代理对象是根据所述mCallback对象生成的。
优选的,所述利用所述预设对象,获取Activity变化消息包括:
当所述预设对象为所述Hander.CallBack对象时,利用所述Hander.CallBack对象获取Activity变化消息;
当所述预设对象为所述动态代理对象时,利用所述动态代理对象获取Activity变化消息。
优选的,所述根据所述Activity变化消息,获取Activity对象的状态变化信息包括:
根据所述Activity变化消息,获取与所述Activity对象相对应的ActivityClientRecord对象;
根据所述ActivityClientRecord对象记录的信息,获取所述Activity对象的状态变化信息。
优选的,所述根据所述Activity变化消息,获取与所述Activity对象相对应的ActivityClientRecord对象包括:
当所述Activity变化消息的类型为LAUNCH_ACTIVITY时,从所述Activity变化消息的附带信息中,获取与所述Activity对象相对应的ActivityClientRecord对象;
当所述Activity变化消息的类型不为LAUNCH_ACTIVITY时,从所述Activity变化消息的附带信息中获取Ibinder接口;通过所述Ibinder接口,获取与所述Activity对象相对应的ActivityClientRecord对象。
一种页面跳转监听装置,应用于Android系统,所述装置包括:
反射获取单元,用于反射获取应用进程对应的ActivityThread对象;反射获取与所述ActivityThread对象相对应的mH对象;反射获取与mH对象相对应的mCallback对象;
对象替换单元,用于将所述mCallback对象替换为预设对象;
消息获取单元,用于利用所述预设对象,获取Activity变化消息;
状态获取单元,用于根据所述Activity变化消息,获取Activity对象的状态变化信息;其中,所述Activity对象与所述Activity变化消息相对应。
优选的,所述对象替换单元包括:
第一替换单元,用于当所述mCallback对象为空时,将所述mCallback对象替换为自定义的Hander.CallBack对象;
第二替换单元,用于当所述mCallback对象不为空时,将所述mCallback对象替换为动态代理对象;所述动态代理对象是根据所述mCallback对象生成的。
优选的,所述消息获取单元包括:
第一获取单元,用于当所述预设对象为所述Hander.CallBack对象时,利用所述Hander.CallBack对象获取Activity变化消息;
第二获取单元,用于当所述预设对象为所述动态代理对象时,利用所述动态代理对象获取Activity变化消息。
优选的,所述状态获取单元包括:
第三获取单元,用于根据所述Activity变化消息,获取与所述Activity对象相对应的ActivityClientRecord对象;
第四获取单元,用于根据所述ActivityClientRecord对象记录的信息,获取所述Activity对象的状态变化信息。
优选的,所述第三获取单元包括:
第一获取子单元,用于当所述Activity变化消息的类型为LAUNCH_ACTIVITY时,从所述Activity变化消息的附带信息中,获取与所述Activity对象相对应的ActivityClientRecord对象;
第二获取子单元,用于当所述Activity变化消息的类型不为LAUNCH_ACTIVITY时,从所述Activity变化消息的附带信息中获取Ibinder接口;通过所述Ibinder接口,获取与所述Activity对象相对应的ActivityClientRecord对象。
从上述的技术方案可以看出,本发明提供的页面跳转监听方法及装置,应用于Android系统。通过反射获取应用进程对应的ActivityThread对象;反射获取与所述ActivityThread对象相对应的mH对象;反射获取与mH对象相对应的mCallback对象;并将所述mCallback对象替换为预设对象;再利用所述预设对象,获取Activity变化消息;根据所述Activity变化消息,获取Activity对象的状态变化信息;其中,所述Activity对象与所述Activity变化消息相对应。本发明将mCallback对象替换为预设对象,进而利用预设对象直接获取到相应Activity对象的状态变化信息,由于整个hook过程并不涉及到具体的业务代码,从而对页面跳转实现了无侵入式监听,其实现方式简单、高效,并不会受到插件化环境的影响,也就无需对插件化应用进行复杂的AOP插桩处理,从而具有较高的安全可靠性。
并且,本发明所提供的页面跳转监听方案,由于其无侵入式监听的优点,不仅不会受到插件化环境的影响,而且还能够适用于各种场景下的页面跳转监听工作,且不会受到Android系统版本限制。
再者,本发明所提供的页面跳转监听方案,由于其简单直接的获取方式,所以能够完整准确的获取到Activity对象的状态变化信息,具有较高的准确性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的页面跳转监听方法的一种流程图;
图2为本申请实施例提供的页面跳转监听方法的另一种流程图;
图3为本申请实施例提供的页面跳转监听方法的又一种流程图;
图4为本申请实施例提供的页面跳转监听装置的一种结构示意图。
具体实施方式
为了引用和清楚起见,下文中使用的技术名词的说明、简写或缩写总结如下:
Activity:Android系统中的一个应用组件,用户可与其提供的屏幕进行交互,可以理解成用户视觉上的页面。
无侵入式:不直接在Android的页面源代码中添加采集代码的方式。
Callback:回调接口或方法,用以操作完成后返回通知。
hook:钩子,应用程序可以通过钩子机制截获处理消息或是其他一些特定事件。
插件化应用(APP):可以脱离宿主应用独立运行,但是又可以作为宿主应用的一部分运行的应用。
ActivityThread:Android应用的主线程(UI线程),控制着Activity的创建、启动过程。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
对Android系统中页面跳转的监听,实际上就是对Android系统中的Activity生命周期变化(状态变化)的监听,获取了Activity对象的状态变化信息,便实现了对Android系统中页面跳转的监听。
请参阅图1,图1为本申请实施例提供的页面跳转监听方法的一种流程图。
如图1所示,所述方法包括:
S101:反射获取应用进程对应的ActivityThread对象。
ActivityThread对象是所述应用进程唯一对应的,它管理应用进程的主线程的执行,并根据AMS(ActivityManagerService,Activity管理服务)的要求负责调度和执行Activity、Broadcast和其它操作。具体地,通过IApplicationThread接口来调度和执行Activity、Broadcast和其它操作。其中,将AMS作为客户端Client,将ActivityThread.ApplicationThread为服务端Server。
反射是JAVA的一种机制,可以运行时获取类以及对象的一些信息。由于Android系统控制的一些对象或者类对外是不公开的,所以需要通过反射获取的方式来获得。
S102:反射获取与所述ActivityThread对象相对应的mH对象。
mH对象是ActivityThread对象的成员对象,ActivityThread接收到SystemServer进程的消息之后会通过其内部的Handler对象(即mH对象)分发消息,因此通过设置拦截此分发消息就可以知道Activity的状态变化。
S103:反射获取与mH对象相对应的mCallback对象。
由Android Handler机制可知,Handler分发消息时,会首先交给自己的mCallback对象处理,因此需要反射获取与mH对象相对应的mCallback对象。
S104:将所述mCallback对象替换为预设对象。
在获取到mCallback对象后,要想对mH的分发消息进行控制、拦截,需要利用hook机制,将所述mCallback对象替换为预设对象,进而来实现无侵入式的消息拦截功能。
预设对象是用户创建的用于替换所述mCallback,并用来拦截Activity变化消息的对象,例如,用户自定义的Handler.Callback对象。
S105:利用所述预设对象,获取Activity变化消息。
利用所述预设对象,截获Activity变化消息,Activity变化消息中包括与其相对应的状态发生变化的Activity的相关信息。
S106:根据所述Activity变化消息,获取Activity对象的状态变化信息。
其中,所述Activity对象与所述Activity变化消息相对应,从所述Activity变化消息中,能够获得相应的Activity对象的状态变化信息。
传统的收集数据的方式是埋点、插桩,其依赖代码开发,且采集时效慢,数据采集代码与业务代码不解耦,而本发明能够以不直接侵入代码的方式来监听Android的页面跳转情况(即Activity对象的状态变化)。
本实施例提供的页面跳转监听方法,应用于Android系统。本发明将mCallback对象替换为预设对象,进而利用预设对象直接获取到相应Activity对象的状态变化信息,由于整个hook过程并不涉及到具体的业务代码,从而对页面跳转实现了无侵入式监听,其实现方式简单、高效,并不会受到插件化环境的影响,也就无需对插件化应用进行复杂的AOP插桩处理,从而具有较高的安全可靠性。并且,本发明所提供的页面跳转监听方案,由于其无侵入式监听的优点,不仅不会受到插件化环境的影响,而且还能够适用于各种场景下的页面跳转监听工作,且不会受到Android系统版本限制。再者,本发明所提供的页面跳转监听方案,由于其简单直接的获取方式,所以能够完整准确的获取到Activity对象的状态变化信息,具有较高的准确性。
请参阅图2,图2为本申请实施例提供的页面跳转监听方法的另一种流程图。
如图2所示,所述方法包括:
S201:反射获取应用进程对应的ActivityThread对象。
S202:反射获取与所述ActivityThread对象相对应的mH对象。
S203:反射获取与mH对象相对应的mCallback对象。
其中,步骤S201-S203与前述实施例中的步骤S101-S103相类似,可参考前述实施例中的具体内容,在此不再赘述。
S204:判断所述mCallback对象是否为空,当所述mCallback对象为空时,执行步骤S205;当所述mCallback对象不为空时,执行步骤S206。
在通常情况下,mCallback对象为空,但是,当由于业务模块开发者为了完成某些功能,比如实现插件化,有可能会相应设置新的Handler.Callback对象,为了既能实现对Handler对象mH分发消息的控制、拦截,又不能影响新的Handler.Callback对象的原有功能的正常流程,因此需要分情况决定处理。
S205:将所述mCallback对象替换为自定义的Hander.CallBack对象,然后执行步骤S207。
当所述mCallback对象为空时,可以直接将mCallback对象替换为自定义的Hander.CallBack对象,并不会对系统流程造成影响。此时,所述自定义的Hander.CallBack对象即为前述实施例中的预设对象。
在一示例中,可以通过反射的方式来设置所述自定义的Hander.CallBack对象。
S206:将所述mCallback对象替换为动态代理对象,然后执行步骤S208。
所述动态代理对象是根据所述mCallback对象生成的。
当所述mCallback对象不为空时,表明已有开发者将其替换为新的Handler.Callback对象,若此时直接将mCallback对象替换为自定义的Hander.CallBack对象,便是将开发者设置的新的Handler.Callback对象替换为我们自定义的Hander.CallBack对象,从而破坏开发者设置的新的Handler.Callback对象。所以,本实施例在所述mCallback对象不为空时,对所述mCallback对象进行动态代理,以生成相对应的动态代理对象,并将所述mCallback对象替换为动态代理对象,动态代理对象并不会影响开发者设置的新的Handler.Callback对象的功能,这样,既能实现对Handler对象mH分发消息的控制拦截,又不会影响开发者设置的Handler.Callback对象的原有功能的正常流程。所述动态代理对象即为前述实施例中的预设对象。
动态代理是JAVA的一种运行时机制,可以通过对运行对象进行代理,从而使得该运行对象的方法调用会先交给动态代理对象进行方法调用,而不会影响该运行对象的原有功能的处理流程。但动态代理受限于该运行对象的类必须实现于接口,而本发明所基于的mCallback对象正好满足这个条件,才得以实现对所述mCallback对象的动态代理。
S207:利用所述Hander.CallBack对象获取Activity变化消息。
当所述预设对象为所述Hander.CallBack对象时,利用所述Hander.CallBack对象可以直接控制消息传递,因此同样也可以直接获取Activity变化消息。
S208:利用所述动态代理对象获取Activity变化消息。
当所述预设对象为所述动态代理对象时,利用所述动态代理对象就能够截获Handler对象mH的分发消息,进而同样能够获得Activity变化消息。
S209:根据所述Activity变化消息,获取Activity对象的状态变化信息。
其中,所述Activity对象与所述Activity变化消息相对应,从所述Activity变化消息中,能够获得相应的Activity对象的状态变化信息。
本实施提供的页面跳转监听方法,根据mCallback是否为空的判断结果,有选择性地采用自定义的Hander.CallBack对象或根据mCallback生成的动态代理对象,来替换mCallback对象,进而实现Activity变化消息的获取,并能够在获取Activity变化消息的同时,不影响系统原有功能的正常流程,具有简单、高效、安全可靠性等优点。
请参阅图3,图3为本申请实施例提供的页面跳转监听方法的又一种流程图。
如图3所示,所述方法包括:
S301:反射获取应用进程对应的ActivityThread对象。
S302:反射获取与所述ActivityThread对象相对应的mH对象。
S303:反射获取与mH对象相对应的mCallback对象。
S304:判断所述mCallback对象是否为空,当所述mCallback对象为空时,执行步骤S305;当所述mCallback对象不为空时,执行步骤S306。
S305:将所述mCallback对象替换为自定义的Hander.CallBack对象,并执行步骤S307。
S306:将所述mCallback对象替换为动态代理对象,并执行步骤S308;所述动态代理对象是根据所述mCallback对象生成的。
S307:利用所述Hander.CallBack对象获取Activity变化消息;
S308:利用所述动态代理对象获取Activity变化消息。
其中,步骤S301-S308与前述实施例中的步骤S201-S208相类似,可参考前述实施例中的具体内容,在此不再赘述。
S309:根据所述Activity变化消息,获取与所述Activity对象相对应的ActivityClientRecord对象。
其中,所述Activity对象与所述Activity变化消息相对应。
Activity变化消息中包括与其相对应的Activity的相关信息,该相关信息中包括ActivityClientRecord对象,所述ActivityClientRecord对象用于记录Activity的状态变化信息。
在一示例中,当所述Activity变化消息的类型为LAUNCH_ACTIVITY时,从所述Activity变化消息的附带信息中,获取与所述Activity对象相对应的ActivityClientRecord对象。
在一示例中,Activity变化消息可通过handleMessage(Message msg)方法来实现,并可利用msg.what来获取Activity变化消息的类型。
当所述Activity变化消息的类型为LAUNCH_ACTIVITY时,所述Activity变化消息的附带信息中包括ActivityClientRecord对象。
在另一示例中,当所述Activity变化消息的类型不为LAUNCH_ACTIVITY时,从所述Activity变化消息的附带信息中获取Ibinder接口;通过所述Ibinder接口,获取与所述Activity对象相对应的ActivityClientRecord对象。当所述Activity变化消息的类型不为LAUNCH_ACTIVITY时,所述Activity变化消息的附带信息中,并不包含ActivityClientRecord对象,但可以通过Activity变化消息的附带信息中的Ibinder接口,来获取对应的ActivityClientRecord对象。
S310:根据所述ActivityClientRecord对象记录的信息,获取所述Activity对象的状态变化信息。
由于ActivityClientRecord对象记录有Activity对象的状态变化信息,所以,根据所述ActivityClientRecord对象记录的信息,便可直接获取到所述Activity对象的状态变化信息。
本实施例提供的页面跳转监听方法,在获取到Activity变化消息后,根据Activity变化消息的类型不同,从所述Activity变化消息的附带信息中获取与所述Activity对象相对应的ActivityClientRecord对象,或者,从所述Activity变化消息的附带信息中获取Ibinder接口,再通过所述Ibinder接口,获取与所述Activity对象相对应的ActivityClientRecord对象,ActivityClientRecord对象记录有Activity对象的状态变化信息,进而保证了Activity对象的状态变化信息的准确获取。
对应于页面跳转监听方法,本发明实施例还提供了相应的页面跳转监听装置。
请参阅图4,图4为本申请实施例提供的页面跳转监听装置的一种结构示意图。
本实施例的页面跳转监听装置,用于实施前述实施例的页面跳转监听方法,如图4所示,所述装置包括:
反射获取单元U100,用于反射获取应用进程对应的ActivityThread对象;反射获取与所述ActivityThread对象相对应的mH对象;反射获取与mH对象相对应的mCallback对象。
由Android Handler机制可知,Handler分发消息时,会首先交给自己的mCallback对象处理,因此需要反射获取与mH对象相对应的mCallback对象。
对象替换单元U200,用于将所述mCallback对象替换为预设对象。
在获取到mCallback对象后,要想对mH的分发消息进行控制、拦截,需要利用hook机制,将所述mCallback对象替换为预设对象,进而来实现无侵入式的消息拦截功能。
预设对象是用户创建的用于替换所述mCallback,并用来拦截Activity变化消息的对象。
消息获取单元U300,用于利用所述预设对象,获取Activity变化消息。
利用所述预设对象,截获Activity变化消息,Activity变化消息中包括与其相对应的状态发生变化的Activity的相关信息。
状态获取单元U400,用于根据所述Activity变化消息,获取Activity对象的状态变化信息。
其中,所述Activity对象与所述Activity变化消息相对应,从所述Activity变化消息中,能够获得相应的Activity对象的状态变化信息。
其中,所述Activity对象与所述Activity变化消息相对应。
在一示例中,所述对象替换单元U200包括:
第一替换单元,用于当所述mCallback对象为空时,将所述mCallback对象替换为自定义的Hander.CallBack对象。
第二替换单元,用于当所述mCallback对象不为空时,将所述mCallback对象替换为动态代理对象;所述动态代理对象是根据所述mCallback对象生成的。
在通常情况下,mCallback对象为空,但是,当由于业务模块开发者为了完成某些功能,比如实现插件化,有可能会设置新的Handler.Callback对象,为了既能实现对Handler对象mH分发消息的控制拦截,又不能影响新的Handler.Callback对象的原有功能的正常流程,因此需要分情况决定处理。
当所述mCallback对象为空时,可以直接将mCallback对象替换为自定义的Hander.CallBack对象,并不会对系统流程造成影响。此时,所述自定义的Hander.CallBack对象即为前述实施例中的预设对象。
所述动态代理对象是根据所述mCallback对象生成的。
当所述mCallback对象不为空时,表明已有开发者将其替换为新的Handler.Callback对象,若此时直接将mCallback对象替换为自定义的Hander.CallBack对象,则会破坏开发者设置的Handler.Callback对象。所以,本实施例在所述mCallback对象不为空时,对所述mCallback对象进行动态代理,以生成相对应的动态代理对象,并将所述mCallback对象替换为动态代理对象,这样,既能实现对Handler对象mH分发消息的控制拦截,又不会影响开发者设置的Handler.Callback对象的原有功能的正常流程。此时,所述动态代理对象即为前述实施例中的预设对象。
在一示例中,所述消息获取单元U300包括:
第一获取单元,用于当所述预设对象为所述Hander.CallBack对象时,利用所述Hander.CallBack对象获取Activity变化消息。
当所述预设对象为所述Hander.CallBack对象时,利用所述Hander.CallBack对象可以直接控制消息传递,当然也就可以直接获取Activity变化消息。
第二获取单元,用于当所述预设对象为所述动态代理对象时,利用所述动态代理对象获取Activity变化消息。
当所述预设对象为所述动态代理对象时,利用所述动态代理对象就能够截获Handler对象mH的分发消息,进而同样能够获得Activity变化消息。
在一示例中,所述状态获取单元U400包括:
第三获取单元,用于根据所述Activity变化消息,获取与所述Activity对象相对应的ActivityClientRecord对象。
其中,所述Activity对象与所述Activity变化消息相对应。
Activity变化消息中与其相对应的Activity的相关信息包括ActivityClientRecord对象,所述ActivityClientRecord对象用于记录Activity的状态变化信息。
第四获取单元,用于根据所述ActivityClientRecord对象记录的信息,获取所述Activity对象的状态变化信息。
由于ActivityClientRecord对象记录有Activity对象的状态变化信息,所以,根据所述ActivityClientRecord对象记录的信息,便可直接获取到所述Activity对象的状态变化信息。
在一示例中,所述第三获取单元包括:
第一获取子单元,用于当所述Activity变化消息的类型为LAUNCH_ACTIVITY时,从所述Activity变化消息的附带信息中,获取与所述Activity对象相对应的ActivityClientRecord对象。
当所述Activity变化消息的类型为LAUNCH_ACTIVITY时,所述Activity变化消息的附带信息中包括ActivityClientRecord对象。
第二获取子单元,用于当所述Activity变化消息的类型不为LAUNCH_ACTIVITY时,从所述Activity变化消息的附带信息中获取Ibinder接口;通过所述Ibinder接口,获取与所述Activity对象相对应的ActivityClientRecord对象。
当所述Activity变化消息的类型不为LAUNCH_ACTIVITY时,所述Activity变化消息的附带信息中,并不包含ActivityClientRecord对象,但可以通过Activity变化消息的附带信息中的Ibinder接口,来获取对应的ActivityClientRecord对象。
本实施例提供的页面跳转监听装置,与前述的页面跳转监听方法相对应,具体功能实现流程可进一步参考前述的页面跳转监听方法,在此不再赘述。
本实施例提供的页面跳转监听装置,应用于Android系统。本发明将mCallback对象替换为预设对象,进而利用预设对象直接获取到相应Activity对象的状态变化信息,由于整个hook过程并不涉及到具体的业务代码,从而对页面跳转实现了无侵入式监听,其实现方式简单、高效,并不会受到插件化环境的影响,也就无需对插件化应用进行复杂的AOP插桩处理,从而具有较高的安全可靠性。
本发明提供的页面跳转监听方法及装置,应用于Android系统。通过反射获取应用进程对应的ActivityThread对象;反射获取与所述ActivityThread对象相对应的mH对象;反射获取与mH对象相对应的mCallback对象;并将所述mCallback对象替换为预设对象;再利用所述预设对象,获取Activity变化消息;根据所述Activity变化消息,获取Activity对象的状态变化信息;其中,所述Activity对象与所述Activity变化消息相对应。本发明将mCallback对象替换为预设对象,进而利用预设对象直接获取到相应Activity对象的状态变化信息,由于整个hook过程并不涉及到具体的业务代码,从而对页面跳转实现了无侵入式监听,其实现方式简单、高效,并不会受到插件化环境的影响,也就无需对插件化应用进行复杂的AOP插桩处理,从而具有较高的安全可靠性。
并且,本发明所提供的页面跳转监听方案,由于其无侵入式监听的优点,不仅不会受到插件化环境的影响,而且还能够适用于各种场景下的页面跳转监听工作,且不会受到Android系统版本限制。
再者,本发明所提供的页面跳转监听方案,由于其简单直接的获取方式,所以能够完整准确的获取到Activity对象的状态变化信息,具有较高的准确性。
最后,还需要说明的是,在本文中,诸如第一和第一等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的硬件平台的方式来实现,当然也可以全部通过硬件来实施,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案对背景技术做出贡献的全部或者部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种页面跳转监听方法,其特征在于,应用于Android系统,所述方法包括:
反射获取应用进程对应的ActivityThread对象;
反射获取与所述ActivityThread对象相对应的mH对象;
反射获取与mH对象相对应的mCallback对象;
将所述mCallback对象替换为预设对象;
利用所述预设对象,获取Activity变化消息;
根据所述Activity变化消息,获取Activity对象的状态变化信息;其中,所述Activity对象与所述Activity变化消息相对应。
2.如权利要求1所述的方法,其特征在于,所述将所述mCallback对象替换为预设对象包括:
当所述mCallback对象为空时,将所述mCallback对象替换为自定义的Hander.CallBack对象;
当所述mCallback对象不为空时,将所述mCallback对象替换为动态代理对象;所述动态代理对象是根据所述mCallback对象生成的。
3.如权利要求2所述的方法,其特征在于,所述利用所述预设对象,获取Activity变化消息包括:
当所述预设对象为所述Hander.CallBack对象时,利用所述Hander.CallBack对象获取Activity变化消息;
当所述预设对象为所述动态代理对象时,利用所述动态代理对象获取Activity变化消息。
4.如权利要求1所述的方法,其特征在于,所述根据所述Activity变化消息,获取Activity对象的状态变化信息包括:
根据所述Activity变化消息,获取与所述Activity对象相对应的ActivityClientRecord对象;
根据所述ActivityClientRecord对象记录的信息,获取所述Activity对象的状态变化信息。
5.如权利要求4所述的方法,其特征在于,所述根据所述Activity变化消息,获取与所述Activity对象相对应的ActivityClientRecord对象包括:
当所述Activity变化消息的类型为LAUNCH_ACTIVITY时,从所述Activity变化消息的附带信息中,获取与所述Activity对象相对应的ActivityClientRecord对象;
当所述Activity变化消息的类型不为LAUNCH_ACTIVITY时,从所述Activity变化消息的附带信息中获取Ibinder接口;通过所述Ibinder接口,获取与所述Activity对象相对应的ActivityClientRecord对象。
6.一种页面跳转监听装置,其特征在于,应用于Android系统,所述装置包括:
反射获取单元,用于反射获取应用进程对应的ActivityThread对象;反射获取与所述ActivityThread对象相对应的mH对象;反射获取与mH对象相对应的mCallback对象;
对象替换单元,用于将所述mCallback对象替换为预设对象;
消息获取单元,用于利用所述预设对象,获取Activity变化消息;
状态获取单元,用于根据所述Activity变化消息,获取Activity对象的状态变化信息;其中,所述Activity对象与所述Activity变化消息相对应。
7.如权利要求6所述的装置,其特征在于,所述对象替换单元包括:
第一替换单元,用于当所述mCallback对象为空时,将所述mCallback对象替换为自定义的Hander.CallBack对象;
第二替换单元,用于当所述mCallback对象不为空时,将所述mCallback对象替换为动态代理对象;所述动态代理对象是根据所述mCallback对象生成的。
8.如权利要求7所述的装置,其特征在于,所述消息获取单元包括:
第一获取单元,用于当所述预设对象为所述Hander.CallBack对象时,利用所述Hander.CallBack对象获取Activity变化消息;
第二获取单元,用于当所述预设对象为所述动态代理对象时,利用所述动态代理对象获取Activity变化消息。
9.如权利要求6所述的方法,其特征在于,所述状态获取单元包括:
第三获取单元,用于根据所述Activity变化消息,获取与所述Activity对象相对应的ActivityClientRecord对象;
第四获取单元,用于根据所述ActivityClientRecord对象记录的信息,获取所述Activity对象的状态变化信息。
10.如权利要求9所述的方法,其特征在于,所述第三获取单元包括:
第一获取子单元,用于当所述Activity变化消息的类型为LAUNCH_ACTIVITY时,从所述Activity变化消息的附带信息中,获取与所述Activity对象相对应的ActivityClientRecord对象;
第二获取子单元,用于当所述Activity变化消息的类型不为LAUNCH_ACTIVITY时,从所述Activity变化消息的附带信息中获取Ibinder接口;通过所述Ibinder接口,获取与所述Activity对象相对应的ActivityClientRecord对象。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711172049.5A CN107967169A (zh) | 2017-11-22 | 2017-11-22 | 页面跳转监听方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711172049.5A CN107967169A (zh) | 2017-11-22 | 2017-11-22 | 页面跳转监听方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107967169A true CN107967169A (zh) | 2018-04-27 |
Family
ID=61999653
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711172049.5A Pending CN107967169A (zh) | 2017-11-22 | 2017-11-22 | 页面跳转监听方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107967169A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108809804A (zh) * | 2018-05-24 | 2018-11-13 | 山东华软金盾软件股份有限公司 | 一种Android消息通知分发方法 |
CN109766146A (zh) * | 2019-01-31 | 2019-05-17 | 南威软件股份有限公司 | 一种html脚本启动android app指定界面的方法 |
CN114064144A (zh) * | 2021-11-12 | 2022-02-18 | 南京论之语网络技术有限公司 | 一种跨应用数据获取的通信插件以及通信方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140137184A1 (en) * | 2012-11-13 | 2014-05-15 | Auckland Uniservices Ltd. | Security system and method for operating systems |
CN105183457A (zh) * | 2015-08-13 | 2015-12-23 | 北京金山安全软件有限公司 | 一种监听界面生命周期回调的方法及装置 |
CN106909262A (zh) * | 2015-12-22 | 2017-06-30 | 北京奇虎科技有限公司 | 一种数据处理方法和装置 |
-
2017
- 2017-11-22 CN CN201711172049.5A patent/CN107967169A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140137184A1 (en) * | 2012-11-13 | 2014-05-15 | Auckland Uniservices Ltd. | Security system and method for operating systems |
CN105183457A (zh) * | 2015-08-13 | 2015-12-23 | 北京金山安全软件有限公司 | 一种监听界面生命周期回调的方法及装置 |
CN106909262A (zh) * | 2015-12-22 | 2017-06-30 | 北京奇虎科技有限公司 | 一种数据处理方法和装置 |
Non-Patent Citations (2)
Title |
---|
袁辉辉: "《Android消息机制1-Handler(Java层) 》", 26 December 2015 * |
袁辉辉: "《四大组件之ActivityRecord》", 11 June 2017 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108809804A (zh) * | 2018-05-24 | 2018-11-13 | 山东华软金盾软件股份有限公司 | 一种Android消息通知分发方法 |
CN109766146A (zh) * | 2019-01-31 | 2019-05-17 | 南威软件股份有限公司 | 一种html脚本启动android app指定界面的方法 |
CN114064144A (zh) * | 2021-11-12 | 2022-02-18 | 南京论之语网络技术有限公司 | 一种跨应用数据获取的通信插件以及通信方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Doupé et al. | Fear the ear: discovering and mitigating execution after redirect vulnerabilities | |
CN103294950B (zh) | 一种基于反向追踪的高威窃密恶意代码检测方法及系统 | |
CN104239786B (zh) | 免root主动防御配置方法及装置 | |
CN102999726B (zh) | 文件宏病毒免疫方法和装置 | |
US20040250115A1 (en) | Self-contained mechanism for deploying and controlling data security services via a web browser platform | |
CN107967169A (zh) | 页面跳转监听方法及装置 | |
US20050198649A1 (en) | Software application action monitoring | |
CN106708557A (zh) | 一种针对终端应用的更新处理方法及装置 | |
US20100242055A1 (en) | Remote procedure call chains | |
WO2021098354A1 (zh) | 一种基于无障碍服务实现缄默安装的安卓渗透方法和装置 | |
US20210182392A1 (en) | Method for Detecting and Defeating Ransomware | |
US8166460B2 (en) | System and method for analyzing HTTP sessions | |
CN104239797B (zh) | 主动防御方法及装置 | |
CN110889691B (zh) | 一种信息显示方法、装置及设备 | |
CA2982272C (en) | Automatic task tracking | |
CN105528543A (zh) | 远程杀毒的方法、客户端、控制台及系统 | |
CN105094791A (zh) | 状态栏通知的存储方法及装置 | |
CN103067246B (zh) | 对基于即时通讯业务接收到的文件进行处理的方法及装置 | |
CN101414328A (zh) | 一种用于对文件进行脱壳的装置和方法 | |
KR101500512B1 (ko) | 데이터 프로세싱 시스템 보안 장치와 보안방법 | |
CN112257037B (zh) | 一种进程水印方法、系统及电子设备 | |
US9621677B1 (en) | Monitoring accesses to computer source code | |
CN112422581B (zh) | JVM中的Webshell网页检测方法、装置及设备 | |
CN105453104B (zh) | 系统保护用文件安全管理装置和管理方法 | |
KR101130088B1 (ko) | 악성 코드 탐지 장치 및 그 방법, 이를 위한 프로그램이 기록된 기록 매체 |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180427 |