技术干货 | mPaaS 框架下如何使用 Crash SDK 对闪退进行分析?

本文涉及的产品
mPaaS订阅基础套餐,标准版 3个月
简介: Android Native Crash 处理案例分享

封面图1217.png

目前 mPaaS Android 是使用的是 Crash SDK 对闪退进行的处理,Crash SDK 是 Android 平台上一款功能强大的崩溃日志收集 SDK,有着极高的崩溃收集率和完整、全面的崩溃日志信息,生成的日志内容非常利于问题的跟进和解决。

在我们的日常运维中,经常遇到一些闪退,无法直接从闪退堆栈看到原因,尤其是一些非 Java 的 Native 的闪退,这里分享下在 mPaaS 框架下怎么使用 Crash SDK 对闪退进行分析。

闪退报文分析工具介绍

对于 mPaaS 的用户,从 MAS 上闪退分析平台导出的一般是原始的闪退信息,闪退信息比较多,如果直接阅读会比较困难,使用者可以通过下载 Chrome 的插件 LogAnalyzer

LogAnalyzer 会将 Crash SDK 生成的日志文本内容转化成可视效果较强的 HTML 页面展现,功能还是很强大的,主要包含:

  1. 高亮显示日志中重点信息,并使用不同颜色区分;
  2. 支持日志内容整体结构预览,快速定位重点内容;
  3. 常见崩溃原因提醒;

安装好 Chrome 插件后,还需要做以下配置

1. 修改闪退文件后缀为 .txt

由于 MAS 上默认下载的文件后缀是.dat,需要改为.txt,否则 LogAnalyzer 会不识别。

2. 修改插件配置

由于 Chrome 默认权限限制,任何 Chrome 插件默认都不能访问文件网址,需要在 Chrome 插件中进行如下操作。

1.打开 Chrome 插件管理页面 chrome://extensions/

2.找到 LogAnalyzer 插件,点击 “详细信息" 进入设置:

1.png

3.找到允许访问文件网址选项,并勾选;
4.打开或者刷新日志页面,LogAnalyzer 就生效了。

3. 生效效果

把日志文件直接拖到 Chrome 后,可以看到右边插件生效后,可以通过不同颜色显示闪退信息的各个字段。

首次打开后的使用说明如下:
2.png

正常查看闪退截图如下:
3.png

闪退分析举例

我们经常在日常运维中遇到一些非 Java 的 Native 模块闪退,比如 UC。这种时候很多时候只能去联系 UC 团队进行支撑,其实很多场景下,闪退的根因并不是 UC,只是最后的闪退点在 UC。

以最近日常运维中比较常遇到的 UC 内核的闪退为例,对一些案例的处理分享如下。

1. Java 空指针导致 UC 闪退

我们在闪退点上可以看到以下闪退(已经隐藏客户 apk 相关信息),如果只是从这看我们暂时没有任何线索,我们继续往下看日志:

4.png

当看到 logcat 节点信息的时候,我们发现了线索,首先我们看到关键字:begin to generate native report,表示当前是闪退日志上报的日志,我们再往前看,logcat 节点里打印了异常堆栈信息。

从堆栈信息可以看到,是由于 precreate 操作触发了底层的空指针,从而导致初始化异常,最后触发了闪退。解决方案就是临时关闭预创建,从而规避了闪退。

5.png

从上面的案例我们可以看出:

  1. Native 的闪退不一定是 Native 模块的原因导致的,有可能是由于 Java 导致的异常,从而导致 Native 闪退;
  2. begin to generate native report 附近可以看闪退相关的 logcat 信息,协助定位闪退的一些上下文日志。

2. 上层 OOM 导致 UC 闪退

首先我们看上报的闪退点的日志如下图所示,闪退在了 RenderThread 里,也是毫无头绪。

6.png

我们继续硬着头皮往下看,在 logcat 节点里查找 begin to generate native report 上报节点,我们看到了大量的底层 OOM 的异常日志,基本大概率确定是 OOM 的原因了。

剩下的就是查找 OOM 是哪里触发的。

7.png

点击闪退里的内存节点,基本原因就比较清晰了,当前手机的 Vmsize 基本已经到最大了,我们知道对于 32 位的进程,APP 可使用的 VmSize 最大为 3GB,不过当运行在 64 位 CPU 上时,VmSize 最大可超过 3GB,接近 4GB。

但是由于内核需要占据一部分,以及不同的 ROM 版本的差别,我们发现有以下规律:Android 8.1.0 及之后的系统,大部分 native oom crash 发生时 VmSize 分布在 3.5 - 3.9 G 的位置,相对较为集中。所以下面的案例的解决思路就变成了怎么解决 OOM 了。

