使用lambdaquery() 报空指针异常_Andoird Crash的跟踪方法,使用腾讯Bugly来捕捉一些疑难杂症...

我们在开发中常常会注意到一些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工具都能捕获到。

db1562a7634c487fe7ce9462dd2f27bd.png

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去收集错误

a041f8f0a5de0c0ead54f553850ba441.png

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

270513183c82ed124abd37fe42f74639.png

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

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

四.集成腾讯Bugly

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

- Bugly官网:http://bugly.qq.com/

d6eba210dfa34f8f45427262d8873aa5.png

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

http://bugly.qq.com/androidfast

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

318dd0a54ff1dda4c4e69161d0c45763.png

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

9d7b94b89abdb2a882f11406e33bc54c.png

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

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

dependencies {

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

}

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

eaf3891c3863d03b60efe0d9449b55e3.png

如果你集成了这些的话,你在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

}

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

9d6308199d8b51eacab6160db2646826.png

注意:自动集成时会自动包含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

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

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

0ca8b4c6797f257ed5105324ef1e6486.png

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

72667c33424466d1995c8204acd289bf.png

现在我们拿到了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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值