AndoirdCrash的跟踪方法,使用腾讯Bugly来捕捉一些疑难杂症,让我们APP稳定上线
一.糟糕的AndroidCrash
作为开发人员,很容易就能碰到Crash,但是作为用户,我相信也有很大部分人碰到过Crash,这些原因,也正是Android的平台差异化和适配所导致的,而且,你要是你安装一个软件就Crash,我想你会立马把他卸载掉。同时心理嘲笑了一下开发人员,有些用户还有可能会去商店给你差评之类的,这就不多说了,反正会直接影响到你APP的口碑和市场竞争能力,你要是一些用户很多的APP的话,你还得考虑用户留存和收入的问题了
而在以前,我们是怎么处理Crash的呢?一般有三个补救措施吧,感觉,当然,还有其他,待补充:
1.等待用户反馈,这样很被动
2.了解出错原因,让用户提供日志和使用场景,不靠谱,攒人品吧
3.提示用户反馈,这样对用户体验有点糟糕
而在以前,很多厂商基本都这样搞过,归根究底,还是现在的APP质量,仍然不敢恭维
我今天讲的是腾讯的Bugly处理Crash的方式,主要还是因为他使用比较简单吧,初始化也就一行代码,而且可以监控和获取日志,挺不错的
二.Crash分类
一般Crash也是分了两类
JavaCrash
Java代码触发,Jvm虚拟机退出,系统弹框提醒用户,这个我们可以看log查看报错原因,Crash工具都能捕获到。
NativeCrash
C/C++代码触发,Linux进程退出,无系统提示,这就需要一些第三方工具去捕获了
三.模拟Crash的产生
其实我们可以非常简单的实现一个java的Crash,比如空指针,很正常就能产生,我们这样来写MainActivity
publicclassMainActivityextendsAppCompatActivity{
privateButtonbutton;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button.setText("AndroidCrash");
}
}
我都没给这个button初始化就赋值,肯定会报空指针异常,效果如上图,而在我们上图中是提到的,我们可以使用log去收集错误
我们可以看到他的错误是空指针,而错误在MainActivity的16行
这样我们的问题就一下子找到了
而如果集成了腾讯Bugly的话,他输出的日志就比较详细了,那具体是怎样的输出,我们现在就来集成一下把!
四.集成腾讯Bugly
首先要做的,就是下载SDK了(如果你添加依赖的话,就不需要下载)
我们可以根据他们的接入指南来,因为我们是androidstudio开发,所以我把流程走一遍
在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
}
可以参考官方提供的这张图
注意:自动集成时会自动包含BuglySO库,建议在Module的build.gradle文件中使用NDK的“abiFilter”配置,设置支持的SO库架构。
如果在添加“abiFilter”之后AndroidStudio出现以下提示:
NDKintegrationisdeprecatedinthecurrentplugin.Considertryingthenewexperimentalplugin.
则在项目根目录的gradle.properties文件中添加:
android.useDeprwww.shanxiwang.netecatedNdk=true
接着你就可以添加他所需要的一些权限了
好,现在我们需要去注册一个APP了,进入你的后阳台选择注册app
现在我们拿到了APPID:900033301,那我们可以去初始化了,建议是在Application中,所以我新建一个Application,并在清单文件,Application的根节点添加name属性
packagecom.lgl.androidcrash;
importandroid.app.Application;
importcom.tencent.bugly.crashreport.CrashReport;
/
Application初始化
CreatedbyLGLon2016/6/10.
/
publicclassCrashApplicationextendsApplication{
//初始化
@Override
publicvoidonCreate(){
super.onCreate();
//是否调试
CrashReport.initCrashReport(getApplicationContext(),"900033301",false);
}
}
到这里,Bugly的配置基本上是OK的,我们可以引起一个bug,然后日志过滤一下
分析的很透彻,我们很容易就找到问题的所在了
|
|