Android APP崩溃异常捕获方案处理(umeng/Bugly/xCrash)

[TOC]
目录
Android APP崩溃异常捕获方案处理(umeng/Bugly/xCrash)
1.友盟 umeng
  umeng使用
  umeng参考链接
2.Bugly(腾讯bugly)
  bugly使用
  bugly参考链接
3.xCrash
  xCrash使用
  xCrash参考链接
4.其他]
  ACRA
  Firebase Crashlytics

Android APP崩溃异常捕获方案处理(umeng/Bugly/xCrash)

1.友盟 umeng

接入与基础功能(友盟官方):https://developer.umeng.com/docs/193624/detail/194590

umeng使用

仓库中umeng asms各个版本情况 https://central.sonatype.com/artifact/com.umeng.umsdk/asms/versions

仓库中umeng apm各个版本情况 https://central.sonatype.com/artifact/com.umeng.umsdk/apm/versions

仓库中umeng common各个版本情况 https://central.sonatype.com/artifact/com.umeng.umsdk/common/versions

maven仓库

添加【友盟+】SDK新maven仓库地址

maven { url 'https://repo1.maven.org/maven2/' }

依赖

implementation   'com.umeng.umsdk:common:+'// 必选
implementation   'com.umeng.umsdk:asms:+'// 必选
implementation   'com.umeng.umsdk:apm:+'// U-APM产品包依赖,必选
//或者固定版本如下
implementation 'com.umeng.umsdk:common:9.7.5'// 必选
implementation 'com.umeng.umsdk:asms:1.8.3'// 必选
implementation ("com.umeng.umsdk:apm:1.9.8")

在AndroidManifest.xml中权限 和配置项

//在AndroidManifest.xml中添加权限:
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
<uses-permissionandroid:name="android.permission.INTERNET"/>

//在“AndroidManifest.xml”的“Application”中增加“meta-data”配置项:
<application
    <!-- 配置APP key  对应 https://developer.umeng.com/docs/193624/detail/291362  -->
    <meta-data
         android:name="UMENG_APPKEY"
         android:value="xxx"/>
</application>

使用可以在Application相关生命周期中调用

UMConfigure.setLogEnabled(true);
UMConfigure.init(Context context,int deviceType,"pushSecret");
MobclickAgent.onProfileSignIn("enviroment", "sno"));

umeng参考链接

接入与基础功能(友盟官方):https://developer.umeng.com/docs/193624/detail/194590

友盟奔溃分析(友盟官方): https://developer.umeng.com/docs/193624/detail/193287

友盟(软件异常实时监听的好帮手:Crash)接入教程(csdn) https://blog.csdn.net/qq_37567841/article/details/125443196

腾讯bugly 的crash 上报和umeng的比较 (csdn) https://blog.csdn.net/xiemeimei19851213/article/details/64127953

2.Bugly(腾讯bugly)

bugly使用

官方demo源码(github): https://github.com/BuglyDevTeam/Bugly-Android-Demo

国内demo镜像(gitee): https://gitee.com/jimmy_yu518/Bugly-Android-Demo

仓库中bugly各个版本情况 https://central.sonatype.com/artifact/com.tencent.bugly/crashreport/versions

申请对于app_id等参考

Bugly Android SDK 使用指南 (bugly官方): https://bugly.qq.com/docs/user-guide/instruction-manual-android/?v=1.0.0

依赖

dependencies {
    //其中latest.release指代最新Bugly SDK版本号,也可以指定明确的版本号4.1.9.3
    implementation 'com.tencent.bugly:crashreport:latest.release' 
}

在AndroidManifest.xml中权限 和配置项

//在AndroidManifest.xml中添加权限:
<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" />

//在“AndroidManifest.xml”的“Application”中增加“meta-data”配置项:
<application
    <!-- 配置APP ID -->
    <meta-data
            android:name="BUGLY_APPID"
            android:value="<APP_ID>" />
    <!-- 配置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>

或者上面内容通过manifestPlaceholders进行配置

android {
    ...
    defaultConfig {
        ...
        manifestPlaceholders = [
            "BUGLY_APPID"      : "注册时申请的APPID",
            "BUGLY_APP_VERSION": "${defaultConfig.versionName}",
            "BUGLY_APP_CHANNEL": "you CHANNEL",
        ]
    }
    ...

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

<!-- 配置APP ID -->
<meta-data
           android:name="BUGLY_APPID"
           android:value="${BUGLY_APPID}" />
<!-- 配置APP版本号 -->
<meta-data
           android:name="BUGLY_APP_VERSION"
           android:value="${BUGLY_APP_VERSION}" />
<!-- 配置APP渠道号 -->
<meta-data
           android:name="BUGLY_APP_CHANNEL"
           android:value="${BUGLY_APP_CHANNEL}" />
<!-- 配置Bugly调试模式(true或者false)-->
<meta-data
           android:name="BUGLY_ENABLE_DEBUG"
           android:value="false" />

使用可以在Application中调用

//初始化配置 简单使用 
CrashReport.initCrashReport(getApplicationContext());

//初始化配置 设置UserStrategy
CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(mContext);
strategy.setDeviceModel("xxx");
CrashReport.initCrashReport(getApplicationContext(), strategy);

请避免混淆Bugly,在Proguard混淆文件中增加以下配置:

-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}

