Android Crash的跟踪方法,使用腾讯Bugly来捕捉一些疑难杂症,让我们APP稳定上线
Android 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官网:http://bugly.qq.com/
当然,Bugly的集成还是相对来说比较简单的,我们只要按照他的官方文档来
- http://bugly.qq.com/androidfast
首先要做的,就是下载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还有很多妙用,推荐大家详细阅读他们的文档,本博客只是抛砖引玉来教大家如何的使用罢了,终究只是一些皮毛而已,谢谢各位看官赏脸。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android可折叠收缩伸展的Expandable分组RecyclerView:模型抽象和封装(二)
Android可折叠收缩伸展的Expandable分组RecyclerView:模型抽象和封装(二) 如今Android这种可收缩伸展的Expandable RecyclerView是如此常用,在附录1的基础上,我重新把模型进行了抽象和封装,设计了一套新的架构和简洁的使用方式支持这种功能。重点就是ExpandableItemAdapter类,可直接把RecyclerView的Adapter直接继承ExpandableItemAdapter,然后在建立数据模型时候,把具有“组”意义的数据添加子Item时候,调用addSubItem,这样该RecyclerView就具有伸缩和展开的功能。 每一个Item内部存储了一个isExpand值,isExpand值决定在ExpandableItemAdapter初始后每一组是否伸展和收缩。isExpand为true时候,展开,为false时候,收起。 以下是全部代码。 Item.java: package app.zhangphil.exp; import java.util.ArrayList; import java.util.UUID; pub...
- 下一篇
OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据
OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据 我们这片博文就来聊聊这个反响很不错的OkHttp了,标题是我恶搞的,本篇将着重详细的分析,探索OkHttp这个框架的使用和封装 一.追其原理 Android系统提供了两种HTTP通信类 HttpURLConnection HttpClient Google推荐使用HttpURLConnection,这个没必要多说,事实上,我这篇写的应该算是比较晚了,很多优秀的博文都已经提出了这些观点了,那我也就不好意思重复的说废话了,不过我还是得吐槽一下,HttpURLConnection是在是太难用了,而且功能也实在是太少了,虽然Github上封装的框架还真是不少,不过依然不是特别好用,而Google自己也在寻求解决的办法,如果你看过android4.4的源码,你就应该知道,Google把HttpURLConnection替换成了OkHttp,而OkHttp走到现在,已经是相对来说,比较成熟的框架了,那我们为何不去使用它呢?而且现在学习OkHttp的资料和文章实在是太多了,根本不需要什...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS关闭SELinux安全模块
- SpringBoot2全家桶,快速入门学习开发网站教程
- 设置Eclipse缩进为4个空格,增强代码规范