CN114637680A - 一种信息采集方法、装置及设备 - Google Patents

一种信息采集方法、装置及设备 Download PDF

Info

Publication number
CN114637680A
CN114637680A CN202210284225.9A CN202210284225A CN114637680A CN 114637680 A CN114637680 A CN 114637680A CN 202210284225 A CN202210284225 A CN 202210284225A CN 114637680 A CN114637680 A CN 114637680A
Authority
CN
China
Prior art keywords
class
target
page
sub
target class
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
Application number
CN202210284225.9A
Other languages
English (en)
Inventor
朱利亚
郭剑霓
王思远
蒋宁
吴海英
张永辉
鹿凌华
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mashang Xiaofei Finance Co Ltd
Original Assignee
Mashang Xiaofei Finance Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Mashang Xiaofei Finance Co Ltd filed Critical Mashang Xiaofei Finance Co Ltd
Priority to CN202210284225.9A priority Critical patent/CN114637680A/zh
Publication of CN114637680A publication Critical patent/CN114637680A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

本说明书实施例公开了一种信息采集方法、装置及设备,该方法包括:若检测到目标应用程序的页面中的目标类对应的目标方法被调用,则获取所述目标类对应的子页面的显示状态,所述目标方法用于显示或隐藏所述目标类对应的子页面;若所述目标类对应的子页面的显示状态与所述目标方法对应的状态相匹配,则获取所述目标类对应的子页面的显示信息;基于所述目标类对应的子页面的显示信息,确定所述页面的层级结构对应的层级页面显示信息。通过上述方法,可以提高针对多层级页面的显示信息的采集效率和采集准确性。

Description

