1. 在 Applicaiton中进行初始化崩溃收集器
public class MyApp extends Application {         @Override    public void onCreate() {             super.onCreate();        //初始化崩溃收集器        CollectCrashUtils.initColleteCrash();    }}

2.收集java层崩溃和native层崩溃

public class CollectCrashUtils {         public static void initColleteCrash() {             //初始化Handler,收集java层崩溃        MyJavaCrashHandler handler = new MyJavaCrashHandler();        Thread.setDefaultUncaughtExceptionHandler(handler);        //收集native层崩溃        File file = new File("sdcard/Crashlog");        if (!file.exists()) {                 file.mkdirs();        }        NativeBreakpad.init(file.getAbsolutePath());    }}

3.native层的崩溃收集可以使用编译好的breakpad.so。(参考 https://github.com/yinyinnie/breakpad-for-android.git)

4.java层崩溃实现Thread.UncaughtExceptionHandler接口进行收集

public class MyJavaCrashHandler implements Thread.UncaughtExceptionHandler {         @Override    public void uncaughtException(Thread t, Throwable e) {             Log.e("程序出现异常了", "Thread = " + t.getName() + "\nThrowable = " + e.getMessage());        String stackTraceInfo = getStackTraceInfo(e);        Log.e("stackTraceInfo", stackTraceInfo);        saveThrowableMessage(stackTraceInfo);    }    /**     * 获取错误的信息     *     * @param throwable     * @return     */    private String getStackTraceInfo(final Throwable throwable) {             PrintWriter pw = null;        Writer writer = new StringWriter();        try {                 pw = new PrintWriter(writer);            throwable.printStackTrace(pw);        } catch (Exception e) {                 return "";        } finally {                 if (pw != null) {                     pw.close();            }        }        return writer.toString();    }    private String logFilePath = "sdcard/Crashlog";    private void saveThrowableMessage(String errorMessage) {             if (TextUtils.isEmpty(errorMessage)) {                 return;        }        File file = new File(logFilePath);        if (!file.exists()) {                 boolean mkdirs = file.mkdirs();            if (mkdirs) {                     writeStringToFile(errorMessage, file);            }        } else {                 writeStringToFile(errorMessage, file);        }    }    private void writeStringToFile(final String errorMessage, final File file) {             new Thread(new Runnable() {                 @Override            public void run() {                     FileOutputStream outputStream = null;                try {                         ByteArrayInputStream inputStream = new ByteArrayInputStream(errorMessage.getBytes());                    outputStream = new FileOutputStream(new File(file, System.currentTimeMillis() + ".txt"));                    int len = 0;                    byte[] bytes = new byte[1024];                    while ((len = inputStream.read(bytes)) != -1) {                             outputStream.write(bytes, 0, len);                    }                    outputStream.flush();                    Log.e("程序出异常了", "写入本地文件成功:" + file.getAbsolutePath());                } catch (FileNotFoundException e) {                         e.printStackTrace();                } catch (IOException e) {                         e.printStackTrace();                } finally {                         if (outputStream != null) {                             try {                                 outputStream.close();                        } catch (IOException e) {                                 e.printStackTrace();                        }                    }                }            }        }).start();    }}

更多相关文章

  1. 极光推送获取不到RegisterId(注册ID)Android
  2. Android捕获全局异常
  3. Android(安卓)属性系统 详解
  4. android中HttpURLConnection调用getResponseCode()时崩溃 解决方
  5. Android(安卓)TabLayout 浅显总结
  6. 【Android(安卓)系统开发】 Android(安卓)系统启动流程简介
  7. android 广告收集总结
  8. 使用saripaar对android输入控件进行快速验证
  9. Android(安卓)属性系统 详解

随机推荐

  1. How to make android app's background i
  2. android 返回键退出程序
  3. Android工具类
  4. Android中帧动画实现
  5. Android获取WiFi ip相关信息
  6. Android利用Service实现简易音乐播放器
  7. 【Android学习三】相关指令操作
  8. Android 修改TabLayout设置文字大小一致
  9. android 里的动态提示
  10. Android(安卓)Activity Launch Mode 启动