CN111190573A - 应用程序埋点方法、装置和电子设备 - Google Patents
应用程序埋点方法、装置和电子设备 Download PDFInfo
- Publication number
- CN111190573A CN111190573A CN201811352599.XA CN201811352599A CN111190573A CN 111190573 A CN111190573 A CN 111190573A CN 201811352599 A CN201811352599 A CN 201811352599A CN 111190573 A CN111190573 A CN 111190573A
- Authority
- CN
- China
- Prior art keywords
- code
- time
- application program
- instrumentation
- target
- 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
- 238000000034 method Methods 0.000 title claims abstract description 129
- 238000004806 packaging method and process Methods 0.000 claims abstract description 7
- 238000002347 injection Methods 0.000 claims description 15
- 239000007924 injection Substances 0.000 claims description 15
- 238000004590 computer program Methods 0.000 claims description 3
- 238000012545 processing Methods 0.000 claims description 2
- 230000002452 interceptive effect Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 6
- 230000006399 behavior Effects 0.000 description 5
- 238000009434 installation Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 230000000694 effects Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012544 monitoring process Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例公开了应用程序埋点方法、装置和电子设备。该方法的一具体实施方式包括:获取应用程序的class文件;确定所述应用程序的、待采集的性能指标,并确定采集所述性能指标对应的插桩代码;确定所述性能指标对应的所述应用程序的目标类;将所述插桩代码注入到所述目标类中,并将注入了插桩代码的class文件打包为安卓系统的可执行文件。实现了在查找到需要插桩的位置后自动注入对应的插桩代码,无需人工埋点,可以提高埋点的效率。
Description
技术领域
本发明涉及互联网技术领域,尤其涉及一种应用程序埋点方法、装置和电子设备。
背景技术
随着移动互联网技术的发展,我国的移动互联网用户已达到近10亿,在这个大数据时代,如何提高产品的用户活跃度、增加用户量,从而提升品牌知名度已经成为各大互联网APP厂商的普遍关注的问题,而通过收集用户行为,进而实现产品的精准化推荐无疑是一种有效的营销手段。
目前,为收集APP运行性能以及获取用户行为数据,APP厂商采用的一种方式是在APP源代码中设置埋点,当APP运行时,基于埋点获取APP运行参数来确定APP的运行性能。当用户基于APP进行各种操作,如打开某个页面或选择页面中的某个选项时,埋点就会捕获用户的这些行为数据并通过APP中集成的软件开发工具包SDK(Software Development Kit)上报至相应的服务器,从而实现用户行为的统计。
然而,目前开发人员在APP包中布置埋点时通常是手动埋点,即基于业务统计需求在APP包的不同位置加入不同的埋点代码,而由于实际埋点众多,工程量极大,手动埋点的方式不仅效率低下而且很容易出现错误,在后续代码维护时,开发人员也需要基于不同的代码位置进行埋点代码修改,操作十分繁琐,因此手动埋点的方式已经不能满足开发人员的开发需求。
发明内容
本发明实施例提供了一种应用程序埋点方法、装置和电子设备,实现了在查找到需要插桩的位置后自动注入对应的插桩代码,无需人工埋点,提高了埋点的效率。
第一方面,本发明实施例提供了一种应用程序埋点方法,包括:获取应用程序的class文件;确定所述应用程序的、待采集的性能指标,并确定采集所述性能指标对应的插桩代码;确定所述性能指标对应的目标类,并确定所述目标类在所述class文件中的位置;基于所述位置将所述插桩代码注入到所述目标类中,并将注入了插桩代码的class文件打包为安卓系统的可执行文件。
可选地,所述目标类包括至少一个目标方法,所述插桩代码包括第一时间获取代码和第二时间获取代码;以及所述基于所述路径将所述插桩代码注入到所述目标类中,包括:将所述第一时间获取代码注入到目标方法的起始代码处,将所述第二时间获取代码注入到目标方法的代码结束处。
可选地,所述插桩代码包括获取点击事件记录的代码或获取页面进入事件的代码;以及所述基于所述路径将所述插桩代码注入到所述目标类中,包括:将所述插桩代码注入到包括点击事件和/或页面进入事件的目标类中。
可选地,所述插桩代码包括预设方法对应原始代码的替换代码,以及统计预设方法运行耗时的耗时统计代码;以及所述基于所述路径将所述插桩代码注入到所述目标类中,包括:将所述预设方法对应的原始代码替换为所述包括预设方法对应原始代码的替换代码,以及统计预设方法运行耗时的耗时统计代码的插桩代码。
可选地,所述性能指标包括:应用启动耗时、页面加载耗时、数据结构解析耗时、数据库查询耗时、点击事件记录、页面进入事件记录以及用户预先设定的监控指标。
第二方面,本发明实施例提供了一种应用程序埋点装置,包括:获取单元,配置用于获取应用程序的class文件;第一确定单元,配置用于确定所述应用程序的、待采集的性能指标,并确定采集所述性能指标对应的插桩代码;第二确定单元,配置用于确定所述性能指标对应的目标类;注入单元,配置用于将所述插桩代码注入到所述目标类中,并将注入了插桩代码的class文件打包为安卓系统的可执行文件。
可选地,所述目标类包括至少一个目标方法,所述插桩代码包括第一时间获取代码和第二时间获取代码;以及所述注入单元进一步配置用于:将所述第一时间获取代码注入到目标方法的起始代码处,将所述第二时间获取代码注入到目标方法的代码结束处。
可选地,所述插桩代码包括获取点击事件记录的代码或获取页面进入事件的代码;以及所述注入单元进一步配置用于:将所述插桩代码注入到包括点击事件和/或页面进入事件的目标类中。
可选地,所述插桩代码包括预设方法对应原始代码的替换代码,以及统计预设方法运行耗时的耗时统计代码;所述注入单元进一步配置用于:将所述预设方法对应的原始代码替换为所述包括预设方法对应原始代码的替换代码,以及统计预设方法运行耗时的耗时统计代码的插桩代码。
可选地,所述性能指标包括:应用启动耗时、页面加载耗时、数据结构解析耗时、数据库查询耗时、点击事件记录、页面进入事件记录以及用户预先设定的监控指标。
第三方面,本发明实施例提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现上述任意一种应用程序埋点方法的步骤。
第四方面,本发明实施例提供了一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现上述任意一种应用程序埋点方法的步骤。
本发明实施例提供的应用程序埋点方法、装置和电子设备,通过首先获取应用程序的class文件,然后,确定应用程序的、待采集的性能指标,并确定采集性能指标对应的插桩代码,接着,确定所述性能指标对应的目标类,最后,将所述插桩代码注入到所述目标类中,并将注入了插桩代码的class文件打包为安卓系统的可执行文件。实现了在查找到需要插桩的位置后自动注入对应的插桩代码,无需人工埋点,可以实现高效埋点。当添加了上述插桩代码的可执行文件,运行终端设备上时,可以将所采集的性能指标参数信息发送给服务器,以使服务器对应用程序的性能进行分析,此外,还可以根据上述性能指标参数分析用户操作轨迹。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明的应用程序埋点方法的一个实施例的流程图;
图2是根据本发明的应用程序埋点方法的又一个实施例的流程图;
图3是根据本发明的应用程序埋点装置的一个实施例的结构示意图;
图4是本发明实施例可以应用于其中的示例性系统架构图;
图5是根据本发明实施例提供的电子设备的基本结构的示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解。应当将它们认为仅仅是示范性的。因此本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
请参考图1,图1其示出了根据本发明的应用程序埋点方法的一个实施例的流程。如图1所示该应用程序埋点方法,包括以下步骤:
步骤101,获取应用程序的class文件。
在本实施例中,上述应用程序可以是各种应用程序。上述应用程序可以运行于移动终端设备中。
通常,上述应用程序的源代码可以由一高级编程语言(例如Java程序)编写。应用程序的源代码需要进行编译。对应用程序的源代码进行编译后得到应用程序的.class文件。
对于安卓系统来说,将应用程序的.class文件并不能被安卓系统直接运行。需要将应用程序的.class文件转换成.dex文件之后,才可以被安卓系统运行。
在步骤101中,可以获取应用程序的.class文件。例如通过解析应用程序的classes.jar包来获取应用程序的.class文件。
步骤102,确定应用程序的、待采集的性能指标,并确定采集性能指标对应的插桩代码。
在本实施例中,上述待采集的性能指标可以是通用性能指标,也可以是用户自定义的性能指标。
在一些应用场景中,上述通用性能指标例如可以包括:应用程序启动耗时、应用程序的页面加载耗时、数据结构解析耗时、数据库查询耗时等。此外,通用性能指标还可以包括点击事件记录、页面进入事件记录。
这里的应用程序的启动耗时例如可以是从应用程序(Application)构造方法开始到启动一个交互组件(Activity)的窗口焦点变化方法(onWindowFocusChanged())开始所用的时间。这里的交互组件是应用组件,用户可与交互组件提供的屏幕进行交互,以执行信息浏览、发送电子邮件或查看地图等操作。以Android系统为例,可以将一个交互组件粗略的认为是安卓应用程序的一个页面。
需要说明的是,在通过运行包括使用本发明的方法注入了插桩代码的应用程序的可执行文件后,获取了多个性能指标参数之后,在确定应用程序的启动耗时和交互组件的执行耗时时,需要排除相关进程被提前拉起和交互组件被再次调用的场景。当应用程序的进程通过其他手段实现提前拉起时,应用程序的onCreate()方法被首先调用,随后一段时间却并无页面被拉起。用户通过点击图标等方式直接启动应用时,应用程序的onCreate()方法被调用完成后,随即会有启动交互组件被拉起,即启动交互组件的onCreate()方法被调用。
在实践中,可以通过统计正常启动交互组件(Activity)的onCreate()方法调用开始和应用程序的onCreate()方法调用结束之间的时间,来确定一个阈值。通过上述阈值来排除进程被提前拉起的场景。
应用程序的页面加载耗时,是指页面创建时的回调函数(onCreate())开始运行到页面对应的窗口焦点变化方法(onWindowFocusChanged())开始运行的时间。
这里,在确定页面加载耗时时,需要排除页面热启动的现象。这里的页面热启动是指页面不是从onCreate()开始启动的。
用户自定义的性能指标是指用户指定的应用程序的一个特定方法的执行耗时。
插桩代码是指用于实现插桩目的的执行代码。对于不同的插桩目的,插桩代码可以不相同。插桩代码可以是预先编辑好的执行代码。
步骤103,确定性能指标对应的、应用程序的目标类。
在本实施例中,对于步骤102中所确定的待采集的性能指标,可以通过各种方法确定性能指标对应的目标类。例如可以通过对应用程序的全局配置文件(Manifest.xml)进行解析,以得到需要采集性能指标的目标类。
在本实施例中,可以生成插桩配置文件。在插桩配置文件中,包括各类性能指标对应的插桩开关和待插桩的目标类。
通常目标类可以包括至少一个方法。可以从上至少一个方法中确定出目标方法。用户可以根据插桩开关来选择是否启动对目标类中的目标方法的插桩代码。可以有利于用户取消对不需要监控的目标类中的目标方法的插桩代码的运行。
步骤104,将插桩代码注入到目标类中,并将注入了插桩代码的class文件打包为安卓系统的可执行文件。
在本实施例中,可以遍历应用程序的.class文件,在.class文件中首先查找上述目标类。在找到目标类之后,可以将插桩代码注入到目标类的目标方法中。
此外,还可将注入了插桩代码的.class文件打包为安卓系统的可执行文件(例如.dex文件)。
在一些应用场景中,可以根据全局配置文件确定目标类在.class文件中的位置。根据所得到的目标类在.class文件中的位置,将插桩代码注入到目标类中。
本发明的上述实施例提供的方法通过首先获取应用程序的class文件,然后,确定应用程序的、待采集的性能指标,并确定采集性能指标对应的插桩代码,接着,确定所述性能指标对应的目标类,最后,基所述插桩代码注入到所述目标类中,并将注入了插桩代码的class文件打包为安卓系统的可执行文件。该方法查找到需要插桩的位置后可以自动注入对应的插桩代码,无需人工埋点,可以实现高效埋点。此外,当添加了上述插桩代码的可执行文件,运行终端设备上时,可以将所采集的性能指标参数信息发送给服务器,以使服务器对应用程序的性能进行分析,此外,还可以根据上述性能指标参数分析用户操作轨迹。
在一些实施方式中,上述插桩代码包括获取点击事件记录的代码和/或获取页面进入事件的代码。上述步骤104的将插桩代码注入到目标类中,可以包括:将插桩代码注入到包括点击事件和/或页面进入事件的目标类中。
具体地,可以对.class文件进行遍历,找出所有继承自Activity、Fragment的类,或实现了点击操作接口(View.onClickListener())的类,这些类即为包括了操作事件(例如点击、页面切换、选择等事件)的类。然后将目标类的标识与这些类的标识进行匹配,对于匹配成功的类,在这些类的相应方法中插入插桩代码,来跟踪操作事件。实践中,对于需要插桩的点击事件,需要查找到与该点击事件对应的View.OnClickListener接口代码,在其中的onClick(View view)方法代码中注入插桩代码。在这些实施例中,可以详细追踪到客户端的使用情况,包括页面切换和页面停留时长等,有利于分析用户的操作轨迹。进一步地,在应用程序崩溃时,可以根据上述用户的操作轨迹,还原操作场景,对应用程序的异常代码修复提供支持。
在一些实施方式中,插桩代码包括预设方法对应原始代码的替换代码,以及统计预设方法运行耗时的耗时统计代码;以及步骤104的将所述插桩代码注入到所述目标类中,可以包括:将所述预设方法对应的目标类中的原始代码替换为所述包括预设方法对应原始代码的替换代码,以及统计预设方法运行耗时的耗时统计代码的插桩代码。
在这些实施方式中,上述预设方法可以为JSONObj ect的和SQlite等需要监控的方法。上述插桩代码可以包括上述预设方法对应的原始代码的替换代码以及统计预设方法运行耗时的耗时统计代码。上述将将所述预设方法对应的原始代码替换为所述包括预设方法对应原始代码的替换代码,以及统计预设方法运行耗时的耗时统计代码的插桩代码。在实践中,可以为将对上述预设方法的调用替换为对上述插桩代码的调用。
在这些实施方式中,对于上述预设方法,可以实现精确的耗时统计。
进一步参考图2,其示出了应用程序埋点方法的又一个实施例的流程图。如图2所示,该应用程序埋点方法的流程,包括以下步骤:
步骤201,获取应用程序的class文件。
步骤201与图1所示实施例中的步骤101相同,此处不赘述。
步骤202,确定应用程序的、待采集的性能指标,并确定采集性能指标对应的插桩代码,插桩代码包括第一时间获取代码和第二时间获取代码。
在本实施例中,上述性能指标可以包括应用启动耗时、页面加载耗时、数据结构解析耗时、数据库查询耗时,以及用户事先通过注解的方式指定的方法的执行耗时等。
在本实施例中,插桩代码可以包括第一时间获取代码和第二时间获取代码。这里的第一时间获取代码和第二时间获取代码可以相同。
第一时间获取代码用于获取目标类或者目标方法运行于一个节点处,所对应的具体时间。上述具体时间可以包括日期和时、分、秒等。
步骤203,确定性能指标对应的、应用程序的目标类,目标类包括至少一个目标方法。
步骤203与图1所示实施例中的步骤103相同,此处不赘述。
步骤204,将第一时间获取代码注入到目标方法的起始代码处,将第二时间获取代码注入到目标方法的代码结束处,并将注入了插桩代码的class文件打包为安卓系统的可执行文件。
通常目标类可以包括至少一个方法。可以从上至少一个方法中确定出目标方法。
在本实施例中,对于一个目标类的目标方法而言,可以将第一时间获取代码注入到该目标方法的起始代码处。例如可以将第一时间获取代码设置在该目标方法的第一行代码之前。可以将第二时间获取代码注入到该目标方法的代码结束处。例如可以将第二时间获取代码注入到该目标方法的最后一行代码之后。
这样,对于一个目标类,可获取该目标类的目标方法开始时间和结束时间。并根据上述开始时间和结束时间来确定目标类的执行耗时。
从图2中可以看出,与图1对应的实施例相比,本实施例中的应用程序埋点方法的流程200突出了为插桩代码包括第一时间获取代码和第二时间获取代码,以及将第一时间获取代码注入到目标类的目标方法代码结束处,因此,图2所示实施例通过第一时间获取代码和第二时间获取代码所分别获取的时间来确定目标类的目标方法的执行耗时。可以为分析应用程序代码的可优化点以及对应用程序的性能优化提供数据支持。
进一步参考图3,作为对上述各图所示方法的实现,本发明提供了一种应用程序埋点装置的一个实施例,该装置实施例与图1所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
如图3所示,本实施例的应用程序埋点装置包括:获取单元301、第一确定单元302、第二确定单元303和注入单元304。其中,获取单元301,配置用于获取应用程序的class文件;第一确定单元302,配置用于确定应用程序的、待采集的性能指标,并确定采集性能指标对应的插桩代码;第二确定单元303,配置用于确定所述性能指标对应的目标类;注入单元304,配置用于将所述插桩代码注入到所述目标类中,并将注入了插桩代码的class文件打包为安卓系统的可执行文件。
在本实施例中,应用程序埋点装置的获取单元301、第一确定单元302、第二确定单元303和注入单元304可分别参考图1对应实施例中步骤101、步骤102、步骤103和步骤104的相关说明,在此不再赘述。
在一些实施方式中,目标类包括至少一个目标方法,插桩代码包括第一时间获取代码和第二时间获取代码;以及注入单元304进一步配置用于:将第一时间获取代码注入到目标类的目标方法的起始代码处,将第二时间获取代码注入到目标类的目标方法的代码结束处。
在一些实施方式中,插桩代码包括获取点击事件记录的代码或获取页面进入事件的代码;以及注入单元304进一步配置用于:将插桩代码注入到包括点击事件和/或页面进入事件的目标类中。
在一些实施方式中,插桩代码包括预设方法对应原始代码的替换代码,以及统计预设方法运行耗时的耗时统计代码;注入单元304进一步配置用于:将预设方法对应的原始代码替换为包括预设方法对应原始代码的替换代码,以及统计预设方法运行耗时的耗时统计代码的插桩代码。
在一些实施方式中,上述性能指标包括:应用启动耗时、页面加载耗时、数据结构解析耗时、数据库查询耗时、点击事件记录、页面进入事件记录。
请参考图4,图4示出了可以应用本发明的应用程序埋点方法或应用程序埋点装置的实施例的示例性系统架构。
如图4所示,系统架构可以包括终端设备401、402、403,第一服务器404和第二服务器405和网络406、407。网络406用以在终端设备401、402、403和第一服务器404之间提供通信链路的介质。网络407用以在第一服务器404和第二服务器405之间提供通信链路的介质。网络406、407可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
终端设备401、402、403可以通过网络406与第一服务器405交互,以接收或发送消息等。终端设备401、402、403上可以安装有各种客户端应用,例如下载类应用、网页浏览器应用、购物类应用、搜索类应用等。
终端设备401、402、403可以是硬件,也可以是软件。当终端设备101、102、103为硬件时,可以是具有显示屏并且文件下载的各种电子设备,包括但不限于智能手机、平板电脑、电子书阅读器等等。当终端设备401、42、403为软件时,可以安装在上述所列举的电子设备中。其可以实现成多个软件或软件模块(例如用来提供分布式服务的软件或软件模块)。
终端设备401、402、403可以从第一服务器接收预设应用的安装包,并在本地运行安装包。
第一服务器404可以提供各种服务,通过网络将预设应用的.class文件发送给第二服务器405。并接收第二服务器405发送的经过第二服务器处理后的预设应用的安装包。
第二服务器405可以提高各种服务,例如从第一服务器获取预设应用的.class文件,对.class文件进行插桩,对插桩后的.classs文件进行打包,得到预设应用的插桩后的安装包。并将插桩后的安装包发送给第一服务器404。
需要说明的是,本发明实施例所提供的应用程序埋点方法一般由第二服务器405执行,相应地,应用程序埋点装置一般设置于第二服务器405中。
应该理解,图4中的终端设备、网络和第一服务器、第二服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图5,其示出了适于用来实现本发明实施例的电子设备的基本结构示意图。图5示出的电子设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图5所示,电子设备可以包括一个或多个处理器501,存储装置502。存储装置502用户存储一个或多个程序。存储装置502中的一个或多个程序可以被一个或多个处理器501执行。当一个或多个程序被一个或多个处理器执行时,使得一个或多个处理器可以实现本发明的方法中限定的上述功能。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括获取单元、第一确定单元、第二确定单元和注入单元。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,获取单元还可以被描述为“获取应用程序的class文件的单元”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。本发明的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该设备执行时,使得该设备:获取应用程序的class文件;确定所述应用程序的、待采集的性能指标,并确定采集所述性能指标对应的插桩代码;确定所述性能指标对应的所述应用程序的目标类;将所述插桩代码注入到所述目标类中,并将注入了插桩代码的class文件打包为安卓系统的可执行文件。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (12)
1.一种应用程序埋点方法,其特征在于,包括:
获取应用程序的class文件;
确定所述应用程序的、待采集的性能指标,并确定采集所述性能指标对应的插桩代码;
确定所述性能指标对应的所述应用程序的目标类;
将所述插桩代码注入到所述目标类中,并将注入了插桩代码的class文件打包为安卓系统的可执行文件。
2.根据权利要求1所述的方法,其特征在于,所述目标类包括至少一个目标方法,所述插桩代码包括第一时间获取代码和第二时间获取代码;以及
所述将所述插桩代码注入到所述目标类中,包括:
将所述第一时间获取代码注入到目标方法的代码起始处,将所述第二时间获取代码注入到目标方法的代码结束处。
3.根据权利要求1所述的方法,其特征在于,所述插桩代码包括获取点击事件记录的代码或获取页面进入事件的代码;以及
所述将所述插桩代码注入到所述目标类中,包括:
将所述插桩代码注入到包括点击事件和/或页面进入事件的目标类中。
4.根据权利要求1所述的方法,其特征在于,所述插桩代码包括预设方法对应原始代码的替换代码,以及统计预设方法运行耗时的耗时统计代码;以及
所述将所述插桩代码注入到所述目标类中,包括:
将所述预设方法对应的原始代码替换为所述包括预设方法对应原始代码的替换代码,以及统计预设方法运行耗时的耗时统计代码的插桩代码。
5.根据权利要求1所述的方法,其特征在于,所述性能指标包括:应用启动耗时、页面加载耗时、数据结构解析耗时、数据库查询耗时、点击事件记录、页面进入事件记录。
6.一种应用程序埋点装置,其特征在于,包括:
获取单元,配置用于获取应用程序的class文件;
第一确定单元,配置用于确定所述应用程序的、待采集的性能指标,并确定采集所述性能指标对应的插桩代码;
第二确定单元,配置用于确定所述性能指标对应的目标类;
注入单元,配置用于将所述插桩代码注入到所述目标类中,并将注入了插桩代码的class文件打包为安卓系统的可执行文件。
7.根据权利要求6所述的装置,其特征在于,所述目标类包括至少一个目标方法,所述插桩代码包括第一时间获取代码和第二时间获取代码;以及
所述注入单元进一步配置用于:
将所述第一时间获取代码注入到所述目标方法的起始代码处,将所述第二时间获取代码注入到所述目标方法的代码结束处。
8.根据权利要求6所述的装置,其特征在于,所述插桩代码包括获取点击事件记录的代码或获取页面进入事件的代码;以及
所述注入单元进一步配置用于:
将所述插桩代码注入到包括点击事件和/或页面进入事件的目标类中。
9.根据权利要求6所述的装置,其特征在于,所述插桩代码包括预设方法对应原始代码的替换代码,以及统计预设方法运行耗时的耗时统计代码;
所述注入单元进一步配置用于:
将所述预设方法对应的原始代码替换为所述包括预设方法对应原始代码的替换代码,以及统计预设方法运行耗时的耗时统计代码的插桩代码。
10.根据权利要求6所述的装置,其特征在于,所述性能指标包括以下至少之一:应用程序启动耗时、页面加载耗时、数据结构解析耗时、数据库查询耗时、点击事件记录、页面进入事件记录。
11.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-5中任一所述的方法。
12.一种计算机可读介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-5中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811352599.XA CN111190573A (zh) | 2018-11-14 | 2018-11-14 | 应用程序埋点方法、装置和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811352599.XA CN111190573A (zh) | 2018-11-14 | 2018-11-14 | 应用程序埋点方法、装置和电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111190573A true CN111190573A (zh) | 2020-05-22 |
Family
ID=70707289
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811352599.XA Pending CN111190573A (zh) | 2018-11-14 | 2018-11-14 | 应用程序埋点方法、装置和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111190573A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111460516A (zh) * | 2020-06-22 | 2020-07-28 | 腾讯科技(深圳)有限公司 | 基于非侵入式的数据保护方法、装置、终端及存储介质 |
CN112306501A (zh) * | 2020-11-30 | 2021-02-02 | 杭州网易云音乐科技有限公司 | 业务数据采集方法、装置、存储介质和计算设备 |
CN112394935A (zh) * | 2020-11-30 | 2021-02-23 | 上海二三四五网络科技有限公司 | 一种在页面中实现灰度设置的控制方法及装置 |
CN113126971A (zh) * | 2021-04-07 | 2021-07-16 | 粒子文化科技集团(杭州)股份有限公司 | 数据埋点的处理方法、装置、系统、电子装置和存储介质 |
CN115145585A (zh) * | 2022-07-19 | 2022-10-04 | 重庆长安汽车股份有限公司 | 一种数据采集方法、系统、电子设备及存储介质 |
US20230367687A1 (en) * | 2022-05-13 | 2023-11-16 | Cisco Technology, Inc. | Automated open telemetry instrumentation leveraging behavior learning |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040123279A1 (en) * | 2002-12-18 | 2004-06-24 | International Business Machines Corporation | Method and system for auto-instrumenting java applications through probe injection |
CN104484585A (zh) * | 2014-11-26 | 2015-04-01 | 北京奇虎科技有限公司 | 一种应用程序安装包的处理方法、装置及移动设备 |
CN106649063A (zh) * | 2016-11-22 | 2017-05-10 | 腾讯科技(深圳)有限公司 | 用于监测程序运行时耗时数据的方法及系统 |
CN107894889A (zh) * | 2017-10-16 | 2018-04-10 | 努比亚技术有限公司 | 埋点方法、设备及计算机可读存储介质 |
CN108415821A (zh) * | 2017-02-09 | 2018-08-17 | 腾讯科技(深圳)有限公司 | 测试报告的生成方法及装置 |
CN108536451A (zh) * | 2016-12-05 | 2018-09-14 | 腾讯科技(深圳)有限公司 | 应用程序的埋点注入方法和装置 |
-
2018
- 2018-11-14 CN CN201811352599.XA patent/CN111190573A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040123279A1 (en) * | 2002-12-18 | 2004-06-24 | International Business Machines Corporation | Method and system for auto-instrumenting java applications through probe injection |
CN104484585A (zh) * | 2014-11-26 | 2015-04-01 | 北京奇虎科技有限公司 | 一种应用程序安装包的处理方法、装置及移动设备 |
CN106649063A (zh) * | 2016-11-22 | 2017-05-10 | 腾讯科技(深圳)有限公司 | 用于监测程序运行时耗时数据的方法及系统 |
CN108536451A (zh) * | 2016-12-05 | 2018-09-14 | 腾讯科技(深圳)有限公司 | 应用程序的埋点注入方法和装置 |
CN108415821A (zh) * | 2017-02-09 | 2018-08-17 | 腾讯科技(深圳)有限公司 | 测试报告的生成方法及装置 |
CN107894889A (zh) * | 2017-10-16 | 2018-04-10 | 努比亚技术有限公司 | 埋点方法、设备及计算机可读存储介质 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111460516A (zh) * | 2020-06-22 | 2020-07-28 | 腾讯科技(深圳)有限公司 | 基于非侵入式的数据保护方法、装置、终端及存储介质 |
CN112306501A (zh) * | 2020-11-30 | 2021-02-02 | 杭州网易云音乐科技有限公司 | 业务数据采集方法、装置、存储介质和计算设备 |
CN112394935A (zh) * | 2020-11-30 | 2021-02-23 | 上海二三四五网络科技有限公司 | 一种在页面中实现灰度设置的控制方法及装置 |
CN112306501B (zh) * | 2020-11-30 | 2023-03-28 | 杭州网易云音乐科技有限公司 | 业务数据采集方法、装置、存储介质和计算设备 |
CN113126971A (zh) * | 2021-04-07 | 2021-07-16 | 粒子文化科技集团(杭州)股份有限公司 | 数据埋点的处理方法、装置、系统、电子装置和存储介质 |
US20230367687A1 (en) * | 2022-05-13 | 2023-11-16 | Cisco Technology, Inc. | Automated open telemetry instrumentation leveraging behavior learning |
US11971800B2 (en) * | 2022-05-13 | 2024-04-30 | Cisco Technology, Inc. | Automated open telemetry instrumentation leveraging behavior learning |
CN115145585A (zh) * | 2022-07-19 | 2022-10-04 | 重庆长安汽车股份有限公司 | 一种数据采集方法、系统、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111190573A (zh) | 应用程序埋点方法、装置和电子设备 | |
CN107562620B (zh) | 一种埋点自动设置方法和装置 | |
CN111124906B (zh) | 基于动态埋点的跟踪方法、编译方法、装置和电子设备 | |
Zhou et al. | API deprecation: a retrospective analysis and detection method for code examples on the web | |
US9356842B2 (en) | Method and system for browser based, non-intrusive measuring of end-user perceived performance of individual third party resource requests | |
US10481964B2 (en) | Monitoring activity of software development kits using stack trace analysis | |
CN104572327A (zh) | 一种浏览器崩溃的处理方法、装置和系统 | |
CN108536451B (zh) | 应用程序的埋点注入方法和装置 | |
CN113448854A (zh) | 一种回归测试方法和装置 | |
CN110297776B (zh) | 检测报告生成、接收方法、装置、设备及存储介质 | |
CN105260290A (zh) | 应用异常信息收集方法和装置 | |
CN111416857A (zh) | 客户端崩溃处理方法、装置、系统、设备和存储介质 | |
CN104182532A (zh) | 终端文件的清理方法、装置及终端 | |
KR101527745B1 (ko) | 객체 추출 기반의 어플리케이션 검증 방법 및 그 장치 | |
CN114428706B (zh) | 接口监控方法、装置、存储介质及电子设备 | |
CN116010244A (zh) | 自动化测试方法、装置、电子设备及存储介质 | |
CN115563423A (zh) | 数据采集方法、装置、计算机设备及存储介质 | |
CN114385457A (zh) | 应用程序数据采集方法、装置、设备及存储介质 | |
CN114416420A (zh) | 设备问题反馈方法和系统 | |
CN114089962A (zh) | 一种构件管理方法、设备及介质 | |
CN111414253A (zh) | 垃圾回收GC信息处理方法、Java虚拟机及计算机存储介质 | |
CN113626245B (zh) | 防止ios应用程序崩溃的方法 | |
CN110764784B (zh) | 一种识别三方so文件的方法、智能终端及存储介质 | |
CN113127056B (zh) | 一种信息处理方法、装置、设备及可读存储介质 | |
CN112051985B (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200522 |
|
RJ01 | Rejection of invention patent application after publication |