Android Crash日志收集

本文介绍了在Android开发中如何实现自定义的UncaughtExceptionHandler来收集Crash信息,并将其存储在SD卡中。同时,文章详细讲解了接入Bugly第三方服务进行Crash日志的上报与管理,以及如何在Google Play Console中查看Crash统计信息。此外,还探讨了扩展Crash收集以捕获更多信息和处理Native层Crash的方法。
摘要由CSDN通过智能技术生成

概述

在Android应用的开发过程中,总会遇到应用程序Crash。在编码阶段,设备连接到PC,可以在Android Studio的Logcat中可以查看Crash的信息。但是很明显,靠这种方式收集Crash日志修改bug,实在是太不靠谱,一旦APP发布测试甚至生产环境,如果没有一个Crash日志的反馈,那么将会是一个噩梦,所以本文的目的:

  1. 实现自定义的UncaughtExceptionHandler,收集Crash的信息和设备的基本信息,并写入设备的SD卡中;
  2. 接入第三方SDK(Bugly),收集和上报到第三方平台;
  3. 发布到Google Play的APP,在Google Play Console中查看Crash统计信息。

有了Bugly或者其它第三方平台(如友盟等),可以很方便地管理Crash日志,通过分析日志可以尽快解决bug。而写入设备SD卡中的Crash日志文件则方便在测试阶段查看和分析,必要时也可以发送到自己的后台服务器。

自定义 UncaughtExceptionHandler

捕抓Crash事件

应用程序的Crash事件是可以捕抓的,在自定义的Application中添加一行代码,UncaughtExceptionHandler接口即可:

override fun onCreate() {
    super.onCreate()
    Thread.setDefaultUncaughtExceptionHandler(CrashExceptionHandler.getInstance(this))
}

实现CrashExceptionHandler

UncaughtExceptionHandler接口只有一个方法uncaughtException(thread: Thread, ex: Throwable),Crash信息就在ex中。除了Crash日志外,为了方便调试,一般还需要收集设备的基本信息(在collectDeviceInfo(context)中处理),然后把收集到的信息写入文件(writeCrashInfoIntoFile(ex)),最后将Crash交给默认的UncaughtExceptionHandler处理,基本就完成了:

class CrashExceptionHandler private constructor(context: Context) : UncaughtExceptionHandler {
    override fun uncaughtException(thread: Thread, ex: Throwable) {
        collectDeviceInfo(context)
        writeCrashInfoIntoFile(ex)
        defaultHandler!!.uncaughtException(thread, ex)
    }
}

CrashExceptionHandler类的完整代码如下:


import android.content.Context
import android.content.pm.PackageManager
import android.content.pm.PackageManager.NameNotFoundException
import android.os.Build
import android.util.Log
import java.io.*
import java.lang.Thread.UncaughtExceptionHandler
import java.text.SimpleDateFormat
import java.util.*

class CrashExce
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值