Android崩溃日志收集

版权声明:转载请邮件联系我([email protected]),以取得授权,谢谢! https://blog.csdn.net/yeshennet/article/details/85000854

crash日志收集这个已经有许多成熟的第三方库实现了这个功能了,大多是以服务的方式提供,这里有个上传日志的需求,在用户本地的信息需要采集和数据处理。

  • 如果是创业公司,国内建议使用网易云捕或者腾讯Bugly
  • 国外建议使用Crashlytics
  • 如果要自己搭建服务器收集,可以参考这个项目:ACRA

但是如果你要自己从头写一个的话,可以参考我这篇文章。

JVM异常

android支持jvm代码(java/kotlin),也支持native代码。jvm的异常可以这样获得。

参考:Thread.UncaughtExceptionHandler

这个就是在JVM虚拟机在中断退出之前调用的

public class CustomCrashHandler implements Thread.UncaughtExceptionHandler {

    private Thread.UncaughtExceptionHandler PreviousHandler;

    void Init(Context context) {
        PreviousHandler = Thread.getDefaultUncaughtExceptionHandler();
        Thread.setDefaultUncaughtExceptionHandler(this);
    }

    @Override
    public void uncaughtException(Thread t, Throwable e) {
        // TODO handle crash
        PreviousHandler.uncaughtException(t, e);
    }
}

这里有一个点,就是我们的Android代码通常会有一个混淆的过程,混淆之后,函数名就变成一些奇奇怪怪的abc,但是有个mapping文件,通过这个mapping文件,可以解混淆。PS:IOS也有类似的机制。

现在很多的日志收集库只有一个收集点,就是在上面代码中的TODO 中做处理。一般会抓取手机的很多信息。举个例子:

New Trace collected :
=====================
Error Report collected on : Fri Dec 14 11:37:05 GMT+09:00 2018

Version : 1.0
Package : org.yeshen.crash.crash
FilePath : null
Phone ModelNexus 5
Android Version : 6.0.1
Board : hammerhead
Brand : google
Device : hammerhead
Display : M4B30Z
Finger Print : google/hammerhead/hammerhead:6.0.1/M4B30Z/3437181:user/release-keys
Host : wpdu6.hot.corp.google.com
ID : M4B30Z
Model : Nexus 5
Product : hammerhead
Tags : release-keys
Time : 1478203422000
Type : user
User : android-build
Total Internal memory : 13478064128
Available Internal memory : 9637191680
Custom Informations :
=====================

Stack : 
java.lang.RuntimeException: what the fuck

Cause : 
======= 
****  End of current Report ***

前端在这里会有缓存策略,不会实时上传。后端这里有不少工作量,一个是文件存储与分析,二是数据统计与展示。好一点的处理平台还会对通用错误做修复提示。

收集日志的服务我们会比较在意,是因为这里有大量的漏洞信息/用户信息。如果收集日志的服务提供商节操低一点或者是竞争对手的话,就有点糟糕了。

native 异常

native的异常通常是触发了硬件中断的信号,native层的异常可以通过signalhandler来处理。分析上报可以通过jni走回jvm层或存成文件等重启之后待jvm代码一并处理。

从头做也许没什么概念,所以是先参考了一些现成的经典的库的:

breakpad
breakpad的文档看 这里
Android适配参考 breakpad-for-android

// TODO

参考文章:

how-to-improve-your-application-crash

猜你喜欢

转载自blog.csdn.net/yeshennet/article/details/85000854