写点什么

如何利用友盟平台定位安卓端的程序异常 | 社区征文

作者:liuzhen007
  • 2022 年 2 月 18 日
  • 本文字数:5356 字

    阅读完需:约 18 分钟

目录

前言

正文

一、U-APM 应用性能监控平台介绍

        1. 大核心优势

        2. U-APM 与其他产品功能对比

二、集成友盟 SDK 步骤

        第一步、进入 U-APM 功能首页

        第二步、填写应用程序信息并注册

        第三步、下载并集成基础 SDK

        第四步、初始化代码

        第五步、观察控制台统计数据

三、集成 SDK 过程中遇到的问题

        问题 1.  错误: 程序包 com.umeng.commonsdk 不存在

        问题 2. SDK 集成好后,监控平台没有看到相关的统计数据

        问题 3. 报错:Installation did not succeed. The application could not be installed:         INSTALL_FAILED_CONFLICTING_PROVIDER

四、实际问题定位与解决

        1. 崩溃实例分析

        2. 设置告警策略

        3. 其他功能

结尾


前言

移动端程序的异常问题定位是每一位开发者都非常关心的问题,而我们就可以充分利用友盟的应用性能监控平台 U-APM,它可以帮助我们深入了解应用的性能和稳定性,帮助我们高效提升应用的质量。通过实时采集新版本上线后的崩溃信息,提供了多种辅助定位问题的关键信息及多维度分析报表,从而能够快速发现问题、定位问题、解决问题。

正文

一、U-APM 应用性能监控平台介绍

1. 大核心优势

1)捕获采集类型丰富,支持 Java、Native、Swift、Objective-C、ANR、自定义异常的捕捉。

2)快速定位错误根源,提供行为日志、详细日志、内存快照、设备信息、自定义字段,帮您快速发现问题原因,提升问题解决效率。

3)智能告警专业服务,提供邮件、钉钉、飞书、企业微信告警触达通道,多时间段、多指标组合式告警,助您 7*24 小时监控应用情况。提供专业客服+技术支持,丰富用户课程,线下沙龙等,助您快速上手。

4)主流热门机型,随时随地获取海量 Android 和 iOS 云端真机, 稳定不掉线,操作流畅无延迟,省却百万真机购入费用,保障 App 质量。


2. U-APM 与其他产品功能对比


二、集成友盟 SDK 步骤

如果想要集成友盟的 SDK 也是需要一定操作步骤的,在同类产品中,过程不算法复杂,但也不是很简单。至于如何更加便捷,是不是可以考虑把填写应用信息的步骤省略掉?好了,这个问题留给咱们产品同学吧。接下来,我们开始详细介绍。

第一步、进入 U-APM 功能首页

U-APM 功能体验链接地址:https://at.umtrack.com/q0Dmaa

HYPERLINK "https://apm.umeng.com/apps/listhttps://apm.umeng.com/apps/list


第二步、填写应用程序信息并注册

进入创建应用界面,首先填写应用名称 AVPlayer,然后选择平台,这里需要注意的是友盟支持 iPhone、iPad、Android 三个移动终端平台,我们选择安卓,默认中文为应用语言。我们的应用程序是一款播放器,因此应用类型选择影视观看/本地播放。最后,填写应用程序的基本描述信息,点击“注册应用”按钮。


完成注册后,系统会给出应用程序的 AppKey,为了保密,截图中隐藏了部分内容,请见谅。


第三步、下载并集成基础 SDK

集成基础 SDK 有两种方式,分别是线上接入 SDK 和手动集成 SDK。目前,可能是考虑到新旧版本的兼容性问题,官方推荐新的 APP 使用线上接入 SDK 的方式。

那我们就与时俱进,以新版 APP 集成 SDK 为例进行演示说明。

1. 在工程 build.gradle 配置脚本中 buildscript 和 allprojects 段中添加 sdk maven 仓库地址。

配置方式如下:

buildscript {

        repositories {

                google()

                jcenter()

        maven { url 'https://repo1.maven.org/maven2/' }

}

dependencies {

        classpath 'com.android.tools.build:gradle:3.4.0'

// NOTE: Do not place your application dependencies here; they belong

// in the individual module build.gradle files

        }

}

allprojects {

        repositories {

                google()

                jcenter()

        maven { url 'https://repo1.maven.org/maven2/' }

        }

}

2. 集成组件化各业务 SDK

在 maven 中可以灵活配置所需的 SDK,在工程 App 对应 build.gradle 配置脚本 dependencies 段中添加基础组件库和统计 SDK 库的依赖。

配置方法如下:

// 友盟基础组件库(所有友盟业务 SDK 都依赖基础组件库)implementation "com.umeng.umsdk:common:9.4.2" // 版本号(必选))implementation "com.umeng.umsdk:asms:1.4.1" // asms 包依赖(必选)implementation "com.umeng.umsdk:apm:1.4.2" // U-APM 产品包依赖(必选) 

