CN111352849A - 一种移动端无码埋点解决方法 - Google Patents

一种移动端无码埋点解决方法 Download PDF

Info

Publication number
CN111352849A
CN111352849A CN202010176659.8A CN202010176659A CN111352849A CN 111352849 A CN111352849 A CN 111352849A CN 202010176659 A CN202010176659 A CN 202010176659A CN 111352849 A CN111352849 A CN 111352849A
Authority
CN
China
Prior art keywords
function
server
reported
app
program
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.)
Granted
Application number
CN202010176659.8A
Other languages
English (en)
Other versions
CN111352849B (zh
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.)
Hangzhou Xiaoying Innovation Technology Co ltd
Original Assignee
Hangzhou Quwei Science & Technology 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 Hangzhou Quwei Science & Technology Co ltd filed Critical Hangzhou Quwei Science & Technology Co ltd
Priority to CN202010176659.8A priority Critical patent/CN111352849B/zh
Publication of CN111352849A publication Critical patent/CN111352849A/zh
Application granted granted Critical
Publication of CN111352849B publication Critical patent/CN111352849B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/362Software debugging
    • G06F11/366Software debugging using diagnostics
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/70Reducing energy consumption in communication networks in wireless communication networks

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)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种移动端无码埋点解决方法。它具体包括如下步骤:在安卓系统app端接入信息上报模块;通过编译期无码插桩技术对app中所有函数的进入和退出插入代码片段,并为每个函数生成不一样的标识符用于区分;在服务器端配置需要上报的唯一埋点标识符,在app启动时获取服务器需要上报埋点标识符,保存到本地文件A中;app程序运行时,每个函数在进入和退出时,会先运行插桩的代码块,根据判断是否和本地文件A中需要上报的埋点标识符相符合,如果符合则上报到服务器端;服务器端分析是否函数运行异常。本发明的有益效果是:帮助开发者实现无码埋点,在代码编译期就自动实现埋入上报代码,协助开发者统计数据查找问题。

Description

