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

Android开发高手课笔记 - 01 崩溃优化(上):关于“崩溃”那点事的更多相关文章

  1. Android开发高手课NOTE

    最近学习了极客时间的<Android开发高手课>很有收获,记录总结一下. 欢迎学习老师的专栏:Android开发高手课 内存优化 卡顿的原因 频繁 GC 造成卡顿.物理内存不足时系统会触发 ...

  2. Android开发高手课 - 02 崩溃优化(下):应用崩溃了,你应该如何去分析?

    崩溃现场 1. 崩溃信息 进程名.线程名 崩溃类型和堆栈信息 2. 系统信息 Logcat 机型.系统.厂商.CPU.ABI.Linux 版本等 设备状态:是否 root.是否模拟器.是否有 Xpos ...

  3. 【Android开发高手笔记】Dagger2和它在SystemUI上的应用

    和人类需要群居一样,程序界的进程.线程也需要通信往来.它们的交流则依赖模块之间.文件之间产生的关系.如何快速地搞清和构建这种关系,同时还能减轻彼此的依赖,需要开发者们认真思考. 我们将这种需求称之为依 ...

  4. 阿里内部资料:Android开发核心知识笔记共2100页,58万字,完整版开放下载

    作为一个3-5年的Android工程师,我们经常会遇到这些瓶颈: 1.技术视野窄长期在小型软件公司,外包公司工作,技术视野被限制的太厉害 2.薪资提升难初中级Android岗位薪资上升空间有限,基本上 ...

  5. Android开发艺术探索笔记——View(二)

    Android开发艺术探索笔记--View(二) View的事件分发机制 学习资料: 1.Understanding Android Input Touch Events System Framewo ...

  6. Android开发艺术探索笔记—— View(一)

    Android开发艺术探索笔记 --View(一) View的基础知识 什么是View View是Android中所有控件的基类.是一种界面层控件的抽象. View的位置参数 参数名 获取方式 含义 ...

  7. Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式

    Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activ ...

  8. 「Android 开发」入门笔记

    「Android 开发」入门笔记(界面编程篇) ------每日摘要------ DAY-1: 学习笔记: Android应用结构分析 界面编程与视图(View)组件 布局管理器 问题整理: Andr ...

  9. Ubuntu虚拟机+ROS+Android开发环境配置笔记

    Ubuntu虚拟机+ROS+Android开发环境配置笔记 虚拟机设置: 1.本地环境:Windows 7:VMWare:联网 2.虚拟环境 :Ubuntu 14.04. 比較稳定,且支持非常多ROS ...

随机推荐

  1. cookie & cookies

    cookie & cookies "use strict"; /** * * @author xgqfrms * @license MIT * @copyright xgq ...

  2. 洛谷 P3203 BZOJ 2002 [Hnoi2010]Bounce 弹飞绵羊

    题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系 ...

  3. vue.js嵌套路由-------由浅入深

    嵌套路由就是路由里面嵌套他的子路由 子路由关键属性children 每一个子路由里面可以嵌套多个组件 子组件又有路由导航和路由容器 <router-link to="/父路由的地址名字 ...

  4. [bzoj1070][SCOI2007]修车[ 网络流]

    把每个工人拆成N个点.记为A[i,j]表示第i个工人修倒数第j辆车.每个车跟所有N*M个工人拆出的点连边.流量为1,费用为$time[i,j]*k$.源和每辆车连边,N*M个点和汇连边,流量都为1,费 ...

  5. Sql语句中关于如何在like '%?%'中给?赋值

    做模糊查询用户的时候,如果 String sql="select * from users where name like %?%"; String[] param={userna ...

  6. xcode5修改APP名字

    bundle display name 配置文件里面设置, 这个指的是显示在icon下面的名字.application name在itunes connect上改, 是指显示在app store上的名 ...

  7. HDU——1267 下沙的沙子有几粒?

    下沙的沙子有几粒? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  8. css上下垂直居中方法总结

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Chrome资源嗅探器应用

    http://hi.baidu.com/thankyouanyway/item/5230a49a7665848959146142 在网上转转,经常会发现一些好视频,但是往往找不到下载地址,或者需要安装 ...

  10. PS和AI软件差别

    首先.PS是处理位图图像的.AI是处理矢量图图形的.那就先说一下两者最主要的问题,位图与矢量图的差别和优缺点.  在计算机画图领域中.依据成图原理和绘制方法的不同.数字图形.图像分为"矢量图 ...