public interface CrashHandleListener {/*** Crash处理回调时,此接口返回的数据以附件的形式上报,附件名userExtraByteData* @param isNativeCrashed 是否Native异常* @param crashType 异常的类型* @param crashStack 异常堆栈* @param nativeSiCode native异常时的SI_CODE,非Native异常此数据无效* @param crashTime native异常的发生时间* @return 上报的附件字节流*/byte[] getCrashExtraData(boolean isNativeCrashed, String crashType, String crashAddress,String crashStack, int nativeSiCode, long crashTime);/*** Crash处理回调时,此接口返回的数据在附件extraMessage.txt中展示* @param isNativeCrashed 是否Native异常* @param crashType 异常的类型* @param crashStack 异常堆栈* @param nativeSiCode native异常时的SI_CODE,非Native异常此数据无效* @param crashTime native异常的发生时间* @return 上报的数据*/String getCrashExtraMessage(boolean isNativeCrashed, String crashType, String crashAddress,String crashStack, int nativeSiCode, long crashTime);/*** Crash处理回调前,执行此接口* @param isNativeCrashed 是否Native异常*/void onCrashHandleStart(boolean isNativeCrashed);/*** Crash处理回调后,执行此接口* @param isNativeCrashed 是否Native异常* @return 返回值没有实际作用,不影响方法正常使用,可忽略*/boolean onCrashHandleEnd(boolean isNativeCrashed);/*** Crash处理回调时,执行此接口* @param isNativeCrashed 是否NativeCrash* @param crashType Crash类型* @param crashMsg Crash消息, 例如 “Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference” (4.4.1.2新增)* @param crashAddress Crash地址* @param crashStack Crash堆栈* @param nativeSiCode native异常时有效,SI_CODE* @param crashTime crash时间* @param userId crash时用户ID* @param deviceId crash时的设备ID* @param crashUuid 这条异常的唯一标识* @return 返回值没有实际作用,不影响方法正常使用,可忽略*/boolean onCrashSaving(boolean isNativeCrashed, String crashType, String crashMsg, String crashAddress,String crashStack, int nativeSiCode, long crashTime, String userId, String deviceId,String crashUuid, String processName);}
CrashHandleListener crashHandleListener = xxx;buglyBuilder.setCrashHandleListener(crashHandleListener);
public interface UploadHandleListener {/*** 上报开始时回调* int TYPE_JAVA_CRASH = 0; // Java 崩溃* int TYPE_NATIVE_CRASH = 1; // Native崩溃* int TYPE_JAVA_CATCHED = 2; // Java错误上报* int TYPE_ANR_CRASH = 3; // ANR* int TYPE_U3D_CRASH = 4; // U3D错误上报* @param requestKey 上报关键字(4.4.3.4版本开始,这个字段表示上报异常个例类型,取值如上)*/public void onUploadStart(int requestKey);/*** 上报结束后回调* int TYPE_JAVA_CRASH = 0; // Java 崩溃* int TYPE_NATIVE_CRASH = 1; // Native崩溃* int TYPE_JAVA_CATCHED = 2; // Java错误上报* int TYPE_ANR_CRASH = 3; // ANR* int TYPE_U3D_CRASH = 4; // U3D错误上报* @param requestKey 上报关键字(4.4.3.4版本开始,这个字段表示上报异常个例类型,取值如上)* @param responseKey 回包的关键字* @param sended 发送的字节流* @param recevied 接受的字节流* @param result true则上报成功,否则失败* @param exMsg 额外信息*/public void onUploadEnd(int requestKey, int responseKey, long sended, long recevied, boolean result, String exMsg);}
UploadHandleListener uploadHandleListener = null;buglyBuilder.setUploadHandleListener(uploadHandleListener);
/*** 更新设备id(初始化后)* @param context context* @param deviceId 设备id*/public static void updateUniqueId(Context context, String deviceId);
/*** 更新用户id(初始化后)* @param context context* @param userId 用户id*/public static void updateUserId(Context context, String userId);
/*** 更新设备型号(初始化后)* @param context context* @param model 设备型号*/public static void updateDeviceModel(Context context, String model);
/*** 更新日志等级(初始化后)* @param logLevel 日志等级,级别可从BuglyLogLevel中获取*/public static void updateLogLevel(int logLevel);
/*** 上报自定义异常* @param thread 出错线程, 默认当前线程* @param category 异常类型 u3d c# : 4 | js : 8 | cocos2d lua : 6* @param errorType 错误类型* @param errorMsg 错误信息* @param stack 出错堆栈* @param extraInfo 额外信息*/public static void postException(Thread thread, int category, String errorType, String errorMsg,String stack, Map<String, String> extraInfo);public static void postException(int category, String errorType, String errorMsg,String stack, Map<String, String> extraInfo);
/*** 处理catch异常并上报.* @param thread 出错线程* @param exception 异常* @param extraMsg 额外信息* @param extraData 额外数据* @param enableAllThreadStack 开启全部线程抓栈,默认开启* @return 上报结果*/public static boolean handleCatchException(Thread thread, Throwable exception, String extraMsg,byte[] extraData, boolean enableAllThreadStack);public static boolean handleCatchException(Thread thread, Throwable exception, String extraMsg,byte[] extraData);
/*** 非线程安全,推荐切到相同线程操作* 设置个例标签,来自终端性能监控Pro管理台的标签ID* 1. 先在终端性能监控Pro管理台添加标签,得到标签ID;* 2. 通过setCaseLabels设置标签ID,需要设置多个时,通过英文竖线分割;* 3. 异常个例上报时会同时上报这些标签ID;* 示例:"123|456|789"* SDK版本: 4.3.2.9+* @param labels 个例标签*/public static void setCaseLabels(String labels);
/*** 非线程安全,推荐切到相同线程操作* 设置「业务下钻」标签,设置多个标签时通过英文的竖线分割* 最多只允许设置30个标签,超出时,只取前面30个* 每个标签最长不超过1024个字符,超出时会添加失败* 示例:"test_one|test_two|test_three"* SDK版本: 4.4.1+* @param labels 业务下钻标签*/public static void setTestLabels(String labels);
/*** 设置Java内存泄漏嫌疑对象* @param leakObj 嫌疑对象*/public static void startInspectLeakObj(Object leakObj);
/*** 测试crash* @param crashType crash类型,可填入Bugly.JAVA_CRASH、Bugly.NATIVE_CRASH、Bugly.ANR_CRASH*/public static void testCrash(@CrashTypeKey int crashType);
public class BuglyCustomLog {public static void v(String tag, String msg) {BuglyLog.v(tag, msg);}public static void d(String tag, String msg) {BuglyLog.d(tag, msg);}public static void i(String tag, String msg) {BuglyLog.i(tag, msg);}public static void w(String tag, String msg) {BuglyLog.w(tag, msg);}public static void e(String tag, String msg) {BuglyLog.e(tag, msg);}public static void e(String tag, String msg, Throwable throwable) {BuglyLog.e(tag, msg, throwable);}/*** 设置写入日志的缓存大小,日志将根据设置的缓存大小循环写入* @param size 日志缓存大小*/public static void setCache(int size) {BuglyLog.setCache(size);}}
附件中的 BuglyLog.zip。/*** 添加自定义数据* @param context context* @param key key* @param value value*/public static void putUserData(Context context, String key, String value);
/*** 移除用户自定义数据.* @param key key* @return 如果存在,则返回对应key的值*/public static String removeUserData(Context context, String key);
/*** 设置或更新自定义文件路径数组* @param files 文件路径数组,最多10个文件,且压缩后大小不能超过10MB* @return 设置结果*/public static boolean setAdditionalAttachmentPaths(String[] files);
/*** 进入自定义场景* @param sceneName 场景名称*/public static void enterScene(String sceneName);/*** 退出自定义场景* @param sceneName 场景名称*/public static void exitScene(String sceneName);
Bugly.getGlobalCustomDataEditor 获取全局接口,设置自定义维度,也可以通过指标类回调(ICustomDataCollector)或问题类回调(ICustomDataCollectorForIssue),设置或者更新自定义维度。ICustomDataCollectorForIssue,设置自定义字段。/*** 获取全局自定义维度设置接口* @return 全局自定义维度设置类*/public static ICustomDataEditor getGlobalCustomDataEditor();// 设置示例ICustomDataEditor customDataEditor = Bugly.getGlobalCustomDataEditor();customDataEditor.putStringParam(ICustomDataEditor.STRING_PARAM_1, getAppStateDesc());customDataEditor.putNumberParam(ICustomDataEditor.NUMBER_PARAM_1, Debug.getPss());
// 添加回调,指标类回调和问题类回调需要分别设置。Bugly.addCustomDataCollector(customDataEditor);// 移除回调,指标类回调和问题类回调需要分别移除。Bugly.removeCustomDataCollector(customDataDditor);
ICustomDataCollector,如卡顿指标,内存峰值属于指标类回调。会在信息采集,缓存数据前,回调应用是否需要补充额外信息。/*** 设置指标数据回调,对于不同监控项、不同场景可设置多个* @param dataCollector 全局自定义数据回调类*/public static void addCustomDataCollector(ICustomDataCollector dataCollector);/*** 移除全局自定义数据回调* @param dataCollector 全局自定义数据回调类*/public static void removeCustomDataCollector(ICustomDataCollector dataCollector);// 设置示例ICustomDataEditor customDataEditor = new ICustomDataCollector() {@Overridepublic void collectCustomData(String pluginName, String scene, ICustomDataEditor customDataEditor) {customDataEditor.putStringParam(ICustomDataEditor.STRING_PARAM_1, getAppStateDesc());customDataEditor.putNumberParam(ICustomDataEditor.NUMBER_PARAM_1, Debug.getPss());}};// 设置指标类回调Bugly.addCustomDataCollector(customDataEditor);// 移除指标类回调Bugly.removeCustomDataCollector(customDataDditor);
ICustomDataCollectorForIssue,如卡顿问题监控,Java 内存泄漏,大图分析属于问题类回调,会在监控到异常问题时,回调用户是否需要补充额外信息。/*** 设置单个指标、问题自定义数据回调,对于不同监控项、不同场景可设置多个* @param issueDataCollector 单个指标、问题自定义数据回调类*/public static void addCustomDataCollector(ICustomDataCollectorForIssue issueDataCollector);/*** 移除单个指标、问题自定义数据回调* @param issueDataCollector 单个指标、问题自定义数据回调类*/public static void removeCustomDataCollector(ICustomDataCollectorForIssue issueDataCollector);// 设置示例ICustomDataCollectorForIssue issueDataCollector = new ICustomDataCollectorForIssue() {@Overridepublic void collectCustomData(String pluginName, String scene, ICustomDataEditorForIssue customDataEditor) {// 允许覆盖全局设置的自定义维度customDataEditor.putStringParam(ICustomDataEditor.STRING_PARAM_1, getAppStateDesc());customDataEditor.putNumberParam(ICustomDataEditor.NUMBER_PARAM_1, Debug.getPss());}}// 设置问题类回调Bugly.addCustomDataCollector(issueDataCollector);// 移除问题类回调Bugly.removeCustomDataCollector(issueDataCollector);
/*** crash监控动态开关* @param crashType crash类型,可填入Bugly.JAVA_CRASH、Bugly.NATIVE_CRASH、Bugly.ANR_CRASH* @param isAble true 打开,false 关闭*/public static void setCrashMonitorAble(@CrashTypeKey int crashType, boolean isAble);/*** 性能监控动态开关(开关一组监控项)* @param monitorList 监控项list,可从BuglyMonitorName中获取* @param isAble true 打开,false 关闭*/public static void setPerformanceMonitorsAble(List<String> monitorList, boolean isAble);/*** 性能监控动态开关(开关单个监控项)* @param monitorName 监控项* @param isAble true 打开,false 关闭*/public static void setPerformanceMonitorAble(String monitorName, boolean isAble);/*** 停止所有的性能监控项*/public static void abolishPerformanceMonitors();
reportAppFullLaunch 接口自定义启动结束点。除此之外,AppLaunch 还提供添加自定义标签接口,以及自定义打点接口。AppLaunch appLaunch = AppLaunchProxy.getAppLaunch();appLaunch.reportAppFullLaunch();
AppLaunch appLaunch = AppLaunchProxy.getAppLaunch();appLaunch.addTag("show_splash");
AppLaunch appLaunch = AppLaunchProxy.getAppLaunch();appLaunch.spanStart("login", null); // 登录任务开始....appLaunch.spanStart("verification_code", "login"); // 验证码任务开始....appLaunch.spanEnd("verification_code"); // 验证码结束....appLaunch.spanEnd("login"); // 登录结束
public interface AppLaunch {/*** 开始启动监控* @param context Context*/void install(Context context);/*** 添加自定义标签* @param tag 自定义标签*/void addTag(String tag);/*** Span开始打点* @param spanName 开始打点的span名称* @param parentSpanName 当前要打点的span的父span的名称*/void spanStart(String spanName, String parentSpanName);/*** Span结束打点* @param spanName 结束打点的span名称*/void spanEnd(String spanName);/*** 标记启动完成*/void reportAppFullLaunch();}
文档反馈