一种移动端无码埋点解决方法
技术领域
本发明涉及APP应用程序处理相关技术领域,尤其是指一种移动端无码埋点解决方法。
背景技术
在智能手机高速发展的今天,安卓手机机型和系统的多样性,同一个App在市场中需要面临各种手机机型的挑战。手机程序在运行中出现异常数据也时有发生。为了帮助开发者快速定位问题,在程序运行中埋点也成了追踪问题的方式之一。埋点:为了记录程序的执行动作或结果数据而做的统计。
现有的Android App开发埋点需要开发者在开发过程中,手动在一些程序函数中加入统计代码,上报给服务器端。一旦服务器端想要统计新的埋点数据,就不得不通过发布新的app版本来实现,且app的版本迭代需要较长的周期,无法满足快速实统计数据验证程序问题的需求。
发明内容
本发明是为了克服现有技术中存在上述的不足,提供了一种自动实现埋入上报的移动端无码埋点解决方法。
为了实现上述目的,本发明采用以下技术方案:
一种移动端无码埋点解决方法,具体包括如下步骤:
(1)在安卓系统app端接入信息上报模块;
(2)通过编译期无码插桩技术对app中所有函数的进入和退出插入代码片段,并为每个函数生成不一样的标识符用于区分;
(3)在服务器端配置需要上报的唯一埋点标识符,在app启动时获取服务器需要上报埋点标识符,保存到本地文件A中;
(4)app程序运行时,每个函数在进入和退出时,会先运行插桩的代码块,根据判断是否和本地文件A中需要上报的埋点标识符相符合,如果符合则整合函数标识符和函数的参数或者返回结果,上报到服务器端;
(5)服务器端根据app端上报的数据,分析是否函数运行异常。
其中:无码指的是不需要开发者在开发过程手动编写代码。插桩指的是在保证程序原有逻辑完整性的基础上,在程序中插入一些代码片段。本方法解决的问题就是帮助开发者实现无码埋点,在代码编译期就自动实现埋入上报代码,帮助开发者让App能够根据服务器配置快速开始统计app程序动作或结果数据,协助开发者统计数据查找问题。
作为优选,在步骤(1)中,具体操作方法为:新建日志类LogReportUtil.java,添加静态函数reportLog用于将采集到的程序运行信息发送给服务器。
作为优选,在步骤(2)中,具体操作方法为:通对Gradle编译期Transform任务的Hook,在transform中创建ClassVisitor,即可对所有类文件进行编译期字节码无码插桩,利用对ClassVisitor中的onMethodEnter和onMethodExit的自定义处理,成功的对App工程所有函数的进入和退出分别插入代码片段,标识符组成方式:包路径+类名+方法名+参数。
作为优选,在步骤(3)中,具体操作方法为:在服务器端配置需要统计的函数标识符,在App启动时,通过向服务器发送请求,获取需要上报的函数标识符列表,保存到LogReportUtil类中的configs变量中,这样在调用到LogReportUtil.reportLog方法时,则会根据是否存在configs中来处理是否需要发送给服务器。
作为优选,在步骤(4)中,具体操作方法为:程序运行时,每个函数在进入或退出时,会先运行插桩的代码LogReportUtil.reportLog,当符合服务器配置时,此时则会向服务器发送程序运行数据,通过该方式,让客户端只采集服务器配置的程序数据,根据需要对上报数据进行方便的调整。
作为优选,在步骤(5)中,具体操作方法为:服务器在收到客户端发送的程序运行数据时,会将数据写入到服务器文件中,通过分析服务器文件每个函数的日志次数,分析程序每个功能的运行频率,如果程序运行发生异常,通过匹配服务器文件中每个方法是否包含进入和退出数据,定位出只有进入但是没有退出的异常函数,然后再对日志中该函数的输入参数分析,更方便的找出程序异常原因。
本发明的有益效果是:帮助开发者实现无码埋点,在代码编译期就自动实现埋入上报代码,帮助开发者让App能够根据服务器配置快速开始统计app程序动作或结果数据,协助开发者统计数据查找问题。
具体实施方式
下面结合具体实施方式对本发明做进一步的描述。
一种移动端无码埋点解决方法,具体包括如下步骤:
(1)在安卓系统app端接入信息上报模块;具体操作方法为:新建日志类LogReportUtil.java,添加静态函数reportLog用于将采集到的程序运行信息发送给服务器。
(2)通过编译期无码插桩技术对app中所有函数的进入和退出插入代码片段,并为每个函数生成不一样的标识符用于区分;具体操作方法为:通对Gradle编译期Transform任务的Hook,在transform中创建ClassVisitor,即可对所有类文件进行编译期字节码无码插桩,利用对ClassVisitor中的onMethodEnter和onMethodExit的自定义处理,成功的对App工程所有函数的进入和退出分别插入代码片段LogReportUtil.reportLog(true,methosMsg,paramMsg)和LogReportUtil.reportLog(false,methosMsg,paramMsg),其中methodMsg为用于区分函数的标识符,paramMsg为函数进入时传入的参数或返回时的result;标识符组成方式:包路径+类名+方法名+参数。(如:com/test/TestClass.testMethod$[Ljava/lang/String;]V和com/test/TestClass.testMethod$[Ljava/lang/String;]V分别作为类TestClass中函数testMethod的函数标识符,这样在程序运行进入和退出函数时,便会往文件methodlog.txt中写入信息entry:com/test/TestClass.testMethod$[Ljava/lang/String;]V:paramMsg和exit:com/test/TestClass.testMethod$[Ljava/lang/String;]V:paramMsg)。
(3)在服务器端配置需要上报的唯一埋点标识符,在app启动时获取服务器需要上报埋点标识符,保存到本地文件A中;具体操作方法为:在服务器端配置需要统计的函数标识符(如:com/test/TestClass.testMethod$[Ljava/lang/String;]V),在App启动时,通过向服务器发送请求,获取需要上报的函数标识符列表,保存到LogReportUtil类中的configs变量中,这样在调用到LogReportUtil.reportLog方法时,则会根据是否存在configs中(即是否服务器配置需要监控)来处理是否需要发送给服务器。
(4)app程序运行时,每个函数在进入和退出时,会先运行插桩的代码块,根据判断是否和本地文件A中需要上报的埋点标识符相符合,如果符合则整合函数标识符和函数的参数或者返回结果,上报到服务器端;具体操作方法为:程序运行时,每个函数在进入或退出时,会先运行插桩的代码LogReportUtil.reportLog,当符合服务器配置时,此时则会向服务器发送程序运行数据(如entry:com/test/TestClass.testMethod$[Ljava/lang/String;]V:hello和exit:com/test/TestClass.testMethod$[Ljava/lang/String;]V:welcome),通过该方式,让客户端只采集服务器配置的程序数据,根据需要对上报数据进行方便的调整。
(5)服务器端根据app端上报的数据,分析是否函数运行异常:具体操作方法为:服务器在收到客户端发送的程序运行数据时,会将数据写入到服务器文件methodlog.txt中,通过分析服务器文件methodlog.txt每个函数的日志次数,分析程序每个功能的运行频率,如果程序运行发生异常,通过匹配服务器文件methodlog.txt中每个方法是否包含进入和退出数据,定位出只有进入但是没有退出的异常函数(即只有entry日志没有,exit日志的函数),然后再对日志中该函数的输入参数分析,更方便的找出程序异常原因。
具体实施例:
步骤1)设计信息上报模块,根据本地文件A中是否包含标识符为上报条件;在服务器配置需要监听的函数标识符:com/test/TestClass.testMethod$[Ljava/lang/String;]V;
步骤2)依赖安卓插桩插件,实现编译期对app中所有函数的进入和退出插入代码片段,并为每个函数生成字符串,以包路径加类名加方法名作为唯一标识符;
步骤3)生成APK安装,启动app从服务器获取需要上报的配置,并保存到本地文件A中;当App运行时,调用到函数TestClass.testMethod2()时,由于该函数未在服务器监控配置中,所以并不会发送函数testMethod2执行数据到服务器,所以服务器文件文件methodlog.txt不会统计testMethod2信息;
步骤4)在app运行期每次进入函数或退出函数时,都检测该函数的唯一标识符是否可以在配置文件中找到,如果找到,则向服务器上报该唯一标识符信息和函数的入参信息和结果数据;当App调用到函数TestClass.testMethod且传参为“9”时,服务器文件methodlog.txt中可以看到信息有entry和exit发现函数正常运行。当App调用到函数TestClass.testMethod且传参为”ab”时,服务器文件methodlog.txt中可以看出函数testMethod只有entry而没有exit,可以分析出函数异常退出,且传参为“ab”,通过对参数分析,可以找到异常原因,即Integer.parseInt无法处理非数字字符串。当App调用到函数TestClass.testMethod随机次数且传参为“6”后,服务器文件methodlog.txt中通过entry和exit的匹配可以分析出该函数一共使用的次数。
步骤5)服务器根据客户端上报的入参数据和结果数据,进行预期数据的对比,判断是否处于正常运行状态。通过测试可以发现,App可以根据服务器配置,对服务器想要采集的程序数据进行上报。对APP发送给服务器的程序运行数据埋点分析,可以有效的判断功能进入的频率以及是否处于正常运行状态。

