Bug收集(Bugly)(存疑)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zsp_android_com/article/details/82149489

资料

官网
Bugly Android SDK 使用指南

准备

gradle(module)

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.4'
        // 配自动上传符号表插件
        // 快准定位用户Crash代码位
        // 通符号表解析和还原Crash程序堆栈
        classpath 'com.tencent.bugly:symtabfileuploader:1.3.9'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
1.3.9为Bugly插件版本号,更插件仅改版本号并Rebuild即可。

gradle(app)

apply plugin: 'com.android.application'
// 配符号表用Bugly插件
apply plugin: 'bugly'
bugly {
    appId = '1ce500da0b'
    appKey = '225a3f5f-99f2-4025-88b6-7845372b7d3e'
}

android {
    compileSdkVersion 27
    defaultConfig {
        ...
        ndk {
            // 支持SO库架构
            abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
        }
    }
    ...
}

...

dependencies {
    ...
    implementation 'com.tencent.bugly:crashreport:2.6.6.1'
    implementation 'com.tencent.bugly:nativecrashreport:3.0'        
}
appId、appKey必填,除此还可设其它属性
属性 类型 默认值 说明
appId String null App ID
appKey String null App Key
execute boolean true 插件开关
upload boolean true 上传开关
debug boolean false 调试模式开关
appPackage String null App包名
appVersion String null App版本
appChannel String null App渠道
uploadMapping boolean true Mapping文件上传开关
uploadSymbol boolean true Symbol文件上传开关
outputDir String <项目路径>/bugly 符号表文件输出路径
添abiFilter后:
NDK integration is deprecated in the current plugin.  Consider trying the new experimental plugin.
则项目根目录gradle.properties添:
android.useDeprecatedNdk=true

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" />
<uses-permission android:name="android.permission.READ_LOGS" />
上传google play store需屏或移READ_PHONE_STATE(否或被下架)
无READ_LOGS亦可

初始化

建不于异步线程初始Bugly(保运营数据准确性)。获APP ID并复制以下代码至Application之onCreate(),Bugly自检环境并配:

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

第三参SDK调试模式开关(建测试true、发布false),调试模式行为特性:

  • 输出详细Bugly SDK之Log
  • 立即上报每条Crash
  • 自定日志于Logcat输出

App用多进程且各进程都初始Bugly(Application类onCreate()初始Bugly)则每进程Bugly都数据上报致资源浪费。节省流量、内存等资源,建初始时控上报进程,仅主进程上报数据。判主进程(进程名为包名)否并初始Bugly时增一上报进程策略配置。

String packageName = this.getPackageName();
// 当前进程名
String processName = AppUtils.getProcessName(android.os.Process.myPid());
// 是否为上报进程
CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(this);
strategy.setUploadProcess(processName == null || processName.equals(packageName));
// 初始延迟(启2s后联网同步数据,特别需求改该时间)
strategy.setAppReportDelay(20000);
CrashReport.initCrashReport(this, "xxx", true, strategy);

获进程名有多实现法,推荐

package util;

import android.text.TextUtils;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

/**
 * Created on 2018/8/28.
 *
 * @desc AppUtils
 */
public class AppUtils {
    /**
     * 进程号对应进程名
     *
     * @param pid 进程号
     * @return 进程名
     */
    public static String getProcessName(int pid) {
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new FileReader("/proc/" + pid + "/cmdline"));
            String processName = reader.readLine();
            if (!TextUtils.isEmpty(processName)) {
                processName = processName.trim();
            }
            return processName;
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        } finally {
            try {
                if (reader != null) {
                    reader.close();
                }
            } catch (IOException exception) {
                exception.printStackTrace();
            }
        }
        return null;
    }
}

测试

造一Crash(建议通按键触发)体验Bugly。初始Bugly后调Bugly测Java Crash接口,延迟通10s内(测试成功后注/删)。

CrashReport.testJavaCrash();

注意

  • 同用自定捕获异常类与Bugly时需初始Bugly前初始自定捕获异常类,否Bugly不上报。
  • 项目含Native工程或用代码混淆,建配符号表文件,具参符号表配置

疑问

该应用版未配符号表文件,堆栈源代码类名、行号等信息或无法正常显,去配置

猜你喜欢

转载自blog.csdn.net/zsp_android_com/article/details/82149489