bugly是在线log crash收集管理工具,可用于release版本的log控制
官网文档:https://bugly.qq.com/docs/user-guide/instruction-manual-android/?v=20181214145900
1.首先要申请腾讯Bugly账户,可用QQ直接注册,然后创建产品。
2.首页左侧栏对应项目,主要是 崩溃对应 Crash,ANR为app无响应,错误为try catch捕获的exception
3.Android 代码导入
1)build.gradle中添加,如果不需要ndk,可以不导入
android {
defaultConfig {
ndk {
// 设置支持的SO库架构
abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
}
}
}
dependencies {
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
}
2)Mainifest添加权限:
proguard-rules.pro添加防止混淆
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}
3)最简单的初始化是在MyApplication,第三个参数为调试开关,会时时上报数据,release版本可设置为false
@Override
public void onCreate() {
super.onCreate();
CrashReport.initCrashReport(getApplicationContext(), "注册时申请的APPID", true);
initBugly();
}
可以在activity进行crash测试
CrashReport.testJavaCrash();
4)第二种可以设置用户策略
在MyApplication中添加strategy 用户添加策略。
CrashHandleCallback回调内的数据是crash时生成附件文本用的,catch抓取的log(错误分析)是不上传的。
public class AppApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
initBugly();
}
private void initBugly(){
CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(this);
strategy.setAppChannel("myChannel"); //设置渠道
strategy.setAppVersion(getVerName()); //App的版本
strategy.setAppPackageName(getPackageName()); //App的包名
strategy.setCrashHandleCallback(new CrashReport.CrashHandleCallback() {
public Map onCrashHandleStart(int crashType, String errorType,String errorMessage, String errorStack) {
LinkedHashMap map = new LinkedHashMap();
map.put("key", "testValue");
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(this, "80192f23e9", true, strategy);
CrashReport.setUserId("userID");
}
private String getVerName() {
String verName = "";
try {
verName =getPackageManager().
getPackageInfo(context.getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return verName;
}
}
Bugly会在启动10s后联网同步数据,修改这个时间
strategy.setAppReportDelay(20000); //改为20s
5)以下代码为测试Activity
setUserSceneTag:设置该Activity flag 为 9527,便于统计页面,可自定义
putUserData:会在bugly控制台崩溃日志输出该log
postCatchedException:捕获catch的exception,需要手动post,catch里的平台不会自动抓取,例子为ArrayIndexOutOfBoundsException数组越界异常,
CrashReport.setUserSceneTag(this, 9527); // 上报后的Crash会显示该标签
CrashReport.putUserData(this, "userkey", "uservalue");
int[] names={1,2};
try {
int io = names[4];
} catch (Exception e) {
e.printStackTrace();
CrashReport.postCatchedException(e); // bugly会将这个throwable上报
}
4.平台使用
1)崩溃分析会根据代码设定用户策略填表
2)跟踪数据
附件信息extraMessage.txt 是CrashHandleCallback回调中Map的集合,可进行数据统一收集,也可进行本地附件的上传
3)崩溃日志:
代码中设置的log,都会输出到控制台
CrashReport.setUserSceneTag(this, 9527);
CrashReport.putUserData(this, "userkey", "uservalue");