Claims (6)

1.一种移动端无码埋点解决方法,其特征是,具体包括如下步骤:
(1)在安卓系统app端接入信息上报模块;
(2)通过编译期无码插桩技术对app中所有函数的进入和退出插入代码片段,并为每个函数生成不一样的标识符用于区分;
(3)在服务器端配置需要上报的唯一埋点标识符,在app启动时获取服务器需要上报埋点标识符,保存到本地文件A中;
(4)app程序运行时,每个函数在进入和退出时,会先运行插桩的代码块,根据判断是否和本地文件A中需要上报的埋点标识符相符合,如果符合则整合函数标识符和函数的参数或者返回结果,上报到服务器端;
(5)服务器端根据app端上报的数据,分析是否函数运行异常。
2.根据权利要求1所述的一种移动端无码埋点解决方法,其特征是,在步骤(1)中,具体操作方法为:新建日志类LogReportUtil.java,添加静态函数reportLog用于将采集到的程序运行信息发送给服务器。
3.根据权利要求2所述的一种移动端无码埋点解决方法,其特征是,在步骤(2)中,具体操作方法为:通对Gradle编译期Transform任务的Hook,在transform中创建ClassVisitor,即可对所有类文件进行编译期字节码无码插桩,利用对ClassVisitor中的onMethodEnter和onMethodExit的自定义处理,成功的对App工程所有函数的进入和退出分别插入代码片段,标识符组成方式:包路径+类名+方法名+参数。
4.根据权利要求3所述的一种移动端无码埋点解决方法,其特征是,在步骤(3)中,具体操作方法为:在服务器端配置需要统计的函数标识符,在App启动时,通过向服务器发送请求,获取需要上报的函数标识符列表,保存到LogReportUtil类中的configs变量中,这样在调用到LogReportUtil.reportLog方法时,则会根据是否存在configs中来处理是否需要发送给服务器。
5.根据权利要求4所述的一种移动端无码埋点解决方法,其特征是,在步骤(4)中,具体操作方法为:程序运行时,每个函数在进入或退出时,会先运行插桩的代码LogReportUtil.reportLog,当符合服务器配置时,此时则会向服务器发送程序运行数据,通过该方式,让客户端只采集服务器配置的程序数据,根据需要对上报数据进行方便的调整。
6.根据权利要求5所述的一种移动端无码埋点解决方法,其特征是,在步骤(5)中,具体操作方法为:服务器在收到客户端发送的程序运行数据时,会将数据写入到服务器文件中,通过分析服务器文件每个函数的日志次数,分析程序每个功能的运行频率,如果程序运行发生异常,通过匹配服务器文件中每个方法是否包含进入和退出数据,定位出只有进入但是没有退出的异常函数,然后再对日志中该函数的输入参数分析,更方便的找出程序异常原因。
CN202010176659.8A 2020-03-13 2020-03-13 一种移动端无码埋点解决方法 Active CN111352849B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010176659.8A CN111352849B (zh) 2020-03-13 2020-03-13 一种移动端无码埋点解决方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010176659.8A CN111352849B (zh) 2020-03-13 2020-03-13 一种移动端无码埋点解决方法

Publications (2)

Publication Number Publication Date
CN111352849A true CN111352849A (zh) 2020-06-30
CN111352849B CN111352849B (zh) 2023-05-16

Family

ID=71194498

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010176659.8A Active CN111352849B (zh) 2020-03-13 2020-03-13 一种移动端无码埋点解决方法

Country Status (1)

Country Link
CN (1) CN111352849B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022166669A1 (zh) * 2021-02-05 2022-08-11 北京字节跳动网络技术有限公司 一种编译期的hook方法、装置、设备及存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130263096A1 (en) * 2012-03-31 2013-10-03 Bmc Software, Inc. Application instrumentation code extension
US20150378864A1 (en) * 2014-06-25 2015-12-31 SmartBear Software, Inc. Systems and methods for instrumenting applications for performance monitoring
CN108280022A (zh) * 2018-02-08 2018-07-13 无线生活(杭州)信息科技有限公司 性能监测方法及装置
CN108984203A (zh) * 2018-06-08 2018-12-11 广东伊莱特电器有限公司 一种用于Android应用运行时数据采集的方法及其系统
CN109491695A (zh) * 2018-10-19 2019-03-19 华南理工大学 一种集成安卓应用的增量更新方法
CN110209386A (zh) * 2019-05-17 2019-09-06 北京奇艺世纪科技有限公司 数据埋点的设置方法、埋点数据的获取方法及装置
CN110442402A (zh) * 2019-08-08 2019-11-12 中国建设银行股份有限公司 数据处理方法、装置、设备及存储介质
CN110597515A (zh) * 2019-08-27 2019-12-20 绿漫科技有限公司 一种字节码插桩方法

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130263096A1 (en) * 2012-03-31 2013-10-03 Bmc Software, Inc. Application instrumentation code extension
US20150378864A1 (en) * 2014-06-25 2015-12-31 SmartBear Software, Inc. Systems and methods for instrumenting applications for performance monitoring
CN108280022A (zh) * 2018-02-08 2018-07-13 无线生活(杭州)信息科技有限公司 性能监测方法及装置
CN108984203A (zh) * 2018-06-08 2018-12-11 广东伊莱特电器有限公司 一种用于Android应用运行时数据采集的方法及其系统
CN109491695A (zh) * 2018-10-19 2019-03-19 华南理工大学 一种集成安卓应用的增量更新方法
CN110209386A (zh) * 2019-05-17 2019-09-06 北京奇艺世纪科技有限公司 数据埋点的设置方法、埋点数据的获取方法及装置
CN110442402A (zh) * 2019-08-08 2019-11-12 中国建设银行股份有限公司 数据处理方法、装置、设备及存储介质
CN110597515A (zh) * 2019-08-27 2019-12-20 绿漫科技有限公司 一种字节码插桩方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
GA小站: "说说埋点方式有哪些" *
朱旭超;徐建;: "基于smali注入的敏感API拦截方法研究" *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022166669A1 (zh) * 2021-02-05 2022-08-11 北京字节跳动网络技术有限公司 一种编译期的hook方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN111352849B (zh) 2023-05-16

Similar Documents

Publication Publication Date Title
US7908590B1 (en) System and method for automatically creating test cases through a remote client
KR100938672B1 (ko) 악성 코드에 의해 삽입된 동적 연결 라이브러리 검출 장치 및 방법
US7818721B2 (en) Dynamic application tracing in virtual machine environments
CN110941528B (zh) 一种基于故障的日志埋点设置方法、装置及系统
CN110704306B (zh) 测试中的断言处理方法、装置、设备及存储介质
CN108491327B (zh) 一种安卓应用动态Receiver组件本地拒绝服务漏洞检测方法
CN109255240B (zh) 一种漏洞处理方法和装置
CN111835756B (zh) App隐私合规检测方法、装置、计算机设备及存储介质
CN111506489A (zh) 测试方法、系统、设备、服务器及存储介质
CN109101815B (zh) 一种恶意软件检测方法及相关设备
CN108959071B (zh) 一种基于RASP的PHP变形webshell的检测方法及系统
CN109948338B (zh) 基于静态分析的安卓应用敏感路径触发方法
Abou Assi et al. Identifying failure-correlated dependence chains
CN111427771A (zh) 一种代码覆盖率分析方法、设备、服务器及可读存储介质
CN114021142A (zh) 一种安卓应用程序漏洞检测方法
CN109614107B (zh) 一种软件开发工具包的集成方法和装置
CN112131573A (zh) 安全漏洞的检测方法、装置及存储介质
CN112579437A (zh) 一种程序运行过程符合性验证方法
CN111352849B (zh) 一种移动端无码埋点解决方法
CN113935041A (zh) 面向实时操作系统设备的漏洞检测系统及方法
Wu et al. Casper: An efficient approach to call trace collection
Gauthier et al. Experience: Model-Based, Feedback-Driven, Greybox Web Fuzzing with BackREST
CN112115060A (zh) 基于终端的音频测试方法与系统
CN112084108A (zh) 一种测试脚本生成方法、装置及相关组件
CN113127367B (zh) Android动态权限申请的缺陷检测方法

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
CP03 Change of name, title or address

Address after: 22nd floor, block a, Huaxing Times Square, 478 Wensan Road, Xihu District, Hangzhou, Zhejiang 310000

Patentee after: Hangzhou Xiaoying Innovation Technology Co.,Ltd.

Address before: 16 / F, HANGGANG Metallurgical Science and technology building, 294 Tianmushan Road, Xihu District, Hangzhou City, Zhejiang Province, 310012

Patentee before: HANGZHOU QUWEI SCIENCE & TECHNOLOGY Co.,Ltd.

CP03 Change of name, title or address
CB03 Change of inventor or designer information

Inventor after: Wu Zhongyou

Inventor after: Gu Xiangyu

Inventor after: Han Cheng

Inventor before: Wu Zhongyou

Inventor before: Gu Xiangyu

Inventor before: Han Cheng

CB03 Change of inventor or designer information