android bugly热更新什么是bugly异常上报

法律顾问:
皖ICP增值电信信息业务许可证编号: 皖B2- 安徽省互联网协会会员编号:00273 网站备案:皖ICP备号-1
危害信息举报: 业务联系电话:
万维网络机房带宽支持 广德网警备案:01
Powered by
Server Time
Processed in 0.05 second(s)Bugly——Android
Crash监控与分析神器 - 简书
Bugly——Android
Crash监控与分析神器
1:简介这个是前段时间在逛的时候看到一篇名为的文章后发现的。然后果断在项目中使用了!作用:监控应用的所有崩溃情况并且上报崩溃信息。
优势:虽然Android有提供异常捕获接口UncaughtExceptionHandler,这对于异常上报完全没有问题,但对于开发人员来说,处理并分析这些异常可不容易。Bugly不仅帮我们统计出Crash率,并且上报了出错堆栈以及出错机型等信息,极大的方便了开发人员调试。
2:接入Bugly接入非常简单,具体可看官网说明,很详细。注意:截止目前最新版本SDK包是v2.1,如果使用Eclipse接入最新版本的话,Android Build Tools必须22以上,否则会报异常 java.lang.NoClassDefFoundError。
详细信息可看3:个人评价5星好评啊~最后再推荐一个很好用的检测内存泄露的工具:3253人阅读
Utils(1)
今天就来说说作为程序猿的我们每天都会遇到的东西bug,出bug不可怕可怕的是没有出bug时的堆栈信息,那么对于bug的信息收集就显得尤为重要了,一般用第三方bugly或者友盟等等都能轻易收集,但是由于公司不让使用第三方,而安卓正好有原生的异常收集类UncaughtExceptionHandler,那么今天博客就从这个类开始.
UncaughtExceptionHandler见名知意,即他是处理我们未捕获的异常,具体使用分两步
1.实现我们自己的异常处理类
public class CrashHandler implements Thread.UncaughtExceptionHandler {
public void uncaughtException(Thread thread, Throwable ex) {
需要我们实现Thread.UncaughtExceptionHandler接口当有未捕获的异常的时候会回调uncaughtException(Thread thread, Throwable ex)方法
2.设置该CrashHandler为系统默认的
Thread.setDefaultUncaughtExceptionHandler(crashHandler);
以上只是使用步骤的介绍,具体项目中的使用我直接贴代码
在application中初始化
package com.zly.www.basedemo.
import android.app.A
import android.content.C
import com.zly.www.basedemo.exception.CrashH
* Created by zly on .
public class AppApplication extends Application {
private static Context mC
public void onCreate() {
super.onCreate();
this.mContext = this;
CrashHandler.getInstance().init(this);
public static Context getContext(){
CrashHandler 实现类如下
package com.zly.www.basedemo.
import android.content.C
import android.content.pm.PackageI
import android.content.pm.PackageM
import android.os.B
import android.os.E
import android.os.L
import android.util.L
import android.widget.T
import com.zly.www.basedemo.utils.AppM
import java.io.F
import java.io.FileOutputS
import java.io.PrintW
import java.io.StringW
import java.io.W
import java.lang.reflect.F
import java.text.SimpleDateF
import java.util.D
import java.util.HashM
import java.util.M
* 全局异常捕获
* Created by zly on .
public class CrashHandler implements Thread.UncaughtExceptionHandler {
* 系统默认UncaughtExceptionHandler
private Thread.UncaughtExceptionHandler mDefaultH
private Context mC
* 存储异常和参数信息
private Map&String,String& paramsMap = new HashMap&&();
* 格式化时间
private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
private String TAG = this.getClass().getSimpleName();
private static CrashHandler mI
private CrashHandler() {
* 获取CrashHandler实例
public static synchronized CrashHandler getInstance(){
if(null == mInstance){
mInstance = new CrashHandler();
public void init(Context context){
mContext =
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(this);
* uncaughtException 回调函数
public void uncaughtException(Thread thread, Throwable ex) {
if(!handleException(ex) && mDefaultHandler != null){
mDefaultHandler.uncaughtException(thread,ex);
Thread.sleep(3000);
} catch (InterruptedException e) {
Log.e(TAG, "error : ", e);
AppManager.getAppManager().AppExit(mContext);
* 收集错误信息.发送到服务器
* 处理了该异常返回true,否则false
private boolean handleException(Throwable ex) {
if (ex == null) {
return false;
collectDeviceInfo(mContext);
addCustomInfo();
new Thread() {
public void run() {
Looper.prepare();
Toast.makeText(mContext, "程序开小差了呢..", Toast.LENGTH_SHORT).show();
Looper.loop();
}.start();
saveCrashInfo2File(ex);
return true;
* 收集设备参数信息
public void collectDeviceInfo(Context ctx) {
PackageManager pm = ctx.getPackageManager();
PackageInfo pi = pm.getPackageInfo(ctx.getPackageName(), PackageManager.GET_ACTIVITIES);
if (pi != null) {
String versionName = pi.versionName == null ? "null" : pi.versionN
String versionCode = pi.versionCode + "";
paramsMap.put("versionName", versionName);
paramsMap.put("versionCode", versionCode);
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "an error occured when collect package info", e);
Field[] fields = Build.class.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
paramsMap.put(field.getName(), field.get(null).toString());
} catch (Exception e) {
Log.e(TAG, "an error occured when collect crash info", e);
* 添加自定义参数
private void addCustomInfo() {
* 保存错误信息到文件中
返回文件名称,便于将文件传送到服务器
private String saveCrashInfo2File(Throwable ex) {
StringBuffer sb = new StringBuffer();
for (Map.Entry&String, String& entry : paramsMap.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
sb.append(key + "=" + value + "\n");
Writer writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
ex.printStackTrace(printWriter);
Throwable cause = ex.getCause();
while (cause != null) {
cause.printStackTrace(printWriter);
cause = cause.getCause();
printWriter.close();
String result = writer.toString();
sb.append(result);
long timestamp = System.currentTimeMillis();
String time = format.format(new Date());
String fileName = "crash-" + time + "-" + timestamp + ".log";
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/crash/";
File dir = new File(path);
if (!dir.exists()) {
dir.mkdirs();
FileOutputStream fos = new FileOutputStream(path + fileName);
fos.write(sb.toString().getBytes());
fos.close();
return fileN
} catch (Exception e) {
Log.e(TAG, "an error occured while writing file...", e);
return null;
activity管理类
package com.zly.www.basedemo.
import java.util.S
import android.app.A
import android.app.ActivityM
import android.content.C
* Activity管理类:用于管理Activity和退出程序
* Created by zly on .
public class AppManager {
private static Stack&Activity& activityS
private static AppM
private AppManager() {
* 单一实例
public static AppManager getAppManager() {
if (instance == null) {
instance = new AppManager();
* 添加Activity到堆栈
public void addActivity(Activity activity) {
if (activityStack == null) {
activityStack = new Stack&Activity&();
activityStack.add(activity);
* 获取当前Activity(堆栈中最后一个压入的)
public Activity currentActivity() {
Activity activity = activityStack.lastElement();
* 结束当前Activity(堆栈中最后一个压入的)
public void finishActivity() {
Activity activity = activityStack.lastElement();
finishActivity(activity);
* 结束指定的Activity
public void finishActivity(Activity activity) {
if (activity != null) {
activityStack.remove(activity);
activity.finish();
activity = null;
* 结束指定类名的Activity
public void finishActivity(Class&?& cls) {
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
* 结束所有Activity
public void finishAllActivity() {
for (int i = 0; i & activityStack.size(); i++) {
if (null != activityStack.get(i)) {
activityStack.get(i).finish();
activityStack.clear();
* 退出应用程序
public void AppExit(Context context) {
finishAllActivity();
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
} catch (Exception e) {
如有疑问欢迎留言~~
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:61946次
积分:1231
积分:1231
排名:千里之外
原创:28篇
评论:207条
(1)(2)(3)(3)(3)(1)(2)(2)(2)(1)(3)(1)(2)(1)(3)(6)暂没有新消息哦~
腾讯 Bugly : Android Crash 跟踪方法
视频太卡?试试切换线路
本课介绍 Android 应用 Crash 的现状及危害。
本课通过代码演示,如何触发一次 Java 的 Crash,并介绍 Crash 的一般定位方式。
本课通过实际操作演示,如何在 Android 项目中集成 Bugly SDK,并演示 Java 的 Crash 如何在 Bugly 上进行展示和定位。
本课通过代码演示,如何在 Android 项目中使用 Bugly SDK 所提供的高级接口。
本课通过实际操作演示,讲解什么是 Java 混淆,如何对 Android 应用进行混淆,如何在 Bugly 上配置 Java 符号表,最终看到还原的堆栈。
本课通过实际代码演示,讲解什么是 Native Crash,如何触发一次 Native 的 Crash。
本课时通过实际操作演示,在 Android 项目中集成 Bugly 的 SO,并演示 Native 的 Crash 如何在 Bugly 上进行展示和定位。
本课时通过实际操作演示,讲解什么是 SO 的 debug 信息,如何使用 Bugly 的符号表工具,导出 SO 的符号表文件,最终在 Bugly 上看到还原后的 Native 堆栈。
只有成为VIP会员才能提问&回复,快吧!如果你还没有账号你可以一个账号。
腾讯 Bugly Android 使用指南
腾讯 Bugly Android SDK 下载
腾讯 Bugly 官方介绍
添加新技术问题
课程 [Android Crash 现状]
中已存在问题
添加新技术问题
问题描述越详细,被解答的速度越快
有新回答时请邮件提醒我
着急,拜托快点
不急,慢慢解决
关联课程 [Android Crash 现状]
服务热线:400-678-8266腾讯 Bugly Android 异常案例解决方案征集
开源中国和腾讯 Bugly 签署战略合作协议,Bugly 将通过开源中国众包平台发布千个悬赏任务,任务涉及 Android 异常的案例解决方案以及一些文档的翻译。Bugly & 是腾讯的移动应用崩溃检测服务,同时支持 iOS 和 Android 平台。目前 Bugly 已经对移动开发者开放。移动开发者在自己的 App 中接入 Bugly 的 SDK 后,就能在应用崩溃后获得信息上报。开发者可以通过 Bugly 的网站看到崩溃的概要和详情。首批 Android 异常案例解决方案有:悬赏任务范例:更多的悬赏任务我们正在紧锣密鼓的整理中,请大家关注开源中国众包平台获得第一手更新项目。
Android 的详细介绍:
Android 的下载地址:
转载请注明:文章转载自 开源中国社区
本文标题:腾讯 Bugly Android 异常案例解决方案征集
本文地址:
引用来自“红薯”的评论量巨大哦,接下来还有非常非常多!直接找个培训学校外包吧,对在职的来说是个鸡肋,还要先到先得。整个难点的,奖金高的,对有经验的群体才是尊重啊!
量巨大哦,接下来还有非常非常多!}

我要回帖

更多关于 android bugly 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信