bugly参考链接

Bugly SDK (bugly官方):https://bugly.qq.com/v2/downloads

Bugly Android SDK 使用指南 (bugly官方): https://bugly.qq.com/docs/user-guide/instruction-manual-android/?v=1.0.0

Android 腾讯Bugly热更新接入 https://blog.csdn.net/AlpinistWang/article/details/84248026

Android Bugly接入 https://blog.csdn.net/zhao2017/article/details/83538032

集成腾讯Bugly日志收集接入 https://blog.csdn.net/u013007305/article/details/79668414

3.xCrash

官方源码(github): https://github.com/iqiyi/xCrash

国内镜像(gitee):https://gitee.com/mirrors/xCrash

仓库中xCrash各个版本情况 https://central.sonatype.com/artifact/com.iqiyi.xcrash/xcrash-android-lib/versions

xCrash使用

依赖

implementation 'com.iqiyi.xcrash:xcrash-android-lib:3.0.0'

使用初始化

public class MyCustomApplication extends Application {

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        
        xcrash.XCrash.init(this);
    }
}

也可以进行详细部分自定义的配置

// 初始化 XCrash
XCrash.init(getApplicationContext(), new XCrash.InitParameters()
    .setLogDir("/path/to/logdir") // 设置日志目录
    .setMaxLogFiles(5) // 设置最大日志文件数量
);

// 设置崩溃回调
XCrash.setCallback(new XCrash.Callback() {
    @Override
    public void onCrashReportGenerated(File crashFile) {
        // 在这里实现上传逻辑
        uploadCrashReport(crashFile);
    }
});

private void uploadCrashReport(File crashFile) {
    // 实现HTTP POST请求以上传crashFile的内容到服务器
    // 注意:确保使用HTTPS以保护传输中的数据
}

或者对各个配置进行设置大概可能如下:

private ICrashCallback crashCallback = new ICrashCallback() {
    @Override
    public void onCrash(String logPath, String emergency) throws Exception {
        Timber.d("onCrash: \nlogPath: %s\nemergency: %s", logPath, emergency);
    }
};

XCrash.init(this, new XCrash.InitParameters()
            .setAppVersion("1.2.3-beta456-patch789")
            .setJavaRethrow(false)
            .setJavaLogCountMax(10)
            .setJavaDumpAllThreadsWhiteList(new String[]{"^main$", "^Binder:.*", ".*Finalizer.*"})
            .setJavaDumpAllThreadsCountMax(10)
            .setJavaCallback(crashCallback)
            .setNativeRethrow(false)
            .setNativeLogCountMax(10)
            .setNativeDumpAllThreadsWhiteList(new String[]{"^xcrash\\.sample$", "^Signal Catcher$", "^Jit thread pool$", ".*(R|r)ender.*", ".*Chrome.*"})
            .setNativeDumpAllThreadsCountMax(10)
            .setNativeCallback(crashCallback)
            .setAnrRethrow(true)
            .setAnrLogCountMax(10)
            .setAnrCallback(crashCallback)
            .setPlaceholderCountMax(3)
            .setPlaceholderSizeKb(512)
            .setLogDir(getExternalFilesDir("xcrash").toString())
            .setLogFileMaintainDelayMs(1000));

xCrash参考链接

xCrash 详解与源码分析https://www.jianshu.com/p/aed1da70c974

安卓APP崩溃捕获方案:xCrash https://blog.csdn.net/idaretobe/article/details/131655539

4.其他

其他的异常处理有 ACRA(Application Crash Reports for Android)、Firebase Crashlytics 等

Android崩溃推荐 https://www.kdun.com/ask/1291674.html

ACRA

对应git为 https://github.com/ACRA

android acra 使用 https://blog.51cto.com/u_16175448/8618052

使用acra捕捉android apk中的异常 https://blog.csdn.net/lgs790709/article/details/87598957

Firebase Crashlytics

Android 应用接入 Firebase Crashlytics 进行崩溃分析上报 https://www.cnblogs.com/wx2020/p/17153298.html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容