一种信息采集方法、装置及设备
技术领域
本文件涉及计算机技术领域,尤其涉及一种信息采集方法、装置及设备。
背景技术
随着计算机技术的飞速发展,应用程序可以为用户提供的服务越来越多样化,因而,应用程序的页面中可能包含多个层级的子页面,为提高用户体验,可以通过采集得到的页面中各子页面的显示信息,对应用程序进行优化改进。
通常,开发人员可以根据采集需求针对特定页面中特定层级的子页面进行信息采集,例如,开发人员可以根据采集需求,设计针对应用程序中的第1个页面的第3层子页面的信息采集代码,并在应用程序运行的过程中基于该采集代码采集该子页面的显示信息。
但是,由于子页面可能存在新增或删除的情况,会导致子页面的层级关系发生改变,而在测试阶段由于仅针对功能需求进行测试,因而很难在测试阶段检测出子页面的层级信息发生了改变,所以,在应用程序运行过程中,可能存在由于子页面的层级关系发生变化,导致无法及时准确的采集层级页面的显示信息的情况,基于此,需要提供一种提高针对多层级页面的显示信息的采集效率和采集准确性的技术方案。
发明内容
本说明书实施例的目的是提供一种提高针对多层级页面的显示信息的采集效率和采集准确性的技术方案。
为了实现上述技术方案,本说明书实施例是这样实现的:
本说明书实施例提供的一种信息采集方法,所述方法包括:
若检测到目标应用程序的页面中的目标类对应的目标方法被调用,则获取所述目标类对应的子页面的显示状态,所述目标方法用于显示或隐藏所述目标类对应的子页面;
若所述目标类对应的子页面的显示状态与所述目标方法对应的状态相匹配,则获取所述目标类对应的子页面的显示信息;
基于所述目标类对应的子页面的显示信息,确定所述页面的层级结构对应的层级页面显示信息。
本说明书实施例提供的一种信息采集装置,所述装置包括:
状态获取模块,被配置为若检测到目标应用程序的页面中的目标类对应的目标方法被调用,则获取所述目标类对应的子页面的显示状态,所述目标方法用于显示或隐藏所述目标类对应的子页面;
信息获取模块,被配置为若所述目标类对应的子页面的显示状态与所述目标方法对应的状态相匹配,则获取所述目标类对应的子页面的显示信息;
信息确定模块,被配置为基于所述目标类对应的子页面的显示信息,确定所述页面的层级结构对应的层级页面显示信息。
本说明书实施例提供的一种信息采集设备,所述信息采集设备包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
若检测到目标应用程序的页面中的目标类对应的目标方法被调用,则获取所述目标类对应的子页面的显示状态,所述目标方法用于显示或隐藏所述目标类对应的子页面;
若所述目标类对应的子页面的显示状态与所述目标方法对应的状态相匹配,则获取所述目标类对应的子页面的显示信息;
基于所述目标类对应的子页面的显示信息,确定所述页面的层级结构对应的层级页面显示信息。
本说明书提供的上述技术方案,通过目标类对应的子页面的实际显示状态(即子页面的显示状态是否与目标方法对应的状态相匹配),确定该子页面的显示信息,可以避免在通过子页面在页面中的层级关系获取子页面的显示信息时,存在的由于删除或新增某个子页面导致子页面在页面中的层级关系发生改变,以致无法及时准确的采集到子页面的显示信息的情况,可以在目标应用程序运行的过程中,及时准确的采集到各层级子页面对应的显示信息,即可以提高针对多层级页面的信息采集效率和采集准确性。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本说明书一种信息采集方法实施例;
图2为本说明书一种多层级页面的示意图;
图3为本说明书又一种多层级页面的示意图;
图4为本说明书又一种信息采集方法实施例;
图5为本说明书又一种信息采集方法实施例;
图6为本说明书又一种信息采集方法实施例;
图7为本说明书又一种信息采集方法实施例;
图8为本说明书又一种信息采集方法实施例;
图9为本说明书又一种信息采集方法实施例
图10为本说明书又一种信息采集方法实施例;
图11为本说明书一种第一方法插入过程的示意图;
图12为本说明书一种层级页面显示信息的获取过程的示意图;
图13为本说明书一种信息采集装置实施例;
图14为本说明书一种信息采集设备实施例。
具体实施方式
本说明书实施例提供一种信息采集方法、装置及设备。
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
本申请的发明构思如下:开发人员可以根据采集需求针对特定页面中特定层级的子页面进行信息采集,例如,开发人员可以根据采集需求,设计针对应用程序中的第1个页面的第3层子页面的信息采集代码,并在应用程序运行的过程中基于该采集代码采集该子页面的显示信息。
但是,由于子页面可能存在新增或删除的情况,会导致子页面的层级关系发生改变,而在测试阶段由于仅针对功能需求进行测试,因而很难在测试阶段检测出子页面的层级信息发生了改变,所以,在应用程序运行过程中,可能存在由于子页面的层级关系发生变化,导致无法及时准确的采集多层级页面的显示信息的情况。例如,假设页面1包含子页面1,子页面1包含子页面2,即子页面2的页面层级为3,对应的采集代码可以设计为用于采集第3层的子页面的显示信息,但是,若子页面1被删除,那么,子页面2的层级即变更为层级2,若在子页面1与子页面2之间新增一个子页面3,那么,子页面2的层级即变更为层级4,而在测试阶段由于产品的工作人员仅针对每个页面中各个子页面的功能需求进行测试,所以子页面2的层级信息发生变化很难被及时的检测出来,而与子页面2对应的采集代码仍为用于采集第3层级的子页面的显示信息。显然,基于该采集代码在应用程序运行过程中并不能采集到子页面2的显示信息。另外,由于采集信息出现异常,一方面需要大量人力检测和修改该问题,另一方面也会影响该应用程序的正常开发周期,导致应用程序的修复周期长,且后期的管理和维护成本较高,不能满足快速迭代的业务场景需求。基于此,需要提供一种提高针对多层级页面的显示信息的采集效率和采集准确性的技术方案。
本技术方案中通过目标类对应的子页面的实际显示状态(即子页面的显示状态是否与目标方法对应的状态相匹配),确定该子页面的显示信息,可以避免在通过子页面在页面中的层级关系获取子页面的显示信息时,存在的由于删除或新增某个子页面导致子页面在页面中的层级关系发生改变,以致无法及时准确的采集到子页面的显示信息的情况,可以在目标应用程序运行的过程中,及时准确的采集到各层级子页面对应的显示信息,即可以提高针对多层级页面的信息采集效率和采集准确性,并满足应用程序快速迭代的业务场景需求。
如图1所示,本说明书实施例提供一种信息采集方法,该方法的执行主体可以为终端设备或服务器,其中,该终端设备可以是如手机、平板电脑等移动终端设备,也可以是个人计算机设备,该服务器可以是独立的一个服务器,也可以是由多个不同的服务器构成的服务器集群。该方法可以应用于页面的显示信息的采集处理中。
该方法具体可以包括以下步骤:
在步骤S102中,若检测到目标应用程序的页面中的目标类对应的目标方法被调用,则获取目标类对应的子页面的显示状态。
其中,目标方法可以用于显示或隐藏目标类对应的子页面,目标应用程序可以是任意可以在终端设备或服务器运行的应用程序,页面的结构可以包括由多个子页面构成的层级结构,目标类可以是嵌套在页面的主页面对应的类中的第2至n层的类,例如,页面的主页面对应的类可以为Activity类,Activity类中可以嵌套一个或多个Fragement类,Fragement类可以再嵌套一个或多个Fragement类,Fragement类即为目标类,Fagement类对应的页面即为页面的子页面,目标类对应的子页面的显示状态可以是显示或隐藏。
在实施中,为提高用户对应用程序的使用体验,可以通过采集得到的页面中各子页面的显示信息,对应用程序进行优化改进,为提高针对多层级页面的显示信息的采集效率和采集准确性,本说明书实施例提供一种可实现的处理方式,具体可以包括以下内容:
以目标应用程序为资源转移应用程序为例,终端设备在检测到用户触发启动资源转移应用程序时,如图2所示,可以显示资源转移应用程序的初始化页面,具体以该初始化页面为例,该页面中包含1个主页面和3个子页面,这3个子页面分别是“首页”对应的子页面1、与“资源转移服务”对应的子页面2,以及与“我的”对应的子页面3。
终端设备在显示如图2所示的页面时,会调用该主页面对应的类的显示方法,以及子页面1对应的目标类的显示方法(如onResume方法),即终端设备在检测到onResume方法(即目标方法)被调用的情况下,可以获取该目标类对应的子页面1的显示状态。例如,可以通过调用该目标类的getUserVisibleHint方法和isHidden方法,确定该目标类对应的子页面1是否显示。
上述获取目标类对应的子页面的显示状态的方法是一种可选地、可实现的获取方法,在实际应用场景中,还可以有多种不同的获取方法,可以根据实际应用场景的不同而有所不同,本说明书实施例对此不做具体限定。
在步骤S104中,若目标类对应的子页面的显示状态与目标方法对应的状态相匹配,则获取目标类对应的子页面的显示信息。
其中,目标方法对应的状态可以为显示或隐藏,如目标方法为用于显示目标类对应的子页面,那么,目标方法对应的状态即为显示,目标类对应的子页面的显示信息可以包括子页面的显示时间、显示时长等。
在实施中,若目标类对应的子页面的显示状态为显示,目标方法对应的状态也为显示,那么,可以获取目标类对应的子页面的显示时间。例如,可以将目标方法被调用的时间确定为目标类对应的子页面的显示时间,如onResume方法被调用的时间为10:00,则该目标类对应的子页面的显示时间即为10:00。
在步骤S106中,基于目标类对应的子页面的显示信息,确定页面的层级结构对应的层级页面显示信息。
在实施中,例如,如图3所示,目标类可以有多个,如目标类还可以为“资源对象列表”对应的类等,可以通过上述步骤S102~S104分别获取与每个目标类对应的子页面的显示信息。
可以基于获取的子页面的显示信息,确定页面的层级结构对应的层级页面显示信息,页面的层级结构对应的层级页面显示信息可以包括:第2层级的子页面1(即与“首页”对应的子页面)的显示时间为10:01,显示时长为10秒;第2层级的子页面2(即与“资源转移服务”对应的子页面)的显示时间为10:02,显示时长为1分钟;第3层级的子页面3(即与“服务2”对应的子页面)的显示时间为10:02,显示时长为1分钟;第4层级的子页面4(即与“转移对象列表”对应的子页面)的显示时间为10:02,显示时长为1分钟等。
这样,即使上述子页面的层级信息发生改变(如子页面1从第2层变为第3层),也可以基于目标类对应的子页面的显示状态等信息,及时准确的对子页面的显示信息进行采集。
本说明书实施例提供一种信息采集方法,在目标应用程序运行的过程中,若检测到目标应用程序的页面中的目标类对应的目标方法被调用,则获取目标类对应的子页面的显示状态,目标方法用于显示或隐藏目标类对应的子页面,若目标类对应的子页面的显示状态与目标方法对应的状态相匹配,则获取目标类对应的子页面的显示信息,基于目标类对应的子页面的显示信息,确定页面的层级结构对应的层级页面显示信息,这样,可以通过目标类对应的子页面的实际显示状态(即子页面的显示状态是否与目标方法对应的状态相匹配),确定该子页面的显示信息,可以避免在通过子页面在页面中的层级关系获取子页面的显示信息时,存在的由于删除或新增某个子页面导致子页面在页面中的层级关系发生改变,以致无法及时准确的采集到子页面的显示信息的情况,可以在目标应用程序运行的过程中,及时准确的采集到各层级子页面对应的显示信息,即可以提高针对多层级页面的信息采集效率和采集准确性。
本说明书一个或多个实施例中,所述目标方法用于隐藏所述目标类对应的子页面,显示信息还可以包括显示时长,相应的,如图4所示,上述步骤S104具体可以包括以下步骤S1042~S1044的处理。
在步骤S1042中,若目标类对应的子页面的显示状态为隐藏,则获取目标类对应的子页面的隐藏时间。
在实施中,如图3所示,终端设备在接收到用户针对“资源转移服务”的触发显示的情况下,可以隐藏“首页”对应的子页面,并显示“资源转移服务”对应的子页面,此时,终端设备可以调用“首页”子页面对应的目标类的onPause方法(即目标方法),若该子页面的显示状态为隐藏,则可以将onPause方法的调用时间确定为该目标类对应的子页面的隐藏时间。
在步骤S1044中,基于目标类的标识,获取目标类对应的子页面的显示时间。
在实施中,可以基于目标类的标识,获取目标类对应的子页面的显示时间,例如,可以基于“首页”子页面对应的目标类的标识,从内存中获取该子页面的显示时间。
本说明书一个或多个实施例中,如图4所示,在获取目标类对应的子页面的显示时间之后,还可以继续执行步骤S1046。
在步骤S1046中,基于显示时间和隐藏时间,确定目标类的显示时长。
在实施中,可以将显示时间和隐藏时间的差值,确定为目标类的显示时长。
本说明书一个或多个实施例中,在获取目标类对应的子页面的显示信息之前,还可以确定目标类的标识,如图5所示,具体可以包括以下步骤S202~S206的处理。
在步骤S202中,获取目标类在页面对应的类中的嵌套关系。
在实施中,由于应用程序中的类的命名方式可以有多种,即类的名称可能存在不唯一的情况,例如,如图3所示,第2层级的“服务1”子页面对应的类的名称可能与第2层级的“服务1”子页面对应的类名称相同,因而,类的名称不能用于唯一确定该类,所以,可以为目标类生成可唯一确定该类的标识。
例如,可以通过递归调用的方式,获取目标类的嵌套关系,具体如,可以通过递归调用目标类的getParentFragement方法获取目标类的父类,以获取目标类的嵌套关系,以目标类为图3中“服务2”子页面对应的类为例,获取的目标类的嵌套关系可以是Activity-Fragement1-(Fragement2,Fragement3),其中,Activity类即为该页面的主页面对应的类,Fragement1类即为“服务2”子页面对应的目标类,Fragement2类即为“转移对象列表”子页面对应的类,Fragement3类即为“转移数量”子页面对应的类。
在步骤S204中,基于嵌套关系,确定目标类对应的子页面在页面的层级结构中的层级信息。
在实施中,可以基于嵌套关系,确定目标类对应的子页面在页面中的层级信息,例如,基于上述步骤S202中获取的嵌套关系,可以确定“服务2”子页面在页面中的层级信息为第2层,“转移对象列表”子页面在页面中的层级信息可以为第3层。
在步骤S206中,将目标类对应的子页面在页面中的层级信息,确定为目标类的标识。
此外,还可以通过递归调用的方式,将获取的目标类的层级信息确定为目标类的标识,例如,可以通过递归调用目标类的getParentFragement方法获取目标类的父类,以确定目标类的层级信息,具体如,当存在父类的情况下,目标类的层数加1,直到父类对象为null(即不存在父类),再将目标类的层级信息确定为目标类的标识。
另外,还可以基于预设验证算法,生成目标类的可验证信息,并将该可验证信息作为目标类的标识,具体如,可以基于预设哈希算法和目标类的嵌套关系,生成目标类对应的哈希值,并将该哈希值作为该目标类的标识。
上述目标类的标识的确定方法是一种可选地、可实现的确定方法,在实际应用场景中,可以有多种不同的确定方法,可以根据实际应用场景的不同而有所不同,本说明书实施例对此不作具体限定。
上述步骤S106中页面的层级结构对应的层级页面显示信息的确定方式可以多种多样,以下提供一种可选的处理方式,如图6所示,具体可以包括以下步骤S1062的处理。
在步骤S1062中,基于目标类对应的子页面在页面的层级结构中的层级信息,以及目标类对应的子页面的显示信息,确定页面的层级结构对应的层级页面显示信息。
在实施中,在层级页面显示信息中添加目标类对应的子页面在页面中的层级信息,可以实现针对类的快速定位,以提高后续数据处理效率和准确性。
本说明书一个或多个实施例中,目标类对应的子页面的显示信息的获取方式可以有多种多样,以下提供一种可选的处理方式,如图7所示,具体可以包括以下步骤S1048~S100412的处理。
在步骤S1048中,获取目标类在页面对应的类中的嵌套关系,并基于嵌套关系,确定页面对应的类中是否存在目标类的第一父类。
其中,第一父类可以是页面的主页面对应的Activity类,也可以是页面的子页面对应的Fragement类,第一父类可以是目标类的直接父类或/或间接父类。
在实施中,例如,如图3所示,以目标类为“服务2”子页面对应的类为例,获取的目标类的嵌套关系可以是Activity-Fragement1-(Fragement2,Fragement3),其中,Activity类即为该页面的主页面对应的类,Fragement1类即为“服务2”子页面对应的目标类,Fragement2类即为“转移对象列表”子页面对应的类,Fragement3类即为“转移数量”子页面对应的类,Fragement2类的第一父类即为Activity类和Fragement1类,基于该嵌套关系可以确定该目标类的第一父类即为Activity类,其中,Activity类为Fragement2类的间接父类,Fragement1类为Fragement2类的直接父类。
在步骤S10410中,若页面对应的类中存在目标类的第一父类,则获取目标类的第一父类对应的页面的显示状态。
在步骤S10412中,若目标类的第一父类对应的页面的显示状态与目标方法对应的状态相匹配,且目标类对应的子页面的显示状态与目标方法对应的状态相匹配,则获取目标类对应的子页面的显示信息。
在实施中,可以通过目标类的第一父类对应的页面的显示状态以及目标类对应的子页面的显示状态,确定目标类对应的子页面是否显示或隐藏,以提高子页面的显示信息的采集准确性。例如,若目标类的第一父类对应的页面的显示状态为隐藏,目标类对应的子页面的显示状态为显示,目标方法为用于显示目标类对应的子页面,显然,由于目标类的第一父类对应的页面并未实际显示,因而目标类对应的子页面的实际显示状态为隐藏。因此,当目标类的第一父类对应的页面的显示状态与目标方法对应的状态相匹配,且目标类对应的子页面的显示状态与目标方法对应的状态相匹配时,可以确定目标类对应的子页面的实际显示状态为显示,此时可以获取目标类对应的子页面的显示信息。
本说明书一个或多个实施例中,在目标类对应的子页面的显示状态与目标方法对应的状态相匹配的情况下,还可以触发目标类的子类调用目标方法,或将目标类的显示信息确定为目标类的子类的显示信息,相应的,如图8所示,还可以执行下述步骤S302~S304的处理。
在步骤S302中,基于嵌套关系,确定目标类的子类。
在步骤S304中,若目标类的子类对应的目标方法未调用,则触发目标类的子类调用目标方法,或将目标类的显示信息确定为目标类的子类的显示信息。
在实施中,例如,如图3所示,以目标类为“服务2”子页面对应的类为例,若“服务2”子页面对应的目标类的目标方法被调用,则可以检测目标类的子类对应的目标方法是否被调用。具体如,若目标方法为onPause方法,则在“服务2”子页面对应的目标类的onPause方法被调用的情况下,可以检测“转移对象列表”子页面对应的类,以及“转移数量”子页面对应的类的onPause方法是否被调用。
若目标类的子类对应的目标方法未调用,则可以触发目标类的子类调用目标方法,以便于根据目标类的显示信息准确的确定目标类的子类的显示信息。
其中,在触发目标类的子类调用目标方法时,可以通过传递的方式,将目标方法传递给目标类的子类,例如,可以通过递归遍历的方式,调用目标类的getChildFragement对象,得到目标类的子类对应的对象列表,并将目标类的目标方法传递给对象列表中的每个子类。
此外,还可以将目标类的显示信息确定为目标类的子类的显示信息,终端设备或服务器中就可以存储每一层类的第一父类的显示信息,在确定目标类对应的子页面的显示状态时,就可以获取目标类对应的第一父类对应的页面的显示状态,以基于目标类对应的子页面的显示状态和目标类的第一父类对应的页面的显示状态,确定目标类对应的子页面的显示信息。
本说明书一个或多个实施例中,目标类对应的子页面的显示状态的获取方式可以有多种多样,以下提供一种可选的处理方式,如图9所示,具体可以包括以下步骤S1022~S1024的处理。
在步骤S1022中,若检测到目标应用程序的页面中的目标类对应的目标方法被调用,则获取与目标类的目标方法对应的第一方法。
其中,第一方法可以为在目标应用程序的应用打包阶段插入的用于获取子页面的显示状态的方法,例如,第一方法可以是getUserVisibleHint方法、isHidden方法等用于获取页面的显示状态的方法。
在实施中,在应用打包阶段,可以对目标应用程序的代码中每个类的方法中是否存在目标方法进行检测,并在检测到某个类存在目标方法的情况下,创建ClassVisitor对象,在目标方法后插入对应的第一方法。
在步骤S1024中,通过第一方法,获取目标类对应的子页面的显示状态。
在实施中,以目标方法为onResume方法、onPause方法、setUserVisibleHint方法和onHiddenChanged方法为例,在目标应用程序的应用打包阶段,可以检测目标应用程序中的class文件,若class文件存在目标方法,可以将对应的第一方法插入到目标方法中,其中,目标方法与第一方法的对应关系可以如表1所示。
表1
目标方法 第一方法
onResume方法 OnFragementResume方法
onPause方法 OnFragementPause方法
setUserVisibleHint方法 OnFragementUserVisibleHint方法
onHiddenChanged方法 OnFragementHiddenChanged方法
本说明书一个或多个实施例中,第一方法还可以为目标类从目标类的基类继承得到,目标类的基类可以为基于类继承关系确定的目标类的父类,在目标应用程序运行之前,第一方法可以为在目标应用程序的应用打包阶段插入的,相应的,如图10所示,还可以执行下述步骤S502~S508的处理。
在步骤S502中,获取目标应用程序的类继承关系。
在实施中,为提高代码的可拓展性和可维护性,可以通过继承机制使子类的定义可以基于已经存在的父类,以实现父类代码的重用。因此,在目标应用程序的应用打包阶段,可以根据目标应用程序的代码,获取目标应用程序中的类继承关系。例如,可以在目标应用程序的代码中,查询关键词“extends”,若存在该关键词,则可以将该关键词连接的两个类确定为子类和直接父类,具体如,在目标应用程序的代码中,若存在mylass1 extendsmyclass2,则可以确定myclass2类为myclass1类的直接父类,myclass1类为myclass2类的子类,同样的,若存在mylass2 extends System,则可以确定System类为myclass2类的直接父类,则这三个类之间的类继承关系可以为:mylass1类-mylass2类-System类。
上述类继承关系的获取方法是一种可选地、可实现的获取方法,在实际应用场景中,还可以有多种不同的获取方法,可以根据实际应用场景的不同而有所不同,本说明书实施例对此不做具体限定。
在步骤S504中,基于类继承关系,确定第一类的直接父类是否为系统提供的类。
其中,类可以包括自定义的类和系统提供的类,系统提供的类可以如System类、Runtime类、Object类等,System类提供了代表标准输入、标准输出和错误输出的类变量,并提供了用于访问环境变量和系统属性、加载文件和动态链接库的类方法,由于System类是系统提供的类,因此,不能创建System类的对象,但可以通过继承机制继承System类以调用该类对应的类变量和类方法。
在实施中,由于类的命名方式有多种多样,因而通过类的名称无法确定该类是否为基类,因此,可以通过类继承关系,通过确定类的直接父类是否为系统提供的类,确定该类是否为基类。
在步骤S506中,若第一类的直接父类为系统提供的类,则将第一类确定为基类。
在实施中,例如,基于类继承关系可以确定myclass1类的直接父类为myclass2类,myclass2类的直接父类为System类,其中,myclass1类和myclass1类为自定义的类,System类为系统提供的类,因此,由于myclass2类的直接父类为系统提供的类,所以,可以确定myclass2类为基类。
在步骤S508中,若基类对应的方法中存在目标方法,则在基类的目标方法后插入第一方法。
在实施中,在基类的目标方法后插入第一方法,那么,基于继承关系确定的该基类的所有子类就可以继承该第一方法,而不需要针对每一个类进行方法判断和方法插入操作,提高了数据处理效率。如上述步骤S506中,确定myclass2类为基类,则可以在该类的目标方法后插入第一方法,这样,该类的子类(即myclass1类)就可以继承该第一方法,而不需要在针对myclass1类进行目标方法的查找以及第一方法的插入等操作。
另外,可以通过在目标应用程序的应用打包阶段插入的第一方法,实现对子页面的显示信息的无感知采集,同时,还可以支持针对第三方SDK中的层级页面显示信息的采集,降低了人工插入采集代码导致的操作风险概率。
例如,目标应用程序为资源转移应用程序,该目标应用程序中的“登录”子页面等为第三方提供的功能页面,为采集该“登录”子页面的显示信息,可以对第三方提供的代码进行检测,并在检测到基类的目标方法后插入第一方法,避免了人工在第三方提供的代码中进行查找和插入针对指定层级的子页面的显示信息的采集代码的方式,导致的操作过程较为复杂,易引起操作失误风险概率高的问题。
以下通过具体的应用场景对上述信息采集进行详细说明,该场景可以包括:资源转移等场景进行说明,具体可以包括以下内容:
以目标应用程序为资源转移应用程序为例,如图11所示,在目标应用程序的应用打包阶段,可以对编译的class文件进行扫描,并对基类的目标方法插入自定义字节码(即与第一方法对应的代码),省去开发人员在接入SDK后的开发工作,达到对开发人员的无感知的目的。
以通过Android Gradle插件中的Transform实现代码插入为例,可以在Android项目的配置文件中引用自定义的插件,并在该插件中注册自定义Transform,实现transform方法,并遍历输入的class文件,利用ASM(通用的Java字节码操作和分析框架,可以用来修改现有的类,或者直接以二进制形式动态生成类)工具对字节码进行修改,插入指定代码并保存,Android Gradle会将自定义Transform保存的文件继续传递给下一个Transform继续执行打包逻辑。具体步骤如下:
1、自定义Transform并实现transform方法。
2、在transform方法中遍历inputs入参得到压缩文件。
3、遍历压缩文件,如果存在元素,执行第4步,否则执行第9步,其中,元素可以为class文件、资源文件(如图片文件、配置文件、xml文件等)等。
4、判断当前元素是否为class文件,如果为是则执行第5步,如果为否则直接将源文件写入到输出路径中并执行第3步,继续判断下一个元素。
5、创建文件对应的ClassVisitor对象。
a)实现visit方法,将className、superName、interfaces存储到内存中,其中,className为当前类的名称,superName为该类的父类的名称,interfaces为接口;
b)实现visitMethod方法,通过name、desc入参判断该类中是否存在目标方法(如用于显示或隐藏子页面的目标方法,具体如Fragment类的onResume、onPause、setUserVisibleHint、onHiddenChanged),如果为是则执行第6步,如果为否则执行第5步c小点判断;
c)实现visitEnd方法,基于类继承关系,判断当前类的直接父类是否为系统提供的类(即判断sperName是否为系统提供的类),在判断该目标方法后是否已插入对应的第一方法,如果已插入,则执行第3步,继续判断下一个元素,如果未插入,则执行第6步。
6、创建MethodVisitor对象。实现visitInsn方法,判断opcode入参是否为Opcodes.RETURN常量,如果为是则执行MethodVisitor对象的visitVarInsn和visitMethodInsn方法,插入对目标方法对应的第一方法的调用事件代码,目的是通知SDK该方法被调用了,用于记录被调用对象的采集信息。
7、自定义Gradle插件并实现apply方法,在该方法中获取到AppExtension对象,调用该对象registerTransform添加自定义的Transform。
8、将自定义Gradle插件发布到Maven仓库中。
9、在项目中build.gradle配置文件中添加插件的classpath依赖。
10、在项目主模块中build.gradle配置文件中添加apply plugin引用。
11、执行应用打包,结束。
如图12所示,在目标应用程序运行过程中,可以通过插入的第一方法实现页面的层级结构对应的层级页面显示信息的采集。其中,可以通过监听生命周期事件,实现对Activity类对应的主页面的显示信息的采集,通过本说明书上述实施例中的方法实现对Fragement类对应的子页面的显示信息的采集。
通过监听生命周期事件,实现对Activity类对应的主页面的显示信息的采集的具体步骤可以如下:
1、目标应用程序启动,执行第2步。
2、初始化SDK,先执行启动数据补报逻辑,再执行获取到目标应用程序的Context,通过Context得到Application对象,再调用registerActivityLifecycleCallbacks注入Activity页面监听器,以监听onActivityResumed、onActivityPaused、onActivityCreated、onActivityDestroyed声明周期事件,并保存采集的显示信息至数据库中。其中,每个事件对应的采集方法如下:
a)当监听器监听到onActivityCreated(页面创建)、onActivityDestroyed(页面销毁)方法被调用时,可以设置对应事件标识,并标记该主页面的页面层级为1,保存该主页面的层级信息、显示信息等至数据库中。
b)当监听器监听到onActivityResumed(页面显示)方法被调用时,标记该主页面的页面层级为1,将对应事件及采集的显示信息存储至内存中,存储方式可以为Key:Value,Key可以为当前Activity类的标识(如当前Activity类对应的哈希值),Value可以为采集的显示信息(如显示时间)。
c)当监听器监听到onActivityPaused(页面隐藏)方法被调用时,使用当前Activity类的标识从内存中取出页面的显示信息,并根据显示信息中的显示时间,以及隐藏时间,计算出该主页面的显示时长,执行保存采集信息(包括显示时间、显示时长等)至数据库中。
在对Fragement类对应的子页面的显示信息的采集时,可以在调用onResume方法、onPause方法、onHiddenChanged方法以及setUserVisibleHint方法时,基于预先插入的第一方法进行页面显示信息的采集。
例如,如图2所示,在目标应用程序被触发时,“首页”子页面对应的目标类的onResume方法会被调用,可以通过基于与该目标方法对应的第一方法(即应用打包阶段插入的字节码,如可以为从基类继承得到的onFragementResume方法),调用SDK中的getParentFragment,以获取该目标类的第一父类(由嵌套关系确定的父类),如果不存在第一父类则执行步骤A1,如果存在第一父类则执行步骤A2,该第一方法可以是从类继承关系确定的基类中继承的方法。
在步骤A1中,通过第一方法调用当前目标类的getUserVisibleHint和isHidden方法,以判断当前目标类对应的子页面实际是否显示,如果为显示,则存储该子页面的显示时间内存中,如果为否则不做处理。
在步骤A2中,通过第一方法调用当前目标类和第一父类父的getUserVisibleHint和isHidden方法,判断目标类是否显示,如果为显示,则存储该子页面的显示时间内存中,如果为否则不做处理。
此外,在通过滑动方式切换页面中的子页面的场景中,可以通过监听setUserVisibleHint方法进行显示信息的采集,具体如当目标类的setUserVisibleHint方法被调用时,可以调用对应的setFragmentUserVisibleHint方法(即第一方法),获取该目标类的第一父类(由嵌套关系确定的父类),如果不存在第一父类则执行步骤B1,如果存在第一父类则执行步骤B2,该第一方法可以是从类继承关系确定的基类中继承的方法。
在步骤B1中,通过第一方法调用当前目标类的isResumed和isHidden方法,以判断当前目标类是否为就绪状态,如果为是,则执行步骤B11~B12,如果为否则不做处理。
在步骤B11中,判断传入isVisibleToUser的参数是否为显示(即是否为true),如果为显示,则存储子页面的显示时间至内存中,如果为隐藏,则基于该子页面的显示时间和隐藏时间,确定该子页面的显示时长,并将显示时间和显示时长保存至数据库中。
在步骤B12中,将目标类的目标方法或显示信息传递至目标类的子类(基于嵌套关系确定的子类)。
在步骤B2中,通过调用目标类的isHidden和isResumed方法,以及当前目标类的第一父类的getUserVisibleHint、isHidden、isResumed方法,判断目标类对应的子页面是否为否为就绪状态,如果为是,则可以执行上述步骤B11~B12,如果为否则不做处理。
此外,在通过点击方式切换页面中的子页面的场景中,可以通过监听onHiddenChanged方法进行显示信息的采集,目标类的onHiddenChanged方法被调用时,可以调用SDK中的onFragmentHiddenChanged方法(即与onHiddenChanged方法对应的第一方法),获取目标类的hidden参数(系统入参,布尔类型,表示当前目标类对应的子页面是否被隐藏),可以先将hidden取非,并记为isVisibleToUser变量,再调用getParentFragment方法获取该目标类的第一父类(由嵌套关系确定的父类),判断父Fragment是否存在,如果不存在第一父类则执行上述步骤B1,如果存在第一父类则执行上述步骤B2。
在页面隐藏场景中,可以通过监听onPause方法进行显示信息的采集,具体如当目标类的onPause方法被调用时,可以通过第一方法判断是否存在第一父类,如果不存在则执行步骤C1,如果存在则执行步骤C2。
在步骤C1中,通过第一方法调用目标类的getUserVisibleHint和isHidden方法,判断目标类对应的子页面是否隐藏,如果为是,则根据目标类的标识,获取目标类对应的子页面的显示时间,再根据显示时间和隐藏时间,计算该子页面的显示时长,并将目标类的标识、显示时间、显示时长等显示信息保存至数据库中,再将目标方法或显示信息传递给目标类的子类(由嵌套关系确定的子类),如果为否则不做处理。
在步骤C2中,通过第一方法调用目标类和第一父类的的getUserVisibleHint、isHidden、isResumed方法,以判断目标类对应的子页面是否隐藏,如果为是,则根据目标类的标识,获取目标类对应的子页面的显示时间,再根据显示时间和隐藏时间,计算该子页面的显示时长,并将目标类的标识、显示时间、显示时长等显示信息保存至数据库中,再将目标方法或显示信息传递给目标类的子类(由嵌套关系确定的子类),如果为否则不做处理。
本说明书实施例提供一种信息采集方法,在目标应用程序运行的过程中,若检测到页面中目标类对应的目标方法被调用,则获取目标类对应的子页面的显示状态,页面的结构包括由多个子页面构成的层级结构,目标方法用于显示或隐藏目标类对应的子页面,若目标类对应的子页面的显示状态与目标方法对应的状态相匹配,则获取目标类对应的子页面的显示信息,基于目标类对应的子页面的显示信息,确定页面的层级页面显示信息,这样,可以通过目标类对应的子页面的实际显示状态(即子页面的显示状态是否与目标方法对应的状态相匹配),确定该子页面的显示信息,可以避免在通过子页面在页面中的层级关系获取子页面的显示信息时,存在的由于删除或新增某个子页面导致子页面在页面中的层级关系发生改变,以致无法及时准确的采集到子页面的显示信息的情况,可以在目标应用程序运行的过程中,及时准确的采集到各层级子页面对应的显示信息,即可以提高针对多层级页面的信息采集效率和采集准确性。
以上为本说明书实施例提供的信息采集方法,基于同样的思路,如图13所示,本说明书实施例还提供一种信息采集装置,用于提高针对多层级页面的显示信息的采集效率和采集准确性,该装置的具体实施方式可以参见信息采集方法的相关内容,为避免赘述,此处不再重复说明。
对应上述实施例提供的信息采集方法,基于相同的技术构思,本说明书实施例还提供了一种信息采集设备,该信息采集设备用于执行上述的信息采集方法,图14为实现本说明书各个实施例的一种信息采集设备的硬件结构示意图,图14所示的信息采集设备140包括但不限于:射频单元141、网络模块142、音频输出单元143、输入单元144、传感器145、用户输入单元146、接口单元147、存储器148、处理器149、以及电源1410等部件。本领域技术人员可以理解,图14中示出的信息采集设备结构并不构成对信息采集设备的限定,信息采集设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
其中,处理器149,用于若检测到目标应用程序的页面中的目标类对应的目标方法被调用,则获取所述目标类对应的子页面的显示状态,所述目标方法用于显示或隐藏所述目标类对应的子页面;
处理器149,用于若所述目标类对应的子页面的显示状态与所述目标方法对应的状态相匹配,则获取所述目标类对应的子页面的显示信息;
处理器149,还用于基于所述目标类对应的子页面的显示信息,确定所述页面的层级结构对应的层级页面显示信息。
本说明书实施例中,处理器149,还用于:
若所述目标类对应的子页面的显示状态为隐藏,则获取所述目标类对应的子页面的隐藏时间;
基于所述目标类的标识,获取所述目标类对应的子页面的显示时间;
基于所述显示时间和所述隐藏时间,确定所述目标类的显示时长。
本说明书实施例中,处理器149,还用于:
获取所述目标类在所述页面对应的类中的嵌套关系;
基于所述嵌套关系,确定所述目标类对应的子页面在所述页面的层级结构中的层级信息;
将所述目标类对应的子页面在所述页面中的层级信息,确定为所述目标类的标识。
本说明书实施例中,处理器149,还用于:
基于所述目标类对应的子页面在所述页面的层级结构中的层级信息,以及所述目标类对应的子页面的显示信息,确定所述页面的层级结构对应的层级页面显示信息。
本说明书实施例中,处理器149,还用于:
获取所述目标类在所述页面对应的类中的嵌套关系,并基于所述嵌套关系,确定所述页面对应的类中是否存在所述目标类的第一父类;
若所述页面对应的类中存在所述目标类的第一父类,则获取所述目标类的第一父类对应的页面的显示状态;
若所述目标类的第一父类对应的页面的显示状态与所述目标方法对应的状态相匹配,且所述目标类对应的子页面的显示状态与所述目标方法对应的状态相匹配,则获取所述目标类对应的子页面的显示信息。
本说明书实施例中,处理器149,还用于:
基于所述嵌套关系,确定所述目标类的子类;
若所述目标类的子类对应的目标方法未调用,则触发所述目标类的子类调用所述目标方法,或将所述目标类的显示信息确定为所述目标类的子类的显示信息。
本说明书实施例中,处理器149,还用于:
若检测到所述目标应用程序的页面中的目标类对应的目标方法被调用,则获取与所述目标类的目标方法对应的第一方法,所述第一方法为在所述目标应用程序的应用打包阶段插入的用于获取子页面的显示状态的方法;
通过所述第一方法,获取所述目标类对应的子页面的显示状态。
本说明书实施例中,所述第一方法为所述目标类从所述目标类的基类继承得到,所述目标类的基类为基于类继承关系确定的所述目标类的父类,处理器149,还用于:
获取所述目标应用程序的类继承关系;
基于所述类继承关系,确定第一类的直接父类是否为系统提供的类;
若所述第一类的直接父类为系统提供的类,则将所述第一类确定为基类;
若所述基类对应的方法中存在所述目标方法,则在所述基类的目标方法后插入所述第一方法。
本说明书实施例中的信息采集设备,在目标应用程序运行的过程中,若检测到目标应用程序的页面中的目标类对应的目标方法被调用,则获取目标类对应的子页面的显示状态,目标方法用于显示或隐藏目标类对应的子页面,若目标类对应的子页面的显示状态与目标方法对应的状态相匹配,则获取目标类对应的子页面的显示信息,基于目标类对应的子页面的显示信息,确定页面的层级结构对应的层级页面显示信息,这样,可以通过目标类对应的子页面的实际显示状态(即子页面的显示状态是否与目标方法对应的状态相匹配),确定该子页面的显示信息,可以避免在通过子页面在页面中的层级关系获取子页面的显示信息时,存在的由于删除或新增某个子页面导致子页面在页面中的层级关系发生改变,以致无法及时准确的采集到子页面的显示信息的情况,可以在目标应用程序运行的过程中,及时准确的采集到各层级子页面对应的显示信息,即可以提高针对多层级页面的信息采集效率和采集准确性。
需要说明的是,本说明书实施例提供的信息采集设备140能够实现上述信息采集方法实施例中信息采集设备实现的各个过程,为避免重复,这里不再赘述。
应理解的是,本说明书实施例中,射频单元141可用于收发信息或通话过程中,信号的接收和发送,具体的,将来自上游设备的下行数据接收后,给处理器149处理;另外,将上行的数据发送给上游设备。通常,射频单元141包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器、双工器等。此外,射频单元141还可以通过无线通信系统与网络和其他设备通信。
信息采集设备通过网络模块142为用户提供了无线的宽带互联网访问,如帮助用户收发电子邮件、浏览网页和访问流式媒体等。
音频输出单元143可以将射频单元141或网络模块142接收的或者在存储器149中存储的音频数据转换成音频信号并且输出为声音。而且,音频输出单元143还可以提供与移动终端140执行的特定功能相关的音频输出(例如,呼叫信号接收声音、消息接收声音等等)。音频输出单元143包括扬声器、蜂鸣器以及受话器等。
输入单元144用于接收音频或视频信号。输入单元144可以包括图形处理器(Graphics Processing Unit,GPU)1441和麦克风1442,图形处理器1441对在视频捕获模式或图像捕获模式中由图像捕获装置(如摄像头)获得的静态图片或视频的图像数据进行处理。处理后的图像帧可以显示在显示单元146上。经图形处理器1441处理后的图像帧可以存储在存储器149(或其它存储介质)中或者经由射频单元141或网络模块142进行发送。麦克风1442可以接收声音,并且能够将这样的声音处理为音频数据。处理后的音频数据可以在电话通话模式的情况下转换为可经由射频单元141发送到移动通信基站的格式输出。
接口单元147为外部装置与信息采集设备140连接的接口。例如,外部装置可以包括有线或无线头戴式耳机端口、外部电源(或电池充电器)端口、有线或无线数据端口、存储卡端口、用于连接具有识别模块的装置的端口、音频输入/输出(I/O)端口、视频I/O端口、耳机端口等等。接口单元147可以用于接收来自外部装置的输入(例如,数据信息、电力等等)并且将接收到的输入传输到移动终端140内的一个或多个元件或者可以用于在移动终端140和外部装置之间传输数据。
存储器148可用于存储软件程序以及各种数据。存储器148可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器148可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
处理器149是移动终端的控制中心,利用各种接口和线路连接整个移动终端的各个部分,通过运行或执行存储在存储器148内的软件程序和/或模块,以及调用存储在存储器148内的数据,执行信息采集设备的各种功能和处理数据,从而对信息采集设备进行整体监控。处理器149可包括一个或多个处理单元;优选的,处理器149可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器149中。
信息采集设备140还可以包括给各个部件供电的电源1410(比如电池),优选的,电源1410可以通过电源管理系统与处理器149逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
另外,信息采集设备140包括一些未示出的功能模块,在此不再赘述。
优选的,本说明书实施例还提供一种信息采集设备,包括处理器149,存储器148,存储在存储器148上并可在所述处理器149上运行的计算机程序,该计算机程序被处理器149执行时实现上述信息采集方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
进一步地,基于上述图1到图12所示的方法,本说明书一个或多个实施例还提供了一种存储介质,用于存储计算机可执行指令信息,一种具体的实施例中,该存储介质可以为U盘、光盘、硬盘等,该存储介质存储的计算机可执行指令信息在被处理器执行时,能实现以下流程:
若检测到目标应用程序的页面中的目标类对应的目标方法被调用,则获取所述目标类对应的子页面的显示状态,所述目标方法用于显示或隐藏所述目标类对应的子页面;
若所述目标类对应的子页面的显示状态与所述目标方法对应的状态相匹配,则获取所述目标类对应的子页面的显示信息;
基于所述目标类对应的子页面的显示信息,确定所述页面的层级结构对应的层级页面显示信息。
本说明书实施例中,若所述目标类对应的子页面的显示状态为隐藏,则获取所述目标类对应的子页面的隐藏时间;
基于所述目标类的标识,获取所述目标类对应的子页面的显示时间;
所述获取所述目标类对应的子页面的显示时间之后,所述方法还包括:
基于所述显示时间和所述隐藏时间,确定所述目标类的显示时长。
本说明书实施例中,在所述获取所述目标类对应的子页面的显示信息之前,还包括:
获取所述目标类在所述页面对应的类中的嵌套关系;
基于所述嵌套关系,确定所述目标类对应的子页面在所述页面的层级结构中的层级信息;
将所述目标类对应的子页面在所述页面中的层级信息,确定为所述目标类的标识。
本说明书实施例中,所述基于所述目标类对应的子页面的显示信息,确定所述页面的层级结构对应的层级页面显示信息,包括:
基于所述目标类对应的子页面在所述页面的层级结构中的层级信息,以及所述目标类对应的子页面的显示信息,确定所述页面的层级结构对应的层级页面显示信息。
本说明书实施例中,所述若所述目标类对应的子页面的显示状态与所述目标方法对应的状态相匹配,则获取所述目标类对应的子页面的显示信息,包括:
获取所述目标类在所述页面对应的类中的嵌套关系,并基于所述嵌套关系,确定所述页面对应的类中是否存在所述目标类的第一父类;
若所述页面对应的类中存在所述目标类的第一父类,则获取所述目标类的第一父类对应的页面的显示状态;
若所述目标类的第一父类对应的页面的显示状态与所述目标方法对应的状态相匹配,且所述目标类对应的子页面的显示状态与所述目标方法对应的状态相匹配,则获取所述目标类对应的子页面的显示信息。
本说明书实施例中,所述若所述目标类对应的子页面的显示状态与所述目标方法对应的状态相匹配,则获取所述目标类对应的子页面的显示信息之后,所述方法还包括:
基于所述嵌套关系,确定所述目标类的子类;
若所述目标类的子类对应的目标方法未调用,则触发所述目标类的子类调用所述目标方法,或将所述目标类的显示信息确定为所述目标类的子类的显示信息。
本说明书实施例中,所述若检测到目标应用程序的页面中的目标类对应的目标方法被调用,则获取所述目标类对应的子页面的显示状态,包括:
若检测到所述目标应用程序的页面中的目标类对应的目标方法被调用,则获取与所述目标类的目标方法对应的第一方法,所述第一方法为在所述目标应用程序的应用打包阶段插入的用于获取子页面的显示状态的方法;
通过所述第一方法,获取所述目标类对应的子页面的显示状态。
本说明书实施例中,所述第一方法为所述目标类从所述目标类的基类继承得到,所述目标类的基类为基于类继承关系确定的所述目标类的父类,所述在目标应用程序运行之前,所述所述第一方法为在所述目标应用程序的应用打包阶段插入的,包括:
获取所述目标应用程序的类继承关系;
基于所述类继承关系,确定第一类的直接父类是否为系统提供的类;
若所述第一类的直接父类为系统提供的类,则将所述第一类确定为基类;
若所述基类对应的方法中存在所述目标方法,则在所述基类的目标方法后插入所述第一方法。
本说明书实施例提供一种存储介质,在目标应用程序运行的过程中,若检测到目标应用程序的页面中的目标类对应的目标方法被调用,则获取目标类对应的子页面的显示状态,目标方法用于显示或隐藏目标类对应的子页面,若目标类对应的子页面的显示状态与目标方法对应的状态相匹配,则获取目标类对应的子页面的显示信息,基于目标类对应的子页面的显示信息,确定页面的层级结构对应的层级页面显示信息,这样,可以通过目标类对应的子页面的实际显示状态(即子页面的显示状态是否与目标方法对应的状态相匹配),确定该子页面的显示信息,可以避免在通过子页面在页面中的层级关系获取子页面的显示信息时,存在的由于删除或新增某个子页面导致子页面在页面中的层级关系发生改变,以致无法及时准确的采集到子页面的显示信息的情况,可以在目标应用程序运行的过程中,及时准确的采集到各层级子页面对应的显示信息,即可以提高针对多层级页面的信息采集效率和采集准确性。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书一个或多个实施例时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本说明书的实施例可提供为方法、系统、或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书的实施例是参照根据本说明书实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程欺诈案例的串并设备的处理器以产生一个机器,使得通过计算机或其他可编程欺诈案例的串并设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程欺诈案例的串并设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程欺诈案例的串并设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本说明书的实施例而已,并不用于限制本说明书。对于本领域技术人员来说,本说明书可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书的权利要求范围之内。