8.png

3. FD 误关导致 UC 闪退

上报的日志如下图所示,我们大概只能看出 SIGILL 有可能是主动崩溃,崩溃 ILL_ILLOPC 表示非法操作。

9.png

然后我们继续看 logcat 节点的 begin to generate native report, 基本确认原因是因为 UC 使用的 FD 对象被其他程序关闭。

10.png

随后 UC 提供了带 FDscan 的工具包,通过我们复现后发现,是由于 UC 调用 shouldIntercept 回调的输入流对象被其他模块 close 掉了,导致 UC 使用的时候发现 FD 对象已经被关闭,从而做了崩溃处理。最后的处理方案就变成了用户解决其他模块的误关 FD 的问题。

11.png

总结

综合以上的 Case 分析,在遇到 Native 模块闪退的时候,一般如果从直接的闪退堆栈看不出原因的时候,不要心急,可以搜索 begin to generate native report 找到崩溃上下文,多看看 logcat 闪退上下文的日志,会有一些收获,同时对于 oom 类型的问题,可以结合当前内存统计来看。

关于 mPaaS MAS

MAS 移动分析服务:通过多端埋点数据的采集与分析,实现产品核心指标监控。

支持应用稳定性分析,包括闪退监控、异常监控、性能监控及用户诊断功能,帮助开发人员及时发现、定位问题。

帮助企业更好的完成业务监控、用户洞察与行为分析,指导产品迭代,精细化产品运营,辅助营销决策,加速业务商业化。

点击了解MAS更多资讯

{D33747FD-25B2-4CF9-A71F-03112FFC6940}.png.jpg

延伸阅读

动态-logo.gif

底部banner.png

- END -

相关文章
|
7月前
|
移动开发 前端开发 Android开发
mPaaS 常见问题之移动开发平台 mpaas的H5 前端 Kylin 框架引入vant后包特别大如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
258 0
|
7月前
|
Web App开发 移动开发 小程序
mPaaS常见问题之安装之后SDK管理器中是空的如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
104 0
|
7月前
|
Android开发
在mPaaS框架中,要自定义通知栏背景色
【1月更文挑战第13天】【1月更文挑战第65篇】在mPaaS框架中,要自定义通知栏背景色
63 1
|
开发工具 C++ 容器
带你读《2022技术人的百宝黑皮书》——跨全端SDK技术演进(1)
带你读《2022技术人的百宝黑皮书》——跨全端SDK技术演进(1)
122 0
|
中间件 开发工具 Android开发
带你读《2022技术人的百宝黑皮书》——跨全端SDK技术演进(2)
带你读《2022技术人的百宝黑皮书》——跨全端SDK技术演进(2)
116 0
|
2月前
|
存储 安全 开发工具
百度公共IM系统的Andriod端IM SDK组件架构设计与技术实现
本文主要介绍了百度公共IM系统的Andriod端IM SDK的建设背景、IM SDK主要结构和工作流程以及建设过程遇到的问题和解决方案。
62 3
|
2月前
|
存储 文字识别 算法
解析!文档扫描 SDK 中的高级图像处理技术
本博客讨论了图像质量在文档扫描中的重要性,解决了扫描过程中遇到的常见挑战,以及文档扫描 SDK 利用先进的图像处理技术来应对这些挑战。
|
5月前
|
JSON 运维 Serverless
Serverless 应用引擎使用问题之ThinkPHP框架是否有基于SDK的demo
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
4月前
|
编解码 Linux 开发工具
大牛直播SDK跨平台RTMP直播推送模块技术设计和功能列表
大牛直播SDK是一款跨平台RTMP直播推送模块,支持Windows、Linux(x64_64与aarch64架构)、Android及iOS平台。该SDK功能全面,包括摄像头、屏幕、麦克风等数据采集与推送,并支持编码前后数据对接。其架构设计优秀,确保低延迟与高效率,结合SmartPlayer播放器实现毫秒级延迟体验。具备全自研框架,易于扩展且支持多种数据源接入,如外部YUV/RGB/H.264等格式。此外,各平台支持特性丰富,如Windows平台支持多摄像头合成,Android与iOS平台支持前后摄像头实时切换等。大牛直播SDK还提供了多个示例项目以帮助开发者快速上手。
108 0
|
6月前
|
JSON 前端开发 JavaScript
技术笔记:vmware之VMwareRemoteConsole(VMRC)SDK(二)
技术笔记:vmware之VMwareRemoteConsole(VMRC)SDK(二)
274 0

热门文章

最新文章

相关产品

  • 移动开发平台 mPaaS