代码实例:


3. 功能依赖库介绍

当然,也可以根据应用程序 APP 的实际需要添加其他功能的依赖库,依赖库的种类非常多,比如:

1)友盟基础组件库(所有友盟业务 SDK 都依赖基础组件库)

2)友盟统计 SDK 依赖坐标

3)应用性能监控 SDK 依赖坐标库

4)友盟分享 SDK 核心库

5)支持 gradle 在线依赖的友盟分享模块

6)友盟推送 SDK 依赖坐标

7)厂商推送依赖坐标(单一厂商通道下相关组件必须全部集成,例:小米通道集成 2 个组件)

第四步、初始化代码

统一对各个业务进行初始化接口,总共分三点,下面分别介绍。

1. 隐私合规中加入友盟+SDK 合规声明

https://developer.umeng.com/docs/147377/detail/213789。这一点是非常必要的,最近审核非常严格,特别是移动端 APP。

2. 在 Applicaiton.onCreate 函数中调用预初始化函数 UMConfigure.preInit()

敏感的小伙伴,在这里就立马会提出一个疑问:调用友盟的这个方法会不会影响 APP 的移动速度?答案是多虑了。preInit() 作为预初始化函数,耗时极少,不会影响 App 首次冷启动的用户体验,不会采集设备信息,也不会向友盟后台上报数据。

友盟预初始化函数声明如下:public static void preInit(Context context, String appkey, String channel)

代码截图如下:


3. 客户端在用户同意隐私政策后,开始正式初始化友盟 SDK

调用初始化函数 UMConfigure.init(),友盟初始化函数声明如下:UMConfigure.init(Context context, String appkey, String channel, int deviceType, String pushSecret)

代码截图如下:


第五步、观察控制台统计数据

完成设置后,我们返回到首页,就可以查看相应的 APP 应用程序的统计信息了,包括异常次数、影响用户数、告警次数、云真机剩余分钟数等。


三、集成 SDK 过程中遇到的问题

问题 1.  错误: 程序包 com.umeng.commonsdk 不存在

个人感觉,这是最常见的一种错误,但是官方的文档中居然没有相关的说明。官方常见问题列表地址:https://developer.umeng.com/docs/119267/detail/181401 ,感觉其中很多内容都是官方自己总结的,不够接地气,比如这个错误就不知道应该归到哪一类。官方是不是可以考虑增加一个社区模块,方便开发者之间交流。具体位置可以参考下图:


最终,折腾了好久,也没有通过在线模式集成友盟 SDK,后来还是换成了本地依赖模式解决这个问题。


问题 2. SDK 集成好后,监控平台没有看到相关的统计数据

这个问题是我疏忽导致的,我以为在调用 UMConfigure.preInit()方法的时候传入 AppKey 就行了。而 UMConfigure.init()方法没有同步更新,因此导致了这个问题。我也由此断定,真正起到关联作用的方法是 UMConfigure.init()。当然也期待官方更合理的解释,因为我的理解可能有误。


问题 3. 报错:Installation did not succeed. The application could not be installed: INSTALL_FAILED_CONFLICTING_PROVIDER

集成友盟 SDK 后,安装 APP 时报了这个错误。后来,把之前老的 APP 从手机端卸载,再重新安装,问题解决。这样看来,和集成友盟 SDK 的关系不大,但是这个问题就是这么神奇。

四、实际问题定位与解决

我们完成友盟 SDK 集成后,就可以通过后台首页发现对应的应用名称集成状态显示“已集成”。同时,我们还可以查看应用程序的运行状态,比如异常次数和影响用户数。


接下来,我们根据具体的异常监控结果进行分析。

1. 崩溃实例分析

通过后台的“分析”页签,找到“崩溃分析”模块,可以发现今天有一例崩溃错误。


在当前页面往下划,我们可以看到相应的错误列表和错误分布。其中,错误列表包含了错误发生的摘要、ID、最近一次的发生时间、错误类型、版本范围、错误次数、影响用户数、处理状态等,具体内容如下图所示:


错误分布包含了设备分布、系统分布、运营商分布、版本分布、页面分布、时长分布、渠道分布、地域分布,具体内容如下图所示:


好了,接下来,我们具体分析一下这个错误。点击错误列表中错误摘要的链接进入错误详情,里边有错误的具体明细,比如下图所显示的错误原因是数组越界:ArrayIndexOutOfBoundsException,具体的代码位置在文件 UappActivity.java 的第 93 行。


我们找到对应的代码行数看一下代码情况,具体截图如下:


哇哦,看到代码再结合报错提示,我们立马知道了这行代码写的有问题,大小为 3 的数组,索引值最大为 2 ,不可能是 3,修改成 0、1、2,问题解决。