Claims (11)

1.一种信息采集方法,所述方法包括:
若检测到目标应用程序的页面中的目标类对应的目标方法被调用,则获取所述目标类对应的子页面的显示状态,所述目标方法用于显示或隐藏所述目标类对应的子页面;
若所述目标类对应的子页面的显示状态与所述目标方法对应的状态相匹配,则获取所述目标类对应的子页面的显示信息;
基于所述目标类对应的子页面的显示信息,确定所述页面的层级结构对应的层级页面显示信息。
2.根据权利要求1所述的方法,所述目标方法用于隐藏所述目标类对应的子页面,所述若所述目标类对应的子页面的显示状态与所述目标方法对应的状态相匹配,则获取所述目标类对应的子页面的显示信息,包括:
若所述目标类对应的子页面的显示状态为隐藏,则获取所述目标类对应的子页面的隐藏时间;
基于所述目标类的标识,获取所述目标类对应的子页面的显示时间;
所述获取所述目标类对应的子页面的显示时间之后,所述方法还包括:
基于所述显示时间和所述隐藏时间,确定所述目标类的显示时长。
3.根据权利要求2所述的方法,在所述获取所述目标类对应的子页面的显示信息之前,还包括:
获取所述目标类在所述页面对应的类中的嵌套关系;
基于所述嵌套关系,确定所述目标类对应的子页面在所述页面的层级结构中的层级信息;
将所述目标类对应的子页面在所述页面中的层级信息,确定为所述目标类的标识。
4.根据权利要求3所述的方法,所述基于所述目标类对应的子页面的显示信息,确定所述页面的层级结构对应的层级页面显示信息,包括:
基于所述目标类对应的子页面在所述页面的层级结构中的层级信息,以及所述目标类对应的子页面的显示信息,确定所述页面的层级结构对应的层级页面显示信息。
5.根据权利要求1所述的方法,所述若所述目标类对应的子页面的显示状态与所述目标方法对应的状态相匹配,则获取所述目标类对应的子页面的显示信息,包括:
获取所述目标类在所述页面对应的类中的嵌套关系,并基于所述嵌套关系,确定所述页面对应的类中是否存在所述目标类的第一父类;
若所述页面对应的类中存在所述目标类的第一父类,则获取所述目标类的第一父类对应的页面的显示状态;
若所述目标类的第一父类对应的页面的显示状态与所述目标方法对应的状态相匹配,且所述目标类对应的子页面的显示状态与所述目标方法对应的状态相匹配,则获取所述目标类对应的子页面的显示信息。
6.根据权利要求3所述的方法,所述若所述目标类对应的子页面的显示状态与所述目标方法对应的状态相匹配,则获取所述目标类对应的子页面的显示信息之后,所述方法还包括:
基于所述嵌套关系,确定所述目标类的子类;
若所述目标类的子类对应的目标方法未调用,则触发所述目标类的子类调用所述目标方法,或将所述目标类的显示信息确定为所述目标类的子类的显示信息。
7.根据权利要求1所述的方法,所述若检测到目标应用程序的页面中的目标类对应的目标方法被调用,则获取所述目标类对应的子页面的显示状态,包括:
若检测到所述目标应用程序的页面中的目标类对应的目标方法被调用,则获取与所述目标类的目标方法对应的第一方法,所述第一方法为在所述目标应用程序的应用打包阶段插入的用于获取子页面的显示状态的方法;
通过所述第一方法,获取所述目标类对应的子页面的显示状态。
8.根据权利要求7所述的方法,所述第一方法为所述目标类从所述目标类的基类继承得到,所述目标类的基类为基于类继承关系确定的所述目标类的父类,所述在目标应用程序运行之前,所述所述第一方法为在所述目标应用程序的应用打包阶段插入的,包括:
获取所述目标应用程序的类继承关系;
基于所述类继承关系,确定第一类的直接父类是否为系统提供的类;
若所述第一类的直接父类为系统提供的类,则将所述第一类确定为基类;
若所述基类对应的方法中存在所述目标方法,则在所述基类的目标方法后插入所述第一方法。
9.一种信息采集装置,所述装置包括:
状态获取模块,被配置为若检测到目标应用程序的页面中的目标类对应的目标方法被调用,则获取所述目标类对应的子页面的显示状态,所述目标方法用于显示或隐藏所述目标类对应的子页面;
信息获取模块,被配置为若所述目标类对应的子页面的显示状态与所述目标方法对应的状态相匹配,则获取所述目标类对应的子页面的显示信息;
信息确定模块,被配置为基于所述目标类对应的子页面的显示信息,确定所述页面的层级结构对应的层级页面显示信息。
10.一种信息采集设备,所述信息采集设备包括:
处理器;以及
被配置为存储计算机可执行指令的存储器,所述计算机可执行指令在被执行时使所述处理器执行如权利要求1-8任一项所述的信息采集方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储计算机可执行指令,所述计算机可执行指令在被处理器执行时实现如权利要求1-8任一项所述的信息采集方法。
CN202210284225.9A 2022-03-22 2022-03-22 一种信息采集方法、装置及设备 Pending CN114637680A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210284225.9A CN114637680A (zh) 2022-03-22 2022-03-22 一种信息采集方法、装置及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210284225.9A CN114637680A (zh) 2022-03-22 2022-03-22 一种信息采集方法、装置及设备

