Android 的两种崩溃

  • Java 崩溃就是在 Java 代码中,出现了未捕获的异常,导致程序异常退出
  • Native 崩溃一般都是因为在 Native 代码中访问非法地址,也可能是地址对齐出了问题,或者发生了程序主动 abort,这些都会产生响应的 singal 信号,导致程序异常退出

1.Native 崩溃的捕获流程

参考资料: Android 平台 Native 代码的崩溃捕获机制及实现

  • 编译端编译时保留带符号信息的文件;
  • 客户端将崩溃日志和尽可能多的有用信息写入日志文件,并上传到服务器;
  • 服务端读取日志文件,找到适合的符号文件,生成可读的 C 调用栈。

2.Native 崩溃捕获的难点

最核心的是怎么样保证客户端在各种极端情况下一日可以生成崩溃日志。
Chromium 的 Breakpad 是目前 Native 崩溃捕获中最成熟的方案。

3.选择合适的崩溃服务

  • 腾讯 Bugly
  • 阿里 啄木鸟平台
  • 网易云捕
  • Google Firebase

如何客观地衡量崩溃

如果想评估崩溃造成的用户影响范围,先去看 UV 崩溃率。

UV 崩溃率 = 发生崩溃的 UV / 登录的 UV

常用指标还有 PV 崩溃率、启动崩溃率、重复崩溃率。

启动崩溃对用户伤害最大,应用无法启动往往通过热修复也无法拯救。
重运营的应用汇使用”安全模式“来保证客户端的启动流程。

参考资料:

PV 即 Page View,网站浏览量,指页面的浏览次数,用以衡量网站用户访问的网页数量。用户没打开一个页面便记录1次PV,多次打开同一页面则浏览量累计;
UV 即Unique Vistor,独立访客数,指1天内访问某站点的人数,以cookie为依据。1天内同一访客的多次访问只计为1个访客;

淘宝团队是如何进行稳定性测试的
安全模式:天猫App启动保护实践

如何客观地衡量稳定性

如何发现应用中的ANR

  1. 使用 FileObserver 监听 /data/anr/traces.txt 的变化
    高版本没有这个文件读取权限了,海外可以使用 Google Play 服务,国内微信利用 HardCoder 框架

  2. 监控消息队列的运行时间
    缺点是无法准确判断,也无法得到完整日志

异常率

应用退出的情景

  • 主动自杀
  • 崩溃
  • 系统重启
  • 被系统杀死
  • ANR

通过设置标志位,主动自杀或崩溃后更新标志位,在启动应用时检查标志位,可以统计到异常退出情况。

UV 异常率 = 发生异常退出或崩溃的 UV / 登录 UV

通过异常率我们可以比较全面的评估应用的稳定性。

课后作业

题目:使用 Breakpad 来捕获一个 Native 崩溃。

步骤如下:

  1. clone 项目到本地,导入 AS
  2. 由于早就配置过 ndk 环境,因此这一步跳过,直接可以跑起来
  3. 点击 APP 上的 CRASH 按钮,应用闪退,获得 crash 日志 714cda98-1316-41cc-c1da0ca0-03b243a0.dmp,在 /sdcard/crashDump/ 目录下
  4. 将其 pull 到本地
  5. 尝试使用项目中提供的 minidump_stackwalk 工具分析 dmp 文件,运行报错
  6. 根据提示这个 minidump_stackwalk 文件需要自己重新编译,找到breakpad的主页,按照步骤操作,编译成功
  7. 使用编译好的 minidump_stackwalk 工具分析 dmp 文件,运行成功,获得关键信息: Thread 0 (crashed) 0 libcrash-lib.so + 0x77e
  8. 找到 libcrash-lib.so 拷到当前目录,运行 arm-linux-androideabi-addr2line 命令,定位到报错方法
➜  chapter01 /Users/daniel/Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-addr2line -f -C -e libcrash-lib.so 0x77e
Crash()
/Users/daniel/Workspace/Chapter01/sample/src/main/cpp/crash.cpp:10

转载于:https://www.cnblogs.com/fengdianzhang/p/10722869.html

