CN108536451B - 应用程序的埋点注入方法和装置 - Google Patents
应用程序的埋点注入方法和装置 Download PDFInfo
- Publication number
- CN108536451B CN108536451B CN201611105636.8A CN201611105636A CN108536451B CN 108536451 B CN108536451 B CN 108536451B CN 201611105636 A CN201611105636 A CN 201611105636A CN 108536451 B CN108536451 B CN 108536451B
- Authority
- CN
- China
- Prior art keywords
- file
- assembly file
- searching
- class
- package
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及互联网技术领域,提供一种对终端设备的应用程序的埋点注入方法和装置,该方法包括:对原安装包进行解压缩,获得原安装包的代码文件;对代码文件执行反编译操作,获得对代码文件进行反编译操作后转换而成的汇编文件;在汇编文件中查找与预先配置的参照条件对应的方法,参照条件包括方法名和方法签名;在汇编文件中与参照条件相同的方法的对应位置注入与方法对应的埋点代码;当汇编文件查找完毕后,将注入了埋点代码的汇编文件打包成安装包。该方法查找到需要埋点的位置后自动注入对应的埋点代码,无需人工埋点,效率高,并且基于对应用程序的原安装包进行解压和反编译实现,可用于任何一种应用程序的埋点注入,应用范围广。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种应用程序的埋点注入方法和装置。
背景技术
埋点是指在代码中的对应位置植入统计代码,以对系统性能和用户行为进行统计。一款应用软件无论是在测试阶段还是线上运行阶段,都需要埋点,以帮助产品开发和运维发现问题。
传统的埋点方式包括两种,一种是由开发人员手动埋点,成本高,花费时间长,并且无法保证埋点的质量和覆盖率,因此,这种埋点方式的效率低。另一种利用Java(计算机编程语言)字字节码埋点,通过修改Java的字节码(.class文件)而非Java源码(.java文件)达到修改Java运行逻辑的目的。但这种方法对开发环境有要求,一些厂商提供的工具只能支持部分开发环境,例如,Newrelic提供的工具只支持四种安卓的开发环境,这种埋点方式的适用性低。
发明内容
基于此,有必要提供一种效率高且适应性广的应用程序的埋点注入方法和装置。
为达到上述目的,本发明实施例采用以下技术方案:
一种应用程序的埋点注入方法,包括:
获取应用程序的原安装包;
对所述原安装包进行解压缩,获得所述原安装包的代码文件;
对所述代码文件执行反编译操作,获得对所述代码文件进行反编译操作后转换而成的汇编文件;
在所述汇编文件中查找与预先配置的参照条件对应的方法,所述参照条件包括方法名和方法签名;
在所述汇编文件中与所述参照条件相同的方法的对应位置注入与所述方法对应的埋点代码;
当所述汇编文件查找完毕后,将注入了埋点代码的汇编文件打包成安装包。
一种应用程序的埋点注入装置,包括:获取模块、解压缩模块、反编译操作模块、方法查找模块和注入模块;
所述获取模块,用于获取应用程序的原安装包;
所述解压缩模块,用于对所述原安装包进行解压缩,获得所述原安装包的代码文件;
反编译操作模块,用于对所述代码文件执行反编译操作,获得对所述代码文件进行反编译操作后转换而成的汇编文件;
所述方法查找模块,用于在所述汇编文件中查找与预先配置的参照条件对应的方法,所述参照条件包括方法名和方法签名;
所述注入模块,用于在所述汇编文件中与所述参照条件相同的方法的对应位置注入与所述方法对应的埋点代码;
所述反编译操作模块,还用于当所述汇编文件查找完毕后,将注入了埋点代码的汇编文件打包成安装包。
上述的应用程序的埋点注入方法,通过对应用程序的原安装包解压缩后得到代码文件,将代码文件反编译后得到转换后的汇编文件,在汇编文件中查找与预先配置的参照条件对应的方法,并将与方法对应的埋点代码注入到与参照条件相同的方法的对应位置实现埋点,通过将埋点之后的汇编文件再打包成安装包得到埋点之后的应用程序,能够提供给用户安装。用户安装后,埋点即可对应用程序性的对应的方法进行检测,例如对页面显示率计算,对事件执行次数进行统计。该方法查找到需要埋点的位置后自动注入对应的埋点代码,无需人工埋点,效率高,并且基于对应用程序的原安装包进行解压和反编译实现,可用于任何一种应用程序的埋点注入,应用范围广。
附图说明
图1为一个实施例的服务器的内部结构示意图;
图2为一个实施例的应用程序的埋点注入方法的流程图;
图3为另一个实施例的应用程序的埋点注入方法的流程图;
图4为一个实施例的应用程序的埋点注入装置的结构示意图;
图5为又一个实施例的应用程序的埋点注入装置的结构示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步的详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不限定本发明的保护范围。
本发明实施例通过对应用程序的原安装包解压缩后得到代码文件(.dex文件),将代码文件反编译后得到转换后的汇编文件,在汇编文件中查找与预先配置的参照条件对应的方法,并将与方法对应的埋点代码注入到与参照条件相同的方法的对应位置实现埋点,通过将埋点之后的汇编文件再打包成安装包得到埋点之后的应用程序,能够提供给用户终端安装。用户终端安装后,埋点即可对应用程序性的对应的方法进行检测,例如对页面显示率计算,对事件执行次数进行统计。本发明实施例查找到需要埋点的位置后自动注入对应的埋点代码,无需人工埋点,效率高,并且基于对应用程序的原安装包进行解压和反编译实现,可用于任何一种应用程序的埋点注入,应用范围广。
图1为一个实施例中服务器的内部结构示意图。如图1所示,服务器包括通过系统总线连接的处理器、存储介质、内存和网络接口。其中,服务器的存储介质存储有操作系统,还包括应用程序的埋点注入装置、解压缩工具和反编译工具,该应用程序的埋点注入装置用于实现应用程序的埋点注入方法,通过调用解压缩工具用于实现对应用程序的原安装包进行解压缩,调用反编译工具用于实现对代码文件进行反编译操作得到汇编文件,并调用反编译工具对注入埋点代码的汇编文件打包成安装包。该处理器用于提供计算和控制能力,支撑整个服务器的运行。服务器中的内存为存储介质中的应用程序的埋点注入装置运行提供环境,网络接口与用户终端进行网络通信,如接收用户终端向服务器发送的安装包下载请求,向用户终端发送注入了埋点代码的安装包。本领域技术人员可以理解,图1中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的终端的限定,具体的服务器可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
请参照图2,在一个实施例中,提供一种埋点注入方法,包括以下步骤:
S102:获取应用程序的原安装包。
以安卓系统为例,安卓系统识别并运行的文件格式为apk(Android Package,Android安装包)。
S104:对原安装包进行解压缩,获得原安装包的代码文件。
一个原安装包内包含被编译的代码文件(.dex文件)、资源文件(resources)、目录(assets)、证书(certificates)和全局配置文件(Manifest)等。原安装包可以是利用ZIP进行压缩的,解压得到的代码文件即为classes.dex文件,是应用程序的Dalvik字节码。字节码(Byte-code)是经过编译(例如JAVA语言编译)生成的包含执行程序、由一序列op(操作)代码/数据对组成的二进制文件。在具体的实施方式中,可调用解压缩工具对原安装包进行解压缩,例如,以原安装包是用ZIP进行压缩的为例,可以调用ZIP对原安装包进行解压缩。
S106:对代码文件执行反编译操作,获得对代码文件进行反编译操作后转换而成的汇编文件。
反编译是指对软件的可执行文件转换得到源程序的过程,反编译之后得到的文件为汇编文件,即未编译的按照一定程序设计规划书写的文本文件。例如,将dex文件反编译之后得到的汇编文件为Smali文件(安卓系统里的Java虚拟机(Dalvik)所使用的一种.dex格式文件的汇编器),将Java class文件反编译之后得到的汇编文件为java文件。反编译工具包括但不限于apktool(一种APK编译工具)。汇编文件按源码的包结构保存在各自的文件夹中。
S108:在汇编文件中查找与预先配置的参照条件对应的方法,参照条件包括方法名和方法签名。
在汇编文件中,包即文件夹,一个包下有多个类。方法是实现可以由对象或类执行的计算或操作的成员,对象是类的实施例化,因此,通过对对应的方法进行埋点,能够实现对方法执行的过程进行监测和统计,例如,例如页面的创建时间、打开时间、点击事件的统计等。
根据预先配置的参照条件遍历汇编文件的各包(文件夹)下的类(文件),查找满足参照条件的方法,即查找方法名和方法签名与预先配置的方法名和方法签名一致的方法。参照条件由根据需求由用户预先配置,参照条件包括方法名和方法签名,方法名和方法签名与需要进行埋点的方法对应,根据需要参照条件可以有多组方法名和方法签名。方法签名包括方法的参数和返回值。一个实施例中,安卓系统中触屏事件的方法名为onTouch,方法签名为(.android/view/view;Landroid/view/view/motionEvent;)Z。
S110:在汇编文件中与参照条件相同的方法的对应位置注入与方法对应的埋点代码。
埋点代码是指用于实现埋点目的的执行代码。应当理解的是,预先对应不同的方法配置对应的埋点代码。例如,对于页面进行埋点,以对其创建、打开和展示的时间进行记录以实现性能监测,对按钮进行埋点,以对其点击事件进行统计等。当查找到方法名和方法签名与预先配置的方法名和方法签名一致时,将与该方法对应的埋点代码注入到方法的对应位置。在一个具体的应用实施例中,可利用脚本在对应位置注入埋点代码。
S112:当汇编文件查找完毕后,将注入了埋点代码的汇编文件打包成安装包。
当汇编文件中的各个文件夹查找完毕后,将注入了埋点代码的汇编文件打包成安装包。具体的,可利用反编译工具将注入了埋点代码的汇编文件打包成安装包,再对安装包进行签名,得到可安装的应用程序的安装包。例如,将注入了埋点代码的Smali文件重新打包成apk包,并使用数字证书进行签名以发布应用程序。用户安装重新打包的安装包运行即可应用程序进行监测,例如对页面显示率计算,对事件执行次数进行统计。
上述的埋点注入方法,通过对应用程序的原安装包解压缩后得到代码文件(.dex文件),将代码文件反编译后得到转换后的汇编文件,在汇编文件中查找与预先配置的参照条件对应的方法,并将与方法对应的埋点代码注入的与参照条件相同的方法的对应位置实现埋点,通过将埋点之后的汇编文件再打包成安装包得到埋点之后的应用程序,能够提供给用户安装。用户安装后,埋点即可对应用程序性的对应的方法进行检测,例如对页面显示率计算,对事件执行次数进行统计。该方法查找到需要埋点的位置后自动注入对应的埋点代码,无需人工埋点,效率高,并且基于对应用程序的原安装包进行解压和反编译实现,可用于任何一种应用程序的埋点注入,应用范围广。
在另一个实施例中,如图3所示,在步骤S108之前,还包括步骤S107:在汇编文件中查找预先声明的类。
步骤S108包括:在汇编文件中查找到的类下查找与预先配置的参照条件对应的方法。
本实施例中,通过预先声明类,预先声明的类可以为特定的交互组件、服务组件或事件,在对汇编文件进行查找时,先查找到预先声明的类,再在汇编文件中查找到的类下查找与预先配置的参照条件对应的方法。一方面,通过预先声明的类,可实现只对特定的类下的方法进行埋点注入,更具有指向性。另一方面,先查找到预先声明的类,再在查找到的类下查找满足参照条件的方法,无需遍历汇编文件的每一个文件夹,能够提高埋点注入的效率。
在一个实施例中,预先声明的类包括应用程序的全局配置文件中声明的各交互组件的类。交互组件(Activity),是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作,以Android系统为例,可以粗略的认为是android应用程序的一个页面。
在该实施例中,步骤S104包括:对原安装包进行解压缩,获得原安装包的代码文件和全局配置文件。
应用程序的Activity,在全局配置文件声明,一个实施例中,全局配置文件为AndroidManifest.xml。
在步骤S107之前,还包括步骤:解析全局配置文件得到各交互组件的类名。
步骤S107包括:在汇编文件中查找与交互组件的类名相同的类。
根据在全局配置文件中解析的各交互组件(Activity)的类名,在汇编文件的中查找与Activity的类名相同的类。在一个具体的实施方式中,Smali文件中类名如下所示:
.class public Lcom/yirgalba/android_demo/fragment/MyTouchListener;
在该类下查找满足预先配置的参照条件的方法,即在该类的对应的文件下查找方法名和方法签名与预先配置的方法名和方法签名相同的方法。从而将该方法对应的埋点代码注入到方法的对应位置。
本实施例的埋点注入方法适用于交互组件(Activity)的埋点注入,Activity组件提供用户可与其提供的屏幕进行交互,通过全局配置文件中先确定应用程序所配置的Activity的类名,在汇编文件中查找与配置的Activity的类名相同的类,即应用程序所配置的Activity,再在该类下查找方法名和方法签名与预先配置的方法名和方法签名相同的方法。通过先根据Activity的类名在汇编文件中查找类,再在查找到的类下查找满足参照条件的方法,无需遍历汇编文件的每一个文件夹,能够提高Activity组件埋点注入的效率。该方法能够对全局配置文件所声明的交互组件(Activity)中满足参照条件的方法进行埋点注入。
在另一个实施例中,预先声明的类包括具有预先定义的父类类型的类。在该实施例中,步骤S107包括:在汇编文件中查找父类类型与预先定义的父类类型相同的类。
该方法适用于对于Fragment和Service类型,没有在全部配置文件中声明,通过预先定义父类类型,在汇编文件中查找具有预先定义的父类类型类,在该类下查找满足参照条件的方法。一个具体的实施方式中,汇编文件的父类类型为:.Super Ljava/Lang/Object。例如,Service必然继承自Android.app.Service类,用户可预先定义父类类型为Android.app.Service类,当匹配到具有父类类型为Android.app.Service的类时,则证明是用户定义的Service类,就可以对Service的公共方法进行监控。
在又一个实施例中,预先声明的类包括具有预先定义的继承的接口的类。在该实施例中,步骤S107包括:在汇编文件中查找继承的接口与预先定义的继承的接口相同的类。
该方法适用于对事件的埋点注入,例如,对于如Touch事件,通过判断其继承的接口,如果是Touch事件,必然其接口是:
Landroid.view.View$OnTouchListener
如果一个类的继承的接口与预先定这个接口完全相同,则证明是Touch事件类。
本实施例的埋点注入方法,通过预先定义父类类型或继承的接口的方式声明需要埋点类或事件,再对该类下的满足参照条件的方法进行注入。一方面,能够实现针对性地对特定的类和事件进行注入,另一方面,通过设置预先定义父类类型和继承的接口对类进行查找,无需遍历汇编文件的每个文件夹,能够实现快速注入,提高查找效率和注入效率。
在另一个实施例中,在步骤S108包括之前,还包括:在汇编文件中查找与预先配置的修饰符对应的方法。
步骤S108:对查找到的方法判断其方法名和方法签名是否与预先配置的参照条件相同。
在汇编文件中查找方法名、方法签名和方法修饰符与预先配置的方法名、方法签名和方法修饰符一致的方法。该方法适用于自定义事件的查找。通过预先配置方法名、方法签名和方法修饰符能够对自定义事件进行埋点注入。在一个具体的实施方式中,汇编文件中包括方法名、方法签名和方法修饰符的方法为:
.method public onTouch(.android/view/view;Landroid/view/view/motionEvent;)Z
对于安卓系统的自定义事件而言常用的修饰符包括public和protected。本实施例的埋点注入方法还能够实现对自定义事件的埋点注入。
在另一个实施例中,埋点注入方法还能够设置白名单,只对特定的组件或事件进行埋点。具体的,还包括步骤判断当前查找的汇编文件的包的包名与预先配置的指定包名是否相同。若是,则执行在汇编文件的该包下查找与预先配置的参照条件对应的方法的步骤,若否,则查找所述汇编文件的下一个包。
通过预先配置指定的包名,仅当当前查找的包(文件夹)的包名与指定的包名相同时,才在该包下查找与预先配置的参照条件对应的方法,从而能够实现埋点注入的效率,并且仅对指定的组件和事件进行埋点。
在另一个实施例中,埋点注入方法还能够设置黑名单,过滤不想埋点的组件或事件。具体的,还包括步骤:判断当前查找的汇编文件的包的包名与预先配置的过滤包名是否相同。若是,则跳过该包并查找所述汇编文件的下一个包,若否,则执行在汇编文件的当前查找的包下查找与预先配置的参照条件对应的方法的步骤。
通过预先配置过滤包名,当当前查找的包(文件夹)的包名与过滤包名相同时,跳过该包并查找汇编文件的下一个包,否则在该包下查找与预先配置的参照条件对应的方法,能够实现在查找过程中快速地过滤掉不想埋点事件或组件,提高埋点注入的效率。例如,用户一个Activity名为TestActivity的类不想埋点,那么在配置项中声明过滤TestActivity,即使该类下具有满足参照条件的方法,也不进行处理。
上述的埋点注入方法,通过查找到需要埋点的位置后自动注入对应的埋点代码,无需人工埋点,效率高。该方法基于对应用程序的原安装包进行解压和反编译实现,可用于任何一种应用程序的埋点注入,应用范围广。通过预先配置不同的参照条件,能够实现对不同的方法进行埋点,埋点的逻辑修改方便。通过配置指定包名和过滤包名设置对应的白名单和黑名单,满足用户个性化配置,实现精准埋点的注入。
在一个具体的实施方式中,预先配置的参照条件的参数方法名为:onTouch
方法签名为:
(.android/view/view;Landroid/view/view/motionEvent;)Z
一种应用程序的埋点注入方法,包括:
步骤1:获取应用程序的原安装包。
步骤2:对原安装包进行解压缩,获得原安装包的代码文件。
步骤3:对代码文件执行反编译操作,获得对代码文件进行反编译操作后转换而成的汇编文件。
步骤4:在汇编文件中查找与预先配置的参照条件对应的方法。
步骤5:在汇编文件中满足参照条件的方法的对应位置注入与方法对应的埋点代码。
对于onTouch事件,需要计录其执行次数的执行时间以及绑定的View(视图)信息。对onTouch事件插入两个方法,分别在方法开始时和方法结束时插入对应的埋点代码,关联到Android页面上就是某一按钮的执行次数和执行时间。
在一个实施例中,提供一种应用程序的埋点注入装置,如图4所示,包括:获取模块401、解压缩模块402、反编译操作模块403、方法查找模块404和注入模块405。
获取模块401,用于获取应用程序的原安装包。
解压缩模块402,用于对原安装包进行解压缩,获得原安装包的代码文件。
反编译操作模块403,用于对代码文件执行反编译操作,获得对代码文件进行反编译操作后转换而成的汇编文件。
方法查找模块404,用于在汇编文件中查找与预先配置的参照条件对应的方法,参照条件包括方法名和方法签名。
注入模块405,用于在汇编文件中与参照条件相同的方法的对应位置注入与方法对应的埋点代码。
反编译操作模块403,还用于当汇编文件查找完毕后,将注入了埋点代码的汇编文件打包成安装包。
上述的埋点注入装置,通过对应用程序的原安装包解压缩后得到代码文件(.dex文件),将代码文件反编译后得到转换后的汇编文件,在汇编文件中查找与预先配置的参照条件对应的方法,并将与方法对应的埋点代码注入到与参照条件相同的方法的对应位置实现埋点,通过将埋点之后的汇编文件再打包成安装包得到埋点之后的应用程序,能够提供给用户安装。用户安装后,埋点即可对应用程序性的对应的方法进行检测,例如对页面显示率计算,对事件执行次数进行统计。该装置查找到需要埋点的位置后自动注入对应的埋点代码,无需人工埋点,效率高,并且基于对应用程序的原安装包进行解压和反编译实现,可用于任何一种应用程序的埋点注入,应用范围广。
在另一个实施例中,如图5所示,还包括:类查找模块406。
类查找模块406,用于在汇编文件中查找预先声明的类。
方法查找模块404,用于在汇编文件中查找到的类下查找与预先配置的参照条件对应的方法。
本实施例中,通过预先声明类,预先声明的类可以为特定的交互组件、服务组件或事件,在对汇编文件进行查找时,先查找到预先声明的类,再在查找到的类下查找满足参照条件的方法。一方面,通过预先声明的类,可实现只对特定的类下的方法进行埋点注入,更具有指向性。另一方面,先查找到预先声明的类,再在查找到的类下查找满足参照条件的方法,无需遍历汇编文件的每一个文件夹,能够提高埋点注入的效率。
在又一个实施例中,请继续参阅图5,预先声明的类包括应用程序的全局配置文件中声明的各交互组件的类,装置还包括解析模块407。
解压缩模块402,用于对原安装包进行解压缩,获得原安装包的代码文件和全局配置文件。
解析模块407,用于解析全局配置文件得到各交互组件的类名。
类查找模块406,用于在汇编文件中查找与交互组件的类名相同的类。
本实施例的埋点注入装置适用于交互组件(Activity)的埋点注入,Activity组件提供用户可与其提供的屏幕进行交互,通过全局配置文件中先确定应用程序所配置的Activity的类名,在汇编文件中查找与配置的Activity的类名相同的类,即应用程序所配置的Activity,再在该类下查找方法名和方法签名与预先配置的方法名和方法签名相同的方法。通过先根据Activity的类名在汇编文件中查找类,再在查找到的类下查找满足参照条件的方法,无需遍历汇编文件的每一个文件夹,能够提高Activity组件埋点注入的效率。该装置能够对全局配置文件所声明的交互组件(Activity)中满足参照条件的方法进行埋点注入。
在一个实施例中,预先声明的类包括具有预先定义的父类类型的类。类查找模块406,用于在汇编文件中查找父类类型与预先定义的父类类型相同的类。
该装置适用于对于Fragment和Service类型,没有在全部配置文件中声明,通过预先定义父类类型,在汇编文件中查找具有预先定义的父类类型类,在该类下查找满足参照条件的方法。一个具体的实施方式中,汇编文件的父类类型为:.Super Ljava/Lang/Object。例如,Service必然继承自Android.app.Service类,用户可预先定义父类类型为Android.app.Service类,当匹配到具有父类类型为Android.app.Service的类时,则证明是用户定义的Service类,就可以对Service的公共方法进行监控。
在另一个实施例中,预先声明的类包括具有预先定义的继承的接口的类。类查找模块406,用于在汇编文件中查找继承的接口与预先定义的继承的接口相同的类。
该装置适用于对事件的埋点注入,例如,对于如Touch事件,通过判断其继承的接口,如果是Touch事件,必然其接口是:
Landroid.view.View$OnTouchListener
如果一个类的继承的接口与预先定这个接口完全相同,则证明是Touch事件类。
本实施例的埋点注入装置,通过预先定义父类类型或继承的接口的方式声明需要埋点类或事件,再对该类下的满足参照条件的方法进行注入。一方面,能够实现针对性地对特定的类和事件进行注入,另一方面,通过设置预先定义父类类型和继承的接口对类进行查找,无需遍历汇编文件的每个文件夹,能够实现快速注入,提高查找效率和注入效率。
在又一个实施例中,方法查找模块404,用于在汇编文件中查找与预先配置的修饰符对应的方法,并对查找到的方法判断其方法名和方法签名是否满足预先配置的参照条件。
在汇编文件中查找方法名、方法签名和方法修饰符与预先配置的方法名、方法签名和方法修饰符一致的方法。该装置适用于自定义事件的查找。通过预先配置方法名、方法签名和方法修饰符能够对自定义事件进行埋点注入。在一个具体的实施方式中,汇编文件中包括方法名、方法签名和方法修饰符的方法为:
.method public onTouch(.android/view/view;Landroid/view/view/motionEvent;)Z
对于安卓系统的自定义事件而言常用的修饰符包括public和protected。本实施例的埋点注入装置还能够实现对自定义事件的埋点注入。
在再一个实施例中,方法查找模块404用于在当前查找的汇编文件的包的包名与预先配置的指定包名相同时,在汇编文件的该包下查找与预先配置的参照条件对应的方法,否则,查找汇编文件的下一个包。
通过预先配置指定的包名,仅当当前查找的包(文件夹)的包名与指定的包名相同时,才在该包下查找与预先配置的参照条件对应的方法,从而能够实现埋点注入的效率,并且仅对指定的组件和事件进行埋点。
在又一个实施例中,方法查找模块404,用于在当前查找的汇编文件的包的包名与预先配置的过滤包名相同时,跳过该包并查找汇编文件的下一个包,否则,在汇编文件的当前查找的包下查找与预先配置的参照条件对应的方法。
通过预先配置过滤包名,当当前查找的包(文件夹)的包名与过滤包名相同时,跳过该包并查找汇编文件的下一个包,否则在该包下查找与预先配置的参照条件对应的方法,能够实现在查找过程中快速地过滤掉不想埋点事件或组件,提高埋点注入的效率。例如,用户一个Activity名为TestActivity的类不想埋点,那么在配置项中声明过滤TestActivity,即使该类下具有满足参照条件的方法,也不进行处理。
上述的埋点注入装置,通过查找到需要埋点的位置后自动注入对应的埋点代码,无需人工埋点,效率高。该装置基于对应用程序的原安装包进行解压和反编译实现,可用于任何一种应用程序的埋点注入,应用范围广。通过预先配置不同的参照条件,能够实现对不同的方法进行埋点,埋点的逻辑修改方便。通过配置指定包名和过滤包名设置对应的白名单和黑名单,满足用户个性化配置,实现精准埋点的注入。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性的计算机可读取存储介质中,如本发明实施例中,该程序可存储于计算机系统的存储介质中,并被该计算机系统中的至少一个处理器执行,以实现包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (14)
1.一种应用程序的埋点注入方法,其特征在于,包括:
获取应用程序的原安装包;
对所述原安装包进行解压缩,获得所述原安装包的代码文件;
对所述代码文件执行反编译操作,获得对所述代码文件进行反编译操作后转换而成的汇编文件;
在所述汇编文件中查找与预先配置的参照条件对应的方法,所述参照条件包括方法名和方法签名;
在所述汇编文件中与所述参照条件相同的方法的对应位置注入与所述方法对应的埋点代码;
当所述汇编文件查找完毕后,将注入了埋点代码的汇编文件打包成安装包;
所述在所述汇编文件中查找与预先配置的参照条件对应的方法的步骤之前,还包括:在所述汇编文件中查找预先声明的类;
所述在所述汇编文件中查找与预先配置的参照条件对应的方法的步骤包括:在所述汇编文件中查找到的类下查找与预先配置的参照条件对应的方法。
2.根据权利要求1所述的方法,其特征在于,所述预先声明的类包括应用程序的全局配置文件中声明的各交互组件的类;
所述对所述原安装包进行解压缩,获得所述原安装包的代码文件的步骤包括:对所述原安装包进行解压缩,获得所述原安装包的代码文件和全局配置文件;
所述方法还包括:解析所述全局配置文件得到各交互组件的类名;
在所述汇编文件中查找预先声明的类的步骤包括:在所述汇编文件中查找与所述交互组件的类名相同的类。
3.根据权利要求1所述的方法,其特征在于,所述预先声明的类包括具有预先定义的父类类型或继承的接口的类;
在所述汇编文件中查找预先声明的类的步骤包括:
在所述汇编文件中查找父类类型与预先定义的父类类型相同的类,
或
在所述汇编文件中查找继承的接口与预先定义的继承的接口相同的类。
4.根据权利要求1所述的方法,其特征在于,在所述汇编文件中查找与预先配置的参照条件对应的方法的步骤之前,还包括:
在所述汇编文件中查找与预先配置的修饰符对应的方法;
在所述汇编文件中查找与预先配置的参照条件对应的方法的步骤包括:对查找到的方法判断其方法名和方法签名是否与预先配置的参照条件相同。
5.根据权利要求1所述的方法,其特征在于:
在当前查找的所述汇编文件的包的包名与预先配置的指定包名相同时,执行在所述汇编文件的该包下查找与预先配置的参照条件对应的方法的步骤,否则,查找所述汇编文件的下一个包。
6.根据权利要求1所述的方法,其特征在于:
在当前查找的所述汇编文件的包的包名与预先配置的过滤包名相同时,跳过该包并查找所述汇编文件的下一个包,否则,执行在所述汇编文件的当前查找的包下查找与预先配置的参照条件对应的方法的步骤。
7.一种应用程序的埋点注入装置,其特征在于,包括:获取模块、解压缩模块、反编译操作模块、方法查找模块和注入模块;
所述获取模块,用于获取应用程序的原安装包;
所述解压缩模块,用于对所述原安装包进行解压缩,获得所述原安装包的代码文件;
反编译操作模块,用于对所述代码文件执行反编译操作,获得对所述代码文件进行反编译操作后转换而成的汇编文件;
所述方法查找模块,用于在所述汇编文件中查找与预先配置的参照条件对应的方法,所述参照条件包括方法名和方法签名;
所述注入模块,用于在所述汇编文件中与所述参照条件相同的方法的对应位置注入与所述方法对应的埋点代码;
所述反编译操作模块,还用于当所述汇编文件查找完毕后,将注入了埋点代码的汇编文件打包成安装包;
还包括类查找模块;
所述类查找模块,用于在所述汇编文件中查找预先声明的类;
所述方法查找模块,用于在所述汇编文件中查找到的类下查找与预先配置的参照条件对应的方法。
8.根据权利要求7所述的装置,其特征在于,所述预先声明的类包括应用程序的全局配置文件中声明的各交互组件的类,所述装置还包括解析模块;
所述解压缩模块,用于对所述原安装包进行解压缩,获得所述原安装包的代码文件和全局配置文件;
所述解析模块,用于解析所述全局配置文件得到各交互组件的类名;
所述类查找模块,用于在所述汇编文件中查找与所述交互组件的类名相同的类。
9.根据权利要求7所述的装置,其特征在于,所述预先声明的类包括具有预先定义的父类类型或继承的接口的类;
所述类查找模块,用于在所述汇编文件中查找父类类型与预先定义的父类类型相同的类,
或用于在所述汇编文件中查找继承的接口与预先定义的继承的接口相同的类。
10.根据权利要求7所述的装置,其特征在于,所述方法查找模块,用于在所述汇编文件中查找与预先配置的修饰符对应的方法,并对查找到的方法判断其方法名和方法签名是否与预先配置的参照条件相同。
11.根据权利要求7所述的装置,其特征在于,所述方法查找模块用于在当前查找的所述汇编文件的包的包名与预先配置的指定包名相同时,在所述汇编文件的该包下查找与预先配置的参照条件对应的方法,否则,查找所述汇编文件的下一个包。
12.根据权利要求7所述的装置,其特征在于,所述方法查找模块,用于在当前查找的所述汇编文件的包的包名与预先配置的过滤包名相同时,跳过该包并查找所述汇编文件的下一个包,否则,在所述汇编文件的当前查找的包下查找与预先配置的参照条件对应的方法。
13.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至6任一项所述的应用程序的埋点注入方法的步骤。
14.一种存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时,实现权利要求1至6任一项所述的应用程序的埋点注入方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611105636.8A CN108536451B (zh) | 2016-12-05 | 2016-12-05 | 应用程序的埋点注入方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611105636.8A CN108536451B (zh) | 2016-12-05 | 2016-12-05 | 应用程序的埋点注入方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108536451A CN108536451A (zh) | 2018-09-14 |
CN108536451B true CN108536451B (zh) | 2021-06-15 |
Family
ID=63488285
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611105636.8A Active CN108536451B (zh) | 2016-12-05 | 2016-12-05 | 应用程序的埋点注入方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108536451B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109165090B (zh) * | 2018-09-27 | 2019-07-05 | 苏宁消费金融有限公司 | 基于声明的批处理方法和系统 |
CN111190573A (zh) * | 2018-11-14 | 2020-05-22 | 北京字节跳动网络技术有限公司 | 应用程序埋点方法、装置和电子设备 |
CN110532159B (zh) * | 2019-09-03 | 2023-04-18 | 北京百度网讯科技有限公司 | 数据监听方法、装置、设备及计算机可读存储介质 |
CN111090433B (zh) * | 2019-10-23 | 2023-10-20 | 贝壳技术有限公司 | 一种数据处理的方法、装置和存储介质 |
CN111061627B (zh) * | 2019-11-20 | 2023-10-03 | 北京达佳互联信息技术有限公司 | 网页埋点方法、装置、电子设备及存储介质 |
CN111930422B (zh) * | 2020-09-02 | 2023-07-25 | 度小满科技(北京)有限公司 | 一种信息采集方法、装置、服务器及存储介质 |
CN112015467B (zh) * | 2020-09-04 | 2024-05-17 | 杭州网易再顾科技有限公司 | 埋点方法、介质、装置和计算设备 |
CN112230903B (zh) * | 2020-10-12 | 2024-05-17 | 上海赛可出行科技服务有限公司 | 一种基于iOS应用的轻量级解耦式埋点方法及装置 |
CN113204463A (zh) * | 2021-04-21 | 2021-08-03 | 宝宝巴士股份有限公司 | 一种apk下载安装率的埋点统计方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101391982B1 (ko) * | 2012-08-28 | 2014-05-07 | 바른소프트기술 주식회사 | 안드로이드 어플리케이션의 디컴파일 방지를 위한 암호화 방법 |
CN104484585A (zh) * | 2014-11-26 | 2015-04-01 | 北京奇虎科技有限公司 | 一种应用程序安装包的处理方法、装置及移动设备 |
-
2016
- 2016-12-05 CN CN201611105636.8A patent/CN108536451B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN108536451A (zh) | 2018-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108536451B (zh) | 应用程序的埋点注入方法和装置 | |
KR101246623B1 (ko) | 악성 애플리케이션 진단 장치 및 방법 | |
Narayanan et al. | Addetect: Automated detection of android ad libraries using semantic analysis | |
CN107908392B (zh) | 数据采集工具包定制方法、装置、终端和存储介质 | |
CN104731625A (zh) | 一种加载插件的方法、装置和移动终端 | |
CN105630518A (zh) | Android应用软件资源更新的方法和装置 | |
US10579592B2 (en) | Method and apparatus for compressing an application | |
KR20150044490A (ko) | 안드로이드 악성 애플리케이션의 탐지장치 및 탐지방법 | |
CN103177210A (zh) | 一种在Android中植入动态污点分析模块的方法 | |
CN106897607B (zh) | 一种应用程序监控方法及装置 | |
CN103778373A (zh) | 病毒检测方法及装置 | |
CN106775781B (zh) | 减小应用安装包的方法、装置及电子设备 | |
CN107016282B (zh) | 一种信息处理方法及装置 | |
CN113835713B (zh) | 源码包下载方法、装置、计算机设备和存储介质 | |
CN107402792B (zh) | 应用软件安装包的集成方法、装置、设备及存储介质 | |
CN106933642B (zh) | 应用程序的处理方法及处理装置 | |
CN112527386B (zh) | 应用程序发布方法及装置 | |
CN105740703A (zh) | 一种应用程序的加固方法及装置 | |
CN106776266B (zh) | 测试工具的配置方法及终端设备 | |
CN106055375A (zh) | 应用程序安装方法及装置 | |
KR102141749B1 (ko) | App 프로그램 실행 방법 및 장치 | |
CN104915594A (zh) | 应用程序运行方法及装置 | |
CN108897588B (zh) | 一种用于模块间通信的路由方法和路由装置 | |
CN112988175A (zh) | 跨平台应用安装包的生成方法、装置、介质及电子设备 | |
CN111782239A (zh) | 软件打包和源码版本信息获取方法、装置及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |