Andoird Crash的跟踪方法,使用腾讯Bugly来捕捉一些疑难杂症,让我们APP稳定上线

Andoird Crash的跟踪方法,使用腾讯Bugly来捕捉一些疑难杂症,让我们APP稳定上线


我们在开发中常常会注意到一些Crash,这正是很头疼的,而且Crash会带来很多意想不到的状态,很恶心,所以今天,我们来着重研究一下Crash,同时,我们也将使用第三方SDK,也就是腾讯的Bugly来扑捉这些Crash,让他无所遁形。

一.糟糕的Android Crash

作为开发人员,很容易就能碰到Crash,但是作为用户,我相信也有很大部分人碰到过Crash,这些原因,也正是Android的平台差异化和适配所导致的,而且,你要是你安装一个软件就Crash,我想你会立马把他卸载掉。同时心理嘲笑了一下开发人员,有些用户还有可能会去商店给你差评之类的,这就不多说了,反正会直接影响到你APP的口碑和市场竞争能力,你要是一些用户很多的APP的话,你还得考虑用户留存和收入的问题了

而在以前,我们是怎么处理Crash的呢?一般有三个补救措施吧,感觉,当然,还有其他,待补充:

  • 1.等待用户反馈,这样很被动
  • 2.了解出错原因,让用户提供日志和使用场景,不靠谱,攒人品吧
  • 3.提示用户反馈,这样对用户体验有点糟糕

而在以前,很多厂商基本都这样搞过,归根究底,还是现在的APP质量,仍然不敢恭维

我今天讲的是腾讯的Bugly处理Crash的方式,主要还是因为他使用比较简单吧,初始化也就一行代码,而且可以监控和获取日志,挺不错的

二. Crash分类

一般Crash也是分了两类

  • Java Crash

java代码触发,Jvm虚拟机退出,系统弹框提醒用户,这个我们可以看log查看报错原因,Crash工具都能捕获到。

  • Native Crash

C/C++代码触发,Linux进程退出,无系统提示,这就需要一些第三方工具去捕获了

三.模拟Crash的产生

其实我们可以非常简单的实现一个java的Crash,比如空指针,很正常就能产生,我们这样来写MainActivity

public class MainActivity extends AppCompatActivity {

    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button.setText("Android Crash");
    }
}

我都没给这个button初始化就赋值,肯定会报空指针异常,效果如上图,而在我们上图中是提到的,我们可以使用log去收集错误

我们可以看到他的错误是空指针,而错误在MainActivity的16行

这样我们的问题就一下子找到了

而如果集成了腾讯Bugly的话,他输出的日志就比较详细了,那具体是怎样的输出,我们现在就来集成一下把!

四.集成腾讯Bugly

要集成Bugly,肯定要去Bugly的官网

当然,Bugly的集成还是相对来说比较简单的,我们只要按照他的官方文档来

首先要做的,就是下载SDK了(如果你添加依赖的话,就不需要下载)

下载之后,我们可以看到他里面包含着四个文件

我们可以根据他们的接入指南来,因为我们是android studio开发,所以我把流程走一遍

在Module的build.gradle文件中添加依赖和属性配置:

dependencies {
    compile 'com.tencent.bugly:crashreport:latest.release' //其中latest.release指代最新版本号,也可以指定明确的版本号,例如2.1.5
}

这里要注意了,Bugly还提供了ndk动态库,我们如果要看C的日志可以使用

如果你集成了这些的话,你在Module的build.gradle文件中添加依赖和属性配置:

android {
   defaultConfig {
        ndk {
            // 设置支持的SO库架构
            abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
        }
    }
}
dependencies {
    compile 'com.tencent.bugly:crashreport:latest.release' //其中latest.release指代最新版本号,也可以指定明确的版本号,例如2.1.5
    compile 'com.tencent.bugly:nativecrashreport:latest.release' //其中latest.release指代最新版本号,也可以指定明确的版本号,例如2.2.0
}

可以参考官方提供的这张图

注意:自动集成时会自动包含Bugly SO库,建议在Module的build.gradle文件中使用NDK的“abiFilter”配置,设置支持的SO库架构。
如果在添加“abiFilter”之后Android Studio出现以下提示:

NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin.

则在项目根目录的gradle.properties文件中添加:

android.useDeprecatedNdk=true

接着你就可以添加他所需要的一些权限了

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_LOGS" />

好,现在我们需要去注册一个APP了,进入你的后阳台选择注册app

注册成功之后就可以看到全貌了,并且可以看到appid了,我们需要这个id

现在我们拿到了APPID:900033301,那我们可以去初始化了,建议是在Application中,所以我新建一个Application,并在清单文件,Application的根节点添加name属性

package com.lgl.androidcrash;

import android.app.Application;

import com.tencent.bugly.crashreport.CrashReport;

/**
 * Application初始化
 * Created by LGL on 2016/6/10.
 */
public class CrashApplication extends Application {

    //初始化
    @Override
    public void onCreate() {
        super.onCreate();
        //是否调试
        CrashReport.initCrashReport(getApplicationContext(), "900033301", false);

    }
}

到这里,Bugly的配置基本上是OK的,我们可以引起一个bug,然后日志过滤一下

便可以看到



当然,你也可以去Bugly的后台查看

我们可以查看详情

分析的很透彻,我们很容易就找到问题的所在了

关于腾讯Bugly还有很多妙用,推荐大家详细阅读他们的文档,本博客只是抛砖引玉来教大家如何的使用罢了,终究只是一些皮毛而已,谢谢各位看官赏脸。

我的群:555974449可以来讨论讨论!

时间: 2024-09-28 09:14:38

Andoird Crash的跟踪方法,使用腾讯Bugly来捕捉一些疑难杂症,让我们APP稳定上线的相关文章

iOS Crash常规跟踪方法及Bugly集成运用详细介绍_IOS

iOS Crash常规跟踪方法及Bugly集成运用 当app出现崩溃, 研发阶段一般可以通过以下方式来跟踪crash信息 #1.模拟器运行, 查看xcode错误日志 #2.真机调试, 查看xcode错误日志 #3.真机运行, 查看device系统日志  下面举例说明, 先写一段会Crash的代码crashdemo: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the vie

《中国人工智能学会通讯》——11.68 基于锚点标签传播的判别式跟踪 方法

11.68 基于锚点标签传播的判别式跟踪 方法 在跟踪中,物体的表观通常是连续不断的变化且不可能是独立同分布的.一个鲁棒的判别式跟踪算法通常需要大量的有标签样本来拟合目标表观潜在的数据分布.然而,精确的有标签样本通常只来自于第一帧,因此数量有限.为了获取更多的有标签样本,大多数算法都是利用当前帧的跟踪结果加较小的扰动 ( 通常是一两个像素 ) 提取正样本,在远离跟踪结果的区域中提取负样本.一旦跟踪结果不精确就容易造成标签分配不准确,误差累积会使分类器的性能下降从而跟丢目标.在无需假设任何数据分布

《中国人工智能学会通讯》——11.69 基于主动样本选择的判别式跟踪 方法

11.69 基于主动样本选择的判别式跟踪 方法 上面提出的基于标签传播模型的判别式跟踪方法,该方法与大多数判别式跟踪方法一样,在学习分类器时利用采样和加标签两个独立的策略选择训练样本.这种常用的训练样本选择策略存在以下两个问题.第一,根据已有的跟踪结果为样本估计标签容易引起误差累积.跟踪结果存在轻微的不准确都能导致样本标签的错误估计,进而干扰分类器的学习.第二,样本的采集是无目的性的.采集到的样本并不一定含有提高分类器性能的有利信息,导致分类器性能具有不确定性.现有的大部分判别式跟踪方法主要关注

Python提示[Errno 32]Broken pipe导致线程crash错误解决方法_python

本文实例讲述了Python提示[Errno 32]Broken pipe导致线程crash错误解决方法.分享给大家供大家参考.具体方法如下: 1. 错误现象ThreadingHTTPServer 实现的 http 服务,如果客户端在服务器返回前,主动断开连接,则服务器端会报 [Errno 32] Broken pipe 错,并导致处理线程 crash. 下面先看个例子,python 版本: 2.7 示例代码 复制代码 代码如下: #!/usr/bin/env python #!coding=ut

《中国人工智能学会通讯》——11.70 基于黎曼流形稀疏表示的视觉目 标跟踪方法

11.70 基于黎曼流形稀疏表示的视觉目 标跟踪方法 如引言所述,视觉目标跟踪中表观建模主要分为目标表示和统计建模两部分.上两节主要关注的是在跟踪中如何设计一种有效的统计模型.本节主要关注的是表观建模中的目标表示策略.近年来,稀疏表示作为一种有效的物体中层表示策略在视觉跟踪中得到了广泛应用[2] .稀疏表示的核心思想就是将数据表示为一个字典中基元的线性组合,而且只需要较少的几个基元就可以将数据表示出来,线性组合权重向量称之为稀疏参数.目前基于稀疏表示的跟踪方法都假定数据位于欧式空间 .然而,在实

【腾讯bugly干货分享】HTML 5 视频直播一站式扫盲

本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=1277 视频直播这么火,再不学就 out 了. 为了紧跟潮流,本文将向大家介绍一下视频直播中的基本流程和主要的技术点,包括但不限于前端技术. 1. H5 到底能不能做视频直播? 当然可以, H5 火了这么久,涵盖了各个方面的技术. 对于视频录制,可以使用强大的 webRTC(Web Real-Time Communica

用WinDbg探索CLR世界 [3] 跟踪方法的 JIT 过程

过程 本来想按照 sos 的帮助文件上命令的分类逐步介绍 WinDbg 下使用 sos 调试 CLR 程序,但发现这样实在不够直观.索性改成根据我分析 CLR 的实际案例,step by step 介绍功能,这样结构上虽然混乱一点,但更加直观,也易于上手 :P 前面两篇文章里面分别介绍了 WinDbg 的调试配置和线程的基本概念,这篇文章将针对 JIT 编译对象方法的流程进行分析,逐步介绍如何使用 WinDbg 调试 CLR 程序. 用WinDbg探索CLR世界 [1] - 安装与环境配置用Wi

iOS系统Crash文件分析方法

  Xcode 4.3的symbolicatecrash的位置和老版本的不一致了. /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/ Xcode 4.3之前 /Developer/Platforms/iPhoneOS.platform/Develo

全球最流行网站新方法排名 腾讯第二Google第四

      互联网流量监测机构ComScore Networks最新的月度全球流行网站排行榜显示,绝对访问人数(unique visitor )最多的网站不一定就是用户参与最多的网站. 据IDG新闻社报道,按照传统的绝对访问人数这个尺度来衡量,2月份最流行网站排名前列的还是美国的几张老面孔,但如果按照comScore上个月引入的一套新的尺度,即每用户访问量来衡量,三个亚洲网站占据了领先的位置. 尽管comScore依然认为绝对访问人数是衡量一个网站流行性的有效方法,但它发现平均每用户访问量可以起