Android开发高手课笔记 - 01 崩溃优化(上):关于“崩溃”那点事相关推荐

  1. Android开发高手课笔记--如何打造高质量应用?

    前言 学习<Android开发高手课>也有一段时间了,确实对技术的提高很有帮助,可以开拓自己的视野.想利用这一段时间好好整理下学习笔记,以便回顾.由于版权问题,后续笔记不再公开,感兴趣可扫 ...

  2. 张绍文android开发高手课读书笔记1

    本系列博文 基于是前微信高级工程师张绍文专栏 <Android开发高手课>的读书笔记. 文章所写内容是本人读完的感悟,需要原文的朋友请自行购买. Android的开发前景如何 移动互联网发 ...

  3. 《Android开发高手课》学习笔记

    最近在学习张绍文老师的<Android开发高手课>课程,学习到了很多的干货,特别是在处理问题的策略和知识的广度方面给了我很多的启发,对未来的学习也提供了方向. 目前,技术的发展有两个趋势. ...

  4. Android 开发高手课 温故知新篇

    首先推荐大家先阅读<Android 开发高手课>和我之前的三篇练习: Android 开发高手课 课后练习(1 ~ 5) Android 开发高手课 课后练习(6 ~ 8,12,17,19 ...

  5. Android 开发高手课 课后练习(1 ~ 5)

    最近在学习张绍文老师的<Android 开发高手课>.课后作业可不是一般的难,最近几天抽空练习了一下,结合老师给的步骤与完成的同学经验,完成了前五课的内容. 本系列其他内容: Androi ...

  6. 学习Android开发高手课

    在极客时间推出<Android开发高手课>的时候就开始跟着学了,但是发现课程里的东西很难,很多知识点都不会,跟着跟着就没再继续下去,直到有一天看到这门课程全部已经结束了,心中无限感慨.自己 ...

  7. android 优化启动事件,张绍文android开发高手课读书笔记4-启动优化篇

    启动优化篇 在说如何对启动时间进行优化之前,我们得先知道从用户点击应用图标开始,一共经历了那些阶段. 主要阶段如下图. image T0-T1阶段 这个阶段是手机系统解析点击事件,效应快慢跟手机性能有 ...

  8. android开发 解析 b5,张绍文android开发高手课读书笔记4-启动优化篇

    启动优化篇 在说如何对启动时间进行优化之前,我们得先知道从用户点击应用图标开始,一共经历了那些阶段. 主要阶段如下图. image T0-T1阶段 这个阶段是手机系统解析点击事件,效应快慢跟手机性能有 ...

  9. android开发高手课百度云盘,Android开发高手课NOTE

    内存优化 卡顿的原因 频繁 GC 造成卡顿.物理内存不足时系统会触发 low memory killer 机制,系统负载过高是造成卡顿的俩个原因. 除了频繁 GC 造成卡顿之外,物理内存不足时系统会触 ...

最新文章

  1. Spring MVC静态资源处理(转)
  2. java随机生成不重复的数组_Java生成不重复的随机数组的方法
  3. python 播放视频 ftp_利用 Python 实现文件自动备份到 ftp 服务器
  4. 玩转iPhone网络通讯之BSD Socket篇
  5. C#.NET 可以为不同的客户定制不同的登录窗体的设计思路参考【功能代码组件化,可以灵活选配】...
  6. 构建高性能.NET应用之配置高可用IIS服务器-第四篇 IIS常见问题之:工作进程回收机制(上)
  7. 没有标题,配得上这款“俄罗斯方块”
  8. mybatis-plus 会自动增加 order by_python自动撸支付宝基金答题红包
  9. BERT跨模态之后:占领了视觉常识推理任务榜单TOP 2!
  10. glassfish上部署firstcup-war
  11. php图片存储内容读取,php读取和保存base64编码的图片内容
  12. Sqlite - constraint failed[0x1555]: UNIQUE constraint failed
  13. CDKEY制作:为什么不能使用RSA?
  14. ResNet 残差神经网络(小白版)
  15. sql查询每科成绩最高的人和分数
  16. 百度这个写在控制台的消息:2021百度校招
  17. 深度解读:阿里云视频直播功能升级
  18. elasticsearch7.8.0入门操作
  19. 一款APP从设计稿到切图过程全方位揭秘(IOS版)
  20. 基于selenium的QQ空间自动点赞功能(2020年7月版)

热门文章

  1. Gate 7.2的安装与部署(一)
  2. 什么是AJAX?如何实现AJAX异步请求?
  3. Myabtis-plus中IService接口理解
  4. voip是利用计算机网络,计算机三级网络技术VoIP概述
  5. 自己动手丰衣足食之图片放大镜
  6. 百度地图怎么查看全景(教程)
  7. 第五章 生活无处不数据,大数据真的能算命?
  8. 硅谷如何看待阿里巴巴?
  9. 计算机考试答题设计用例图,学生网上考试系统的设计与实现
  10. 塔望3W消费战略全案丨绿力冬瓜茶 三十年饮料老品牌,两年复兴战全国