Bugly官网首页
SDK文档地址
Bugly支持自动和手动两种方式,感谢伟大的AS,自动导入更简单更快
需要操作两个地方
android {
defaultConfig {
//这个针对的是NDK的配套设置,SDK不需要
ndk {
// 设置支持的SO库架构
abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
}
}
}
dependencies {
// 可以针对需求来添加依赖,NDK针对的是本地so文件,如果没有引入so文件就不需要
implementation 'com.tencent.bugly:crashreport:latest.release' //其中latest.release指代最新Bugly SDK版本号,也可以指定明确的版本号,例如2.1.9
implementation 'com.tencent.bugly:nativecrashreport:latest.release' //其中latest.release指代最新Bugly NDK版本号,也可以指定明确的版本号,例如3.0
}
注:如果您的App需要上传到google play store
,您需要将READ_PHONE_STATE
权限屏蔽掉或者移除,否则可能会被下架。
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}
配置完SDK后,就可以初始化和应用了
初始化有两种方式
获取APP ID并将以下代码复制到项目Application类onCreate()中,Bugly会为自动检测环境并完成配置:
CrashReport.initCrashReport(getApplicationContext(), "注册时申请的APPID", false);
文档中有注意事项
第三个参数为SDK调试模式开关,调试模式的行为特性如下:输出详细的Bugly SDK的Log;每一条Crash都会被立即上报;自定义日志将会在Logcat中输出。建议在测试阶段建议设置成true,发布时设置为false
第二个事项这里由于没有申请log权限,因此默认为false。
Application建议自己重写继承Application类,在AndroidMani文件,application标签中用name标签指定自己的Application类
Bugly2.0及以上版本还支持通过“AndroidManifest.xml”来配置APP信息。如果同时又通过代码中配置了APP信息,则最终以代码配置的信息为准。
在“AndroidManifest.xml”的“Application”中增加“meta-data”配置项:
通过“AndroidManifest.xml”配置后的初始化方法如下:
CrashReport.initCrashReport(getApplicationContext());
到这一步,就可以在控制台上看到上传的crash
文档中的方法
在一个点击事件中调用测试接口
CrashReport.testJavaCrash();
由于没有locat权限,本地log输出中没有日志输出,但是在Bugly控制台中可以看到结果
另外,如果项目包含了Native工程或者使用了代码混淆,建议配置符号表文件,具体请参考“符号表配置”
崩溃趋势
具体分析
参考sdk
CrashReport.UserStrategy userStrategy = new CrashReport.UserStrategy(getApplicationContext());
// 自定义数据 记录信息 设置渠道名称
userStrategy.setAppChannel("channel_test");
// 自定义数据 设置app版本
userStrategy.setAppVersion("test_version");
// 记录信息 设置app包名
userStrategy.setAppPackageName("test_package_name");
// 设置bugly启动后联网延迟,默认10s
userStrategy.setAppReportDelay(2000);
// 自定义跟踪数据回传文件
userStrategy.setCrashHandleCallback(new CrashReport.CrashHandleCallback() {
public Map onCrashHandleStart(int crashType, String errorType, String errorMessage, String errorStack) {
LinkedHashMap map = new LinkedHashMap();
map.put("Key", "Value");
return map;
}
@Override
public byte[] onCrashHandleStart2GetExtraDatas(int crashType, String errorType,
String errorMessage, String errorStack) {
try {
return "Extra data.".getBytes("UTF-8");
} catch (Exception e) {
return null;
}
}
});
// 初始化
CrashReport.initCrashReport(getApplicationContext(), "bf21e87f18", false, userStrategy);
// 设置模块/功能/场景标签,在控制台显示,需要在控制台维护标签ID
CrashReport.setUserSceneTag(getApplicationContext(), 107173);
// 记录信息 回传异常用户ID
CrashReport.setUserId("1111111");
// 自定义数据 设置自定义地图参数
CrashReport.putUserData(getApplicationContext(), "12341234", "123123123");
// ADT 17增加了BuildConfig特性,可以通过获取BuildConfig类的DEBUG变量来设置:
// CrashReport.setIsDevelopmentDevice(getApplicationContext(), BuildConfig.DEBUG);
可以感知到webView中发生的js异常,需要配合webView使用,具体参考文档
bugly可以支持更多的自定义信息
1,设置用户ID您可能会希望能精确定位到某个用户的异常,我们提供了用户ID记录接口。例:网游用户登录后,通过该接口记录用户ID,在页面上可以精确定位到每个用户发生碰撞的情况。
CrashReport.setUserId("9527"); //该用户本次启动后的异常日志用户ID都将是9527
2,主动上报开发者Catch的异常您可能会关注某些重要异常的Catch情况。我们提供了上报这类异常的接口。例:统计某个重要的数据库读写问题比例。
try {
//...
} catch (Throwable thr) {
CrashReport.postCatchedException(thr); // bugly会将这个throwable上报
}
3,自定义日志功能我们提供了自定义Log的接口,用于记录一些开发者关心的调试日志,可以更全面地反应App异常时的前后文环境。使用方式与android.util.Log一致。用户传入TAG和日志内容。该日志将在logcat的输出,并在发生异常时上报。有如下
BuglyLog.v(tag, log)
BuglyLog.d(tag, log)
BuglyLog.i(tag, log)
BuglyLog.w(tag, log)
BuglyLog.e(tag, log)
注意:
第三个功能需要注意,在AndroidMani中没有申请logcat权限,无法使用,最好在初始化时设置isDebug=false。(初始化时的布尔参数)