Publications (1)

Publication Number Publication Date
CN114637680A true CN114637680A (zh) 2022-06-17

Family

ID=81949359

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210284225.9A Pending CN114637680A (zh) 2022-03-22 2022-03-22 一种信息采集方法、装置及设备

Country Status (1)

Country Link
CN (1) CN114637680A (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160202960A1 (en) * 2015-01-14 2016-07-14 Dynatrace Llc Method And System For Automated, Static Instrumentation For Applications Designed For Execution In Environments With Restricted Resources, Like Mobile Devices Or TV Set Top Boxes
CN108536589A (zh) * 2018-03-26 2018-09-14 广州小鹏汽车科技有限公司 一种应用程序埋点方法及系统
CN109992454A (zh) * 2017-12-31 2019-07-09 中国移动通信集团江西有限公司 故障定位的方法、装置和存储介质
CN110647274A (zh) * 2019-08-15 2020-01-03 华为技术有限公司 一种界面显示方法及设备
CN111858282A (zh) * 2020-07-23 2020-10-30 平安普惠企业管理有限公司 页面轨迹记录方法及相关设备
CN112579456A (zh) * 2020-12-24 2021-03-30 安徽航天信息科技有限公司 一种Web自动化测试方法及装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160202960A1 (en) * 2015-01-14 2016-07-14 Dynatrace Llc Method And System For Automated, Static Instrumentation For Applications Designed For Execution In Environments With Restricted Resources, Like Mobile Devices Or TV Set Top Boxes
CN109992454A (zh) * 2017-12-31 2019-07-09 中国移动通信集团江西有限公司 故障定位的方法、装置和存储介质
CN108536589A (zh) * 2018-03-26 2018-09-14 广州小鹏汽车科技有限公司 一种应用程序埋点方法及系统
CN110647274A (zh) * 2019-08-15 2020-01-03 华为技术有限公司 一种界面显示方法及设备
CN111858282A (zh) * 2020-07-23 2020-10-30 平安普惠企业管理有限公司 页面轨迹记录方法及相关设备
CN112579456A (zh) * 2020-12-24 2021-03-30 安徽航天信息科技有限公司 一种Web自动化测试方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
WOODWU: "Fragment时长统计那些事", pages 1 - 6, Retrieved from the Internet <URL:https://www.cnblogs.com/WoodJim/p/13656199.html> *
欧阳金彬: "基于数据流分析的Android应用隐私泄露检测研究", 中国优秀硕士学位论文全文数据库 信息科技辑, no. 9, 15 September 2017 (2017-09-15), pages 138 - 30 *

Similar Documents

Publication Publication Date Title
US10481964B2 (en) Monitoring activity of software development kits using stack trace analysis
CN110502222B (zh) 外发依赖内部基础库的aar方法、装置、介质和设备
CN105718289B (zh) 一种组件关系建立方法及其设备
CN105404585A (zh) 获取代码覆盖率的方法及装置
CN107609004B (zh) 应用程序埋点方法和装置、计算机设备和存储介质
CN111399840B (zh) 一种模块开发方法及装置
CN103177210A (zh) 一种在Android中植入动态污点分析模块的方法
CN110928548B (zh) 一种数据处理方法以及设备
CN105094878B (zh) 一种集成系统库文件的方法和装置
CN113168332B (zh) 数据处理方法、装置以及移动终端
CN114238948A (zh) 一种应用程序检测方法、装置、电子设备及存储介质
CN116737130B (zh) 面向模态中间表示的编译方法、系统、设备和存储介质
CN104268472A (zh) 还原被第三方动态库修改函数地址的方法和装置
CN113704117A (zh) 一种算法测试系统、方法及装置
CN110457132B (zh) 一种功能对象的创建方法、装置和终端设备
CN107872363B (zh) 数据包丢失的处理方法、系统、可读存储介质及电子设备
CN108664389B (zh) 一种测试方法、装置及终端
CN111488144B (zh) 一种数据处理方法以及设备
CN110941443B (zh) 修改sdk中文件名的方法、装置及电子设备
CN112114814A (zh) 编译文件确定方法及装置、应用程序生成方法及装置
CN106484375B (zh) 一种指令块加载方法、软交换设备及系统
CN108920246B (zh) 表单草稿组件共享方法及装置、终端设备及可读存储介质
CN114637680A (zh) 一种信息采集方法、装置及设备
CN114358936A (zh) 一种基于微服务区块链的智能合约运行方法
CN113448585A (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