重新编译后安装,再运行看一下效果,执行相同的操作,崩溃不再发生。此时,我们就可以手动修改该崩溃的处理状态了,比如下图所示,将“未修复”修改为“已修复”,其中还包括另外两个状态,分别是“处理中”、“已忽略”。


2. 设置告警策略

另外,我们还可以针对某种错误类型设置告警策略,比如上面的崩溃问题,如果我们不确定是否真正解决了。那么就可以点击“告警”按钮,进入告警策略设置页面。


在新建告警计划页面中,我们需要设置告警计划名称,一般使用错误名称+错误 ID 的方式,但是注意不要超过 20 个字符。同时,还可以设置告警生效时间,默认实时通知,也可以自定义通知时间段,比如每周二的下午三点到四点。


另外,还可以自定义告警触发条件,一般都是错误发生次数大于 0 时就会生效。还可以指定生效的应用版本,比如我只想监控 APP 应用最新的 3.0 版本,就从下拉列表中选择对应的版本即可。通知方式可以选择邮箱、钉钉、企业微信、飞书中的至少一种,常见的方式是前两种。


但是,在实际使用过程中,自己尝试了两个告警计划,邮箱都没有收到对应的通知。对于这个功能官方好像没有版本限制,通知消息列表也是空的,非常奇怪,本来想把这个问题留给以后排查的。但是,后来不知过了多久,居然收到了邮件通知,看来延时还是挺大的。邮件截图如下所示:


3. 其他功能

友盟应用性能监控平台 U-APM 除了上边介绍的崩溃分析和告警通知功能外,还有 ANR 分析、自定义异常、卡顿分析、启动分析、内存分析、网络分析等功能模块。 

1)ANR 分析,ANR 是用户在使用 Android APP 过程中出现弹框,提示应用无响应,计为一次 ANR。稳定性模块可以捕获发生在主进程和子进程中的 ANR。通过对 ANR 发生次数的计算,为开发者展示了 App 在所选时间中的错误趋势、错误分布和错误列表,可快速地分析出导致 APP 发生 ANR 的主要原因。

注意事项:启动监控 ANR 功能,Android 需要集成 Common 9.3.8 及以上 + APM 1.1.0 及以上版本号。iOS 需要集成 Common 7.2.8 及以上 + APM 1.1.0 及以上版本号,升级后自动采集。

2)自定义异常,开发人员可以自己定义某种异常类型,程序对异常进行了捕获处理,为更好了解并监控这类异常,开发人员也将这类异常上报到友盟+的错误分析服务中。不得不说这个功能应用场景还是非常多的,Bugly 也有类似的功能。

3)卡顿分析,当消息设定时长超出卡顿的定义阈值后会被记为卡顿,可以作为判断应用性能的指标。解决卡顿问题在提升用户体验方面具有非常重要的意义,合理优化卡顿指标在 APP 开发过程中是一件中长期的任务。

注意事项:使用卡顿功能,Android 需要集成 Common 9.3.8 及以上 + APM 1.2.0 及以上版本号。iOS 需要集成 Common 7.2.8 及以上 + APM 1.2.0 及以上版本号,升级后自动采集。

4)启动分析,包括启动趋势、慢启动分析、启动过崩溃分析。通过监控 APP 应用启动耗时的平均值、分位值、区间分布等数据,以及启动阶段的性能分解数据,分析慢启动和启动崩溃的原因。

5)内存分析,包括 OOM 异常、内存占用。提供了 APP 在运行阶段的内存溢出、内存占用情况及分布详情,便于我们分析应用的健康状况和问题定位。

6)网络分析, 通过收集 HTTP 请求、网络错误、DNS 解析等维度的数据,分析当前应用的网络状况,有利于开发人员定位网络相关的编码问题,比如超时处理,断网重连等常见问题。

结尾

通过本文的介绍,我们可以看出友盟应用性能监控平台 U-APM 的集成过程还是比较简单的,另外,U-APM 平台具备丰富的数据收集和功能分析能力,而且在具体的功能颗粒度划分方面做得也非常细。相比同类产品,比如 Bugly、网易云捕等要强大很多。另外,在集成和使用过程中也遇到一些,并在文中有所体现,希望友盟团队不断完善 U-APM 平台,为移动端开发的小伙们带来新的福音。


作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位典型的音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家、华为云享专家(共创编辑)、InfoQ 签约作者,欢迎关注我分享更多干货!😄​

发布于: 刚刚阅读数: 2
用户头像

liuzhen007

关注

敲代码,搞开发。 2021.05.01 加入

本人深耕音视频技术,走全栈路线,前后端通吃,兼顾各端与流媒体服务器。 博客主页地址:https://liuzhen.blog.csdn.net 微信公众号:玩转音视频 欢迎交流学习!

评论

发布
暂无评论
如何利用友盟平台定位安卓端的程序异常 | 社区征文