[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