Bugly使用记录——异常上报

Bugly官网首页

SDK文档地址

 

导入SDK

Bugly支持自动和手动两种方式,感谢伟大的AS,自动导入更简单更快

需要操作两个地方

1.在Module的build.gradle文件中添加依赖和属性配置

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
}

2.参数配置

  • 在AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--这个权限是系统应用权限,目前可能影响的是本地locat输出,不影响捕捉异常和异常上报-->
<uses-permission android:name="android.permission.READ_LOGS" />

注:如果您的App需要上传到google play store,您需要将READ_PHONE_STATE权限屏蔽掉或者移除,否则可能会被下架。

  • 请避免混淆Bugly,在Proguard混淆文件中增加以下配置:
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}

初始化

配置完SDK后,就可以初始化和应用了

初始化有两种方式

一种是比较简单,一句代码

获取APP ID并将以下代码复制到项目Application类onCreate()中,Bugly会为自动检测环境并完成配置:

CrashReport.initCrashReport(getApplicationContext(), "注册时申请的APPID", false); 

文档中有注意事项

  • 为了保证运营数据的准确性,建议不要在异步线程初始化Bugly
  • 第三个参数为SDK调试模式开关,调试模式的行为特性如下:输出详细的Bugly SDK的Log;每一条Crash都会被立即上报;自定义日志将会在Logcat中输出。建议在测试阶段建议设置成true,发布时设置为false

第二个事项这里由于没有申请log权限,因此默认为false。

Application建议自己重写继承Application类,在AndroidMani文件,application标签中用name标签指定自己的Application类

另一种需要配置AndroidMani文件,配置比较详细

Bugly2.0及以上版本还支持通过“AndroidManifest.xml”来配置APP信息。如果同时又通过代码中配置了APP信息,则最终以代码配置的信息为准。

在“AndroidManifest.xml”的“Application”中增加“meta-data”配置项:

<application
    <!-- 配置APP ID -->
    <meta-data
            android:name="BUGLY_APPID"
            android:value="<APP_ID>" />
    <!-- 配置APP版本号 -->
    <!--不同于“android:versionName”,“BUGLY_APP_VERSION”配置的是Bugly平台的APP版本号。-->
    <meta-data
            android:name="BUGLY_APP_VERSION"
            android:value="<APP_Version>" />
    <!-- 配置APP渠道号 -->
    <meta-data
            android:name="BUGLY_APP_CHANNEL"
            android:value="<APP_Channel>" />
    <!-- 配置Bugly调试模式(true或者false)-->
    <meta-data
            android:name="BUGLY_ENABLE_DEBUG"
            android:value="<isDebug>" />
</application>

通过“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<String, String> onCrashHandleStart(int crashType, String errorType, String errorMessage, String errorStack) {
                LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
                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);

使用Javascript的异常捕获功能

可以感知到webView中发生的js异常,需要配合webView使用,具体参考文档

 

更多的Bugly日志附加信息

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)

注意:

  • 使用BuglyLog接口时,为了减少磁盘IO次数,我们会先存日志缓存在内存中。当缓存大于一定阈值(默认10K),会将它持久化至文件。您可以通过setCache(int byteSize)接口设置缓存大小,范围为0-30K。例:BuglyLog.setCache(12 * 1024)//将缓存设置为12K
  • 如果您没有使用BuglyLog接口,且初始化Bugly时isDebug参数设置为假,该登录功能将不会有新的资源占用;
  • 为了方便开发者调试,当初始化Bugly的isDebug参数为真时,异常日志同时还会记录Bugly本身的日志请在应用发布时将其设置为假。
  • 上报日志最大30K。

第三个功能需要注意,在AndroidMani中没有申请logcat权限,无法使用,最好在初始化时设置isDebug=false。(初始化时的布尔参数)

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值