Android全局异常捕获

原创 2016年08月29日 23:40:04

在Android开发中在所难免的会出现程序crash,俗称崩溃。用户的随意性访问出现测试时未知的Bug导致我们的程序crash,此时我们是无法直接获取的错误log的,也就无法修复Bug。这就会极大的影响用户体验,此时我们需要注册一个功能来捕获全局的异常信息,当程序出现crash信息,我们把错误log记录下来,上传到服务器,以便于我们能及时修复bug。这时我们就需要自己来进行处理,现在这里介绍用第三方库 Sentry-Android 来进行捕获,下面就开始在AS中进行实际操作。

在用这个之前先进行下面以下配置:

配置权限:

 <!-- REQUIRED to send captures to Sentry -->
<uses-permission android:name="android.permission.INTERNET" />

<!-- OPTIONAL but makes Sentry-Android smarter -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Gradle导入包

 compile 'com.joshdholtz.sentry:sentry-android:1.4.4'

在启动Activity中初始化Sentry,开始监听

 String yourDSN = "填写你自己的DSN";
        Sentry.init(this, yourDSN);
        Sentry.debug = true;
        Sentry.captureMessage("捕获异常数据的Log");

PS:直接使用Sentry的话,它只会把你手机的device、device.family、 level、 os、 os.name显示出来.

如需显示App手机其他信息的话就需要自定义SentryManager,下面我们就来自定义代码。

/**
 * Sentry 管理器,负责初始化 Sentry Client,并在捕捉事件时增加 OS, Device, Build 等设备和软件信息
 */
public class SentryManager {
    private final static String osVersion = Build.VERSION.RELEASE;
    private final static String deviceName = getDeviceName();
    private static int buildVersion = 0;

    /**
     * 初始化 Sentry
     * @param context 上下文
     */
    public static void init(final Context context, String dsn) {
        Sentry.setCaptureListener(new Sentry.SentryEventCaptureListener() {
            @Override
            public Sentry.SentryEventBuilder beforeCapture(Sentry.SentryEventBuilder builder) {
            //在这里面你想要什么信息的话直接builder.getTags().put("key", "值")就可以了
                try {
                    if (buildVersion == 0) {
                        buildVersion = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode;
                    }
                } catch (PackageManager.NameNotFoundException e) {
                    buildVersion = -1;
                }

                try {
                    builder.getTags().put("OS", osVersion);
                    builder.getTags().put("Device", deviceName);
                    builder.getTags().put("Build", buildVersion);
                } catch (JSONException e) {
                    // we do nothing
                }
                return builder;
            }
        });

        Sentry.init(context.getApplicationContext(), dsn);
    }

    /**
     * 获得设备名称
     *
     * @return 设备名称
     */
    private static String getDeviceName() {
        String manufacturer = Build.MANUFACTURER;
        String model = Build.MODEL;
        if (model.startsWith(manufacturer)) {
            return capitalize(model);
        } else {
            return capitalize(manufacturer) + " " + model;
        }
    }

    /**
     * 大写首字母
     *
     * @param s 字符串
     * @return 将首字母大写返回的字符串
     */
    private static String capitalize(String s) {
        if (s == null || s.length() == 0) {
            return "";
        }
        char first = s.charAt(0);
        if (Character.isUpperCase(first)) {
            return s;
        } else {
            return Character.toUpperCase(first) + s.substring(1);
        }
    }
}

在Activity调用,跟上面一样

String yourDSN = "填写你自己的DSN";
        SentryManager.init(this, yourDSN);
        Sentry.debug = true;
        Sentry.captureMessage("捕获异常数据的Log");

这里用到的第三方库地址 Sentry-Android

最后 这里还可以使用官方推出的Raven来进行捕捉,不过主干上还没有从本地上传到服务器上,不过起分支已有,可以去关注下 Raven官方出的捕获异常框架

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

android抓取错误日志并上报到服务器

开发中,app线上版本经常会出现这样那样的问题,那我们如何知道出现了什么问题呢?并且能快速定位到错误并有效解决呢?这里就涉及到错误日志或叫崩溃日志了。一般情况下,我们都会继承友盟等第三方的错误日志,来...

Android全局捕获崩溃异常记录日志保存至本地并定时删除

在程序发布出去之后,如果出现了崩溃现象,开发者应该及时获取在该设备上导致崩溃的信息,这对于下一个版本的bug修复帮助极大,所以今天就来介绍一下如何在程序崩溃的情况下收集相关的设备参数信息和具体的异常信...

Android_APP级异常捕获实现方式

描述:App级异常捕获,并记录下CrashLog到文件。以下,代码。在Application的,onCreate中,初始化自定义的CrashHandlerimport android.app.Appl...

安卓全局异常捕获--自定义错误详情页

Android自定义处理崩溃异常 http://blog.csdn.net/baiyuliang2013/article/details/38681765应用中的崩溃问题对于APP开发者是最头疼的问题...

Android自定义捕获Application全局异常

大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了...
  • jdsjlzx
  • jdsjlzx
  • 2012年05月27日 13:16
  • 44604

Android全局异常捕获机制

安卓异常整体解决方案,从异常捕获、到异常日志写入、到异常上报等。。

Android 全局异常捕获

今天就来说说作为程序猿的我们每天都会遇到的东西bug,出bug不可怕可怕的是没有出bug时的堆栈信息,那么对于bug的信息收集就显得尤为重要了,一般用第三方bugly或者友盟等等都能轻易收集,但是由于...

详解Android全局异常的捕获处理

这篇文章主要为大家介绍了Android全局异常的捕获处理,为什么要进行捕获处理,如何进行捕获处理,想要了解的朋友可以参考一下 在Android开发中在所难免的会出现程序crash,俗称崩溃。用户的随...

Android全局异常处理(捕获异常,不弹出程序崩溃)

在做android项目开发时,大家都知道如果程序出错了,会弹出来一个强制退出的弹出框,这个本身没什么问题,但是这个UI实在是太丑了,别说用户接受不了,就连我们自己本身可能都接受不了。虽然我们在发布程序...

Android开发之全局异常捕获

Android开发之全局异常捕获今晨谷歌正式发布Android 8.0,新版本的Android O系统对API做出了各种变更,其中大部分会影响到很多应用,其中包括记录未捕获的异常. 如果某个应用安装...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android全局异常捕获
举报原因:
原因补充:

(最多只允许输入30个字)