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官网:http://bugly.qq.com/
当然,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可以来讨论讨论!
Andoird Crash的跟踪方法,使用腾讯Bugly来捕捉一些疑难杂症,让我们APP稳定上线的更多相关文章
- iOS Crash常规跟踪方法及Bugly集成运用
当app出现崩溃, 研发阶段一般可以通过以下方式来跟踪crash信息 #1.模拟器运行, 查看xcode错误日志 #2.真机调试, 查看xcode错误日志 #3.真机运行, 查看device系统日志 ...
- 【腾讯Bugly干货分享】聊聊苹果的Bug - iOS 10 nano_free Crash
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/hnwj24xqrtOhcjEt_TaQ9w 作者:张 ...
- 【腾讯Bugly干货分享】经典随机Crash之二:Android消息机制
本文作者:鲁可--腾讯SNG专项测试组 测试工程师 背景 承上经典随机Crash之一:线程安全 问题的模型 好几次灰度top1.top2 Crash发生场景:在很平常.频繁的使用页面,打开一个界面,马 ...
- 【腾讯Bugly干货分享】经典随机Crash之一:线程安全
本文作者:鲁可--腾讯SNG专项测试组 测试工程师 背景 Android QQ 在2016下半年连着好几个版本二灰 Crash 率都很高,如果说有新需求,一灰的 Crash 率高,还能找点理由,可是开 ...
- 腾讯bugly 的crash 上报和umeng的比较
说到crash上传工具,大家肯定会第一时间想到umeng,不错,umeng 是最早推出 crash 上报的工具之一,在刚推出来的时候,特别受到ios开发人员的喜爱. 因为个时候,内存是手动管理的,很容 ...
- kernel启动console_init之前console不可用时发生crash的调试方法
http://code.google.com/p/innosoc/wiki/KernelBootCrashDebug 注: 如在i386_start_kernel中加入:early_printk(&q ...
- linux u-boot跟踪方法总结
拿到一块板子,其中很重要的一项就是看电路图还有Datasheet. 这个真的很重要,首先你要知道cpu的架构是什么,armv7?arvmv5?还是其他的,哪个公司的芯片?是freescale 还是TI ...
- KCF目标跟踪方法分析与总结
KCF目标跟踪方法分析与总结 correlation filter Kernelized correlation filter tracking 读"J. F. Henriques, R. ...
- SQL 跟踪方法相关介绍
oracle sql跟踪方法:1.sql_trace打开跟踪:alter session set sql_trace=true;为跟踪文件做标记:alter session set tracefile ...
随机推荐
- 程序包org.junit不存在
三种解决方法 第一种 maven的改法 <dependency> <groupId>junit</groupId> &l ...
- vue开发中遇到的问题集锦(2)
1,在搭建了一个vue的脚手架之后,写了第一个组件,路由也已经配置完毕,且页面的路由显示是:http://localhost:8080/#/userLogin,userLogin里面有内容,但是页面显 ...
- npm ERR! Windows_NT 10.0.10586
安装vue脚手架时候一直失败,如图: npm cache clean 管理员下安装: 快捷键 win +x , 按A进入:
- 安装Leanote极客范的云笔记
前言 在这个互联网知识呈爆炸增长的时代,作为一个程序员要掌握的知识越来越多,然再好的记性也不如烂笔头,有了笔记我们就是可以时常扒拉扒拉以前的知识,顺便可以整理下自己的知识体系. 如今市面上云笔记产品, ...
- My Stuck in C++
My Stuck in C++ Zhong-Liang Xiang Oct. 1st, 2017 这个专题记录了对于我而言, c++迷一样的东西.
- css 中calc无效属性值问题
width:calc(50%-20px); 这样书写是无效的因为calc中计算的两个因子同运算符号之间必须存在空格:
- Node.js Domain 模块
Node.js Domain(域) 简化异步代码的异常处理,可以捕捉处理try catch无法捕捉的异常.引入 Domain 模块 语法格式如下: var domain = require(" ...
- flowable设计器插件安装
原文地址:http://www.shareniu.com/ 工欲善其事必先利其器,要想使用flowable,必须搭建一套环境,本文以Eclipse中安装flowable插件为例详细说明整个安装过程. ...
- ROS新功能包PlotJuggler绘图
http://www.ros.org/news/2017/01/new-package-plotjuggler.html PlotJuggler,一个基于Qt的应用程序,允许用户加载,搜索和绘图数据. ...
- Dynamics CRM2016 Update or Create parentcustomerid in Contact using web api
联系人实体中有个特殊的字段parentcustomerid 在通过web api创建或更新记录时,如果在给这个字段赋值时当做查找字段对待的话,那你就会遇到问题了,报错信息如下 正确的赋值方式如下