如您完成统计SDK和性能体验SDK的接入,即可使用Java异常、Native崩溃异常、ANR异常自动采集功能
如果您使用我们的SDK捕获native崩溃后,其他捕获工具将无法捕获到native 崩溃,可以使用如下方法在初始化SDK后进行设置,使其他SDK可以捕获到native 崩溃。
当崩溃发生时,您可以在该回调方法中返回string类型的业务自定义数据,该数据会写入到崩溃文件中并上传到服务器展示。注意:崩溃回调中返回string类型数据的长度限制为256个字符。
接口示例:
上传后即可在管理平台 中查看到回调信息
如果开发者自己捕获了错误,需要手动上传到【QuickTracking】服务器进行分析可以调用下面两种方法:
方法一:
示例:
方法二:
示例:
使用自定义错误,查看时请在错误列表页面选择【自定义异常】
采集卡顿异常无法做额外配置,默认为开启,如果您需要关闭此采集功能,请参考文档
安卓卡顿分析默认的值为超过2秒计为卡顿,如果您需要设置不同的阈值,可以通过下方的API进行设置,API和示例如下:
内存采集支持采集OOM异常和内存占用指标。
OOM异常是崩溃分析的子集,因此不单独提供开关配置,是否采集OOM与是否采集崩溃异常同步,如您需要关闭某类崩溃,可通过【管理后台】-【性能体验】- 【配置管理】-【开关与采样配置】调整。
内存占用,需要接入及以上版本,并建议搭配最新版本统计分析SDK接入, 如您不希望采集内存占用相关指标,可通过调整配置进行关闭。如下图所示:
1.5.1 集成方式
集成网络监控即需要您手动将网络监控 SDK 相关 API 预埋到您项目工程的OkHttp中。
设置eventListenerFactory和NetworkInterceptor。
在您构建OkHttpClient时,通过OkHttp的eventListenerFactory方法和addNetworkInterceptor方法分别设置事件监听器和拦截器,示例如下:
启动监控用于监控、还原C端用户启动您App时的真实感知情况。分类如下:
1.6.1 集成方式
原理说明:
启动监控的触发时机与说明如图
手动集成:
使用方法
您可以在添加和在中添加来使其生效
其中:
填写规则的说明如下:
代码示例如下:
自动集成
依赖插件
打开您工程根目录的build.gradle,在dependencies中添加如下:
注意:确保您已在工程根目录的build.gradle中添加Maven地址。
示例如下:
配置插件
打开您App的build.gradle添加使用插件,在文件头添加代码如下:
同时添加插件的相关配置,代码如下:
完整示例:
如何确认插件是否正确集成:
编译时查看编译中的Log搜索关键字,出现下列关键字,即代表集成自动采集插件
如下图所示:
1.6.2 自定义启动阶段数据
您可以通过在启动前后添加和来实现自定义启动阶段上报
方法
在您自定义阶段开始处添加如:
注:自定义阶段key长度不可以超过10个字符
在您自定义阶段结束处添加和如下API:
注:自定义阶段key长度不可以超过10个字符
代码示例:
结果验证
集成完成启动App,过滤efs.px.api,可以看到如下启动数据发送成功相关信息,即表示启动数据成功上报。
集成QuickTracking JS SDK的网页在嵌入到App后,JS SDK采集到的数据可以通过App端上传到服务器,该功能默认关闭。如果开启,需要在每一个webview loadUrl前调用如下方法:
嵌入到App中的H5页面集成APM SDK后需要设置App应用包名白名单,桥接场景下H5不需要设置收数域名。
详情参考
1.8.1自动集成
1.8.2 自定义页面阶段数据
如果您想在页面监控过程中加入自定义的监控阶段,比如初始化业务数据(initData)、初始化页面组件(initView)等,您可以使用自定义页面阶段API加入您自定义的页面阶段数据。
在您自定义阶段开始处添加如下API: 注:
1、自定义阶段key长度不可以超过10个字符;
2、key的名称不能以"UM_"开头;
3、单个页面使用上限为6个,超出则过滤。
代码示例:
本采集开关适用于开发者在不想使用某个APM SDK监控模块时灵活自定义采集范围。如目前提供功能都需要采集,则不需要使用该开关,如需要调整某个模块,可按照下面bundle控制说明,选择key进行设置。
Bundle控制说明:
代码示例如下:
2.2.1 什么是符号表
符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示:
为了能快速并准确地定位用户APP发生Crash的代码位置,我们使用符号表对APP发生Crash的程序堆栈进行解析和还原。 因此在使用APM SDK还原时需要先上传符号表!
2.2.2 为什么要上传符号表
为了能快速并准确地定位用户APP发生Crash的代码位置,使用符号表对APP发生Crash的程序堆栈进行解析和还原。
举一个例子,解析前:
解析后:
管理平台-性能体验-配置管理处提供了手动上传符号表功能如下图:
2.2.3 Android 打包符号表方式
Java 符号表
需要将多个mapping文件请自行处理追加到一个文件中,最终命名为mapping.txt,并打包成zip文件,如果需要同时包含so符号,可以把so文件打包在一起。(具体结构可参考下面)
Android so库
保证符号表的so文件与发布的so文件同名,so压缩前最大支持400M;如果一个版本里包含同文件名,不同架构的so,可以压缩到不同的目录中,反符号化时需要通过buildid去关联;建议编译时使用-g参数,带上debug信息,崩溃堆栈可以解析到代码行级,实际发布时,再使用strip命令去掉调试信息;如果不带debug信息,则只能定位到函数名级下列情况下,需要so文件带有buildid
符号文件建议示例:
如果您是使用CMake编译的项目,那么so文件在工程中的位置为:
文件
mapping文件的位置:
版本选择
当前支持现有版本列表和手动输入两种方式:
2.2.4 手动上传方式
您可以通过调用来设置http接口
接口说明:
该接口仅影响UAPM 性能部分发送请求,UMCrash模块不受该API控制;
该接口需要在初始化SDK之前设置;
用户可通过该接口修改SDK本地是以HTTP头发送还是HTTPS头发送,默认SDK是以HTTPS头发送,并且可以通过云控配置动态下发修改,并且云控下发会覆盖该接口的设置;
通过setCustomDomainEfs接口传入的域名中的HTTP或HTTPS头接口内会自动切掉,以SDK默认值(HTTPS头)或setRequestProtocol接口或云控决定SDK使用HTTP或HTTPS。
2.4.1 设置回捞标识
您可以通过如下接口设置回捞标识:
注意:
该设置必须在初始化SDK之前完成,运行时不可再次设置
回捞标识不能为空,且长度不能超过128
如果不设置回捞标识,默认以UMID作为标识回捞
2.4..2 日志记录
您可以通过如下接口完成相关日志的记录:
注意:
共提供五种日志等级,包括:v/d/i/w/e
参数1为日志的TAG,不能为空或长度超过64,参数2为日志的内容,不能为空或长度超过1024
务必使用「import com.umeng.logsdk.ULog;」类下的ULog.v等方法,且必须要在初始化SDK之后调用。如果使用「com.umeng.commonsdk.statistics.common.ULog;」将不生效
2.4.3 日志策略
日志持久化存储上限为5MB,当达到上限时则仅保留最近7天的日志,如果最近7天日志达到上限则不再继续存储日志
触发日志持久化存储:
2.1. 前后台切换;
2.2. 缓存数据达到上限则进行持久化日志存储
当回捞任务下发到本地,并成功加载后,则进行回捞任务和本地日志的匹配,匹配到的日志开始上传,当前进程正在产生的日志需要下次启动后匹配任务继续上传
2.4.4 日志排查
日志回捞模块开启,输出如下日志:
enable codeLog is true
正确读取并加载日志任务,输出如下日志:
09-13 14:56:28.988 15994-15994/com.efs.demo I/ULogConfigManager: [log register] begin. 09-13 14:56:29.704 15994-15994/com.efs.demo I/ULogConfigManager: [log register] call back config. 09-13 14:56:29.709 15994-15994/com.efs.demo I/ULogConfigManager: [log register] save did is 9560fe0f75e7c92fff351d537633a91cia 09-13 14:56:29.709 15994-15994/com.efs.demo I/ULogConfigManager: [log register] save uid is android0911 09-13 14:56:29.710 15994-15994/com.efs.demo I/ULogConfigManager: [log register] save task id is 1660130437264, task is {"task_etime":1663257599000,"target_type":0,"task_id":"1660130437264","task_btime":1662307200000,"task_type":0} 09-13 14:56:29.710 15994-15994/com.efs.demo I/ULogConfigManager: [log register] add mem task id is 1660130437264 09-13 14:56:29.710 15994-15994/com.efs.demo I/ULogConfigManager: [log register] save task id is 1660130437265, task is {"task_etime":1663257599000,"target_type":1,"task_id":"1660130437265","task_btime":1662307200000,"task_type":0} 09-13 14:56:29.710 15994-15994/com.efs.demo I/ULogConfigManager: [log register] add mem task id is 1660130437265 09-13 14:56:29.710 15994-15994/com.efs.demo I/ULogConfigManager: [log register] save task id set is 1660130437264_1660130437265
持久化存储日志(如前后台切换),输出如下日志:
09-13 15:06:23.445 15994-16722/com.efs.demo I/efs.base: {"fr":"android","sdk":23,"others_OS":"Android","stime":1663052188738,"dsp_h":1920,"rom":"6.0.1","sdk_ver":"1.3.11.umeng","w_tm":1663052783,"um_access":"wifi","lang":"zh","um_umid_header":"aid03bc207717fd2238c5d8bf93ed4fffb","pkg":"com.efs.demo","type":"codelogperf","dsp_w":1080,"um_network_type":0,"wid":"54d8e67e-0a4e-4e11-9517-08ac993aa670","log_uid":"android0911","pid":15994,"ps":"com.efs.demo","build_model":"MI 4LTE","appid":"ez2cookeijezdgu3nxmci6zt","um_app_carrier":"","ctime":1663052783,"net":"wifi","um_crash_sdk_version":"efs.1.6.0.001.200","um_os":"android","vcode":"1","tzone":"Asia/Shanghai","um_app_channel":"Umeng","brand":"xiaomi","log_did":"9560fe0f75e7c92fff351d537633a91cia","codelog":{"taskid":"","status":0,"time_start":1663052782368,"time_end":1663052783439,"uid":"android0911","did":"9560fe0f75e7c92fff351d537633a91cia","body":[{"tag":"walle","msg":"button 1 --->>> ","level":0,"time":1663052782367,"process":"com.efs.demo","thread":"main"},{"tag":"walle","msg":"button 1 --->>> ","level":2,"time":1663052782370,"process":"com.efs.demo","thread":"main"}]},"uid":"54d8e67e-0a4e-4e11-9517-08ac993aa670","ver":"1.0","model":"mi-4lte"} 09-13 15:06:23.459 15994-16077/com.efs.demo I/RecordLogCacheProcessor: save file, type is codelogperf 09-13 15:06:23.463 15994-16077/com.efs.demo I/RecordLogCacheProcessor: upload file, name is codelogperf_none_1_1_15994_2442_1663052783458_android0911_9560fe0f75e7c92fff351d537633a91cia_1663052782368_1663052783439
日志匹配并上传成功,输出如下日志:
09-13 15:06:39.255 15994-16077/com.efs.demo I/efs.cache: [-->>] add file is codelogperf_gzip_2_1_15994_3356_1663052783463_android0911_9560fe0f75e7c92fff351d537633a91cia_1663052782368_1663052783439 09-13 15:06:39.262 15994-16141/com.efs.demo I/efs.LogSendAction.Codelog: send data url is http://aplus2-portal-lite.emas-poc.com 09-13 15:06:39.272 15994-16141/com.efs.demo I/efs.px.api: Upload file, url is http://aplus2-portal-lite.emas-poc.com/apm_logs 09-13 15:06:39.478 15994-16141/com.efs.demo I/efs.px.api: upload result : true, resp is HttpResponse {succ=true, code=200, data='{"msg":"成功","code":0,"cip":"XXX.XX.XX.XXX","stm":1663052801}', extra={req_url=http://aplus2-portal-lite.emas-poc.com/apm_logs, flow_limit=true, biz_code=0, size=592, type=codelogperf}} 09-13 15:06:39.480 15994-16077/com.efs.demo I/efs.send_log: send secess.
本地Log仅用于排查本地是否正确集成性能体验SDK,以及各项功能的正确触发,不代表管理平台处表现
开启本地日志
可通过QtConfigure.setLogEnabled(boolean)接口控制Log的输出。
可以通过调用如下方法控制SDK运行调试日志是否输出,默认情况下SDK运行调试日志为关闭。需要用户手动打开。
初始化
初始化成功后,会产生初始化成功log 您可以通过过滤来查看
崩溃分析
模拟崩溃后查看是否采集到崩溃日志,您可以通过过滤关键字来查看日志
内存异常采集上报
模拟内存溢出后查看是否采集到崩溃日志,您可以通过过滤关键字来查看日志
启动上报
模拟崩溃后查看是否采集到崩溃日志,您可以通过过滤关键字来查看日志
网络分析上报
在排查网络分析上报日志时您可以先检查一下网络分析是否正确打开,您可以通过过滤关键字来查看
当inner config : net open.和inner config : net rate is 100 时网络分析功能打开
过滤关键字可以用于检查网络分析是否正确采样状态
正确采样时:
未采样时:
卡顿采集上报
模拟卡顿时过滤关键字查看日志,卡顿采集成功如下图所示:
内存分析上报
开启内存分析后过滤关键字查看日志,默认间隔1s输出一条日志,日志如下图所示:
原生页面流畅度和帧率上报
帧率上报需集成自动化采集插件请根据教程正确集成,管理平台开启加载时长请根据自己需求添加
冷启动2次过滤关键字查看日志,日志如下图所示:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/50281.html