原 Twitter Fabric 已经被 Google 收购,其中 Crashlytics 组件被集成进 Firbase 服务中,所以,要使用 Crashlytics 功能需要首先接入 Firbase 基础服务,再接入 Crashlytics SDK 组件。
接入需要如下几步:
- 接入 Firbase 基础服务依赖
- 接入 Crashlytics 组件依赖
- 自定义 Crashlytics SDK 初始化(可选)
- 接入 NDK Crash 收集依赖(可选)
- 自定键值对(可选)
一、接入 Firbase 基础服务
- 下载 google-services.json 文件,并复制到和 app/buil.gradle 文件平级目录下
- gradle 配置 Firbase 依赖
a. 在根项目 build.gradle 文件里添加 Firbase 插件依赖:
buildscript {
repositories {
google() // Google's Maven repository
}
dependencies {
// ...
classpath 'com.google.gms:google-services:4.3.3' // Google Services plugin
}
}
allprojects {
repositories {
google() // Google's Maven repository
// ...
}
}
b. 在 app/build.gradle 文件应用插件
apply plugin: 'com.android.application'
// Google Play services Gradle plugin
apply plugin: 'com.google.gms.google-services'
android {
// ...
}
c. 添加 Firbase SDK 依赖
dependencies {
// ...
implementation 'com.google.firebase:firebase-core:17.4.1'
}
详细查看 Google Firebase 服务文档
二、接入 Crashlytics SDK
- 将 Crashlytics 代码库和依赖项添加到您的项目级 build.gradle 文件中:
buildscripts {
repositories {
// ...
maven {
url 'https://maven.fabric.io/public'
}
}
dependencies {
// ...
classpath 'io.fabric.tools:gradle:1.31.2'
}
}
allprojects {
repositories {
maven {
url 'https://maven.fabric.io/public'
}
}
}
- 将 Crashlytics 插件、代码库和依赖项添加到您的应用级 build.gradle 中:
apply plugin: 'io.fabric'
dependencies {
implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
}
- 设置标志以启用 SDK
将 useFirebaseAppId 字符串添加到 strings.xml 中:
<string name="com.crashlytics.useFirebaseAppId">true</string>
创建一个 app/fabric.properties 文件,其中包含以下行:
USE_FIREBASE_APP_ID=true
详细查看 Google Firebase Crashlytics 文档
三、测试 Crash
可在 MainActivity.kt 点击事件里制造一个 Crash,重新打开 App,测试 Crash 是否上报成功。
findViewById<TextView>(R.id.tv).setOnClickListener {
// force a crash
Crashlytics.getInstance().crash();
}
四、自定义 Crashlytics SDK 初始化(可选)
完成以上步骤后,Crashlytics SDK 内部会自动初始化。如果你需要自己初始化 SDK,比如设置在 debug 模式下不启用 Crash 上报,在 release 下启用。就需要做如下修改:
- 在 AndroidManifest.xml 文件中添加如下配置,不启用默认初始化
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false"/>
- 选择合适时机手动初始化 Crashlytics
private void configureCrashReporting() {
CrashlyticsCore crashlyticsCore = new CrashlyticsCore.Builder()
.disabled(BuildConfig.DEBUG) // debug 模式下不启用 crash 上报
.build();
// ... 其它一些配置
Fabric.with(this, new Crashlytics.Builder().core(crashlyticsCore).build());
}
五、NDK Crash监控(可选)
Firebase Crashlytics 的官方文档只列出来了 Java 代码的 Crash 监控使用方式,并没有提及 NDK Crash 的监控。
对于大部分 Android 开发者来说,NDK 的 Crash 也确实没有监控的必要,但是考拉这边用了很多第三方 so 库,这些 so 库也是有必要监控起来的。
Firebase Crashlytics 是由 Firebase 收购 Fabric 而来的项目,技术方案也几乎没有变化,所以可以用 Fabric 监控 NDK Crash 的使用方式使用 Firebase Crashlytics。
- 在应用级 build.gradle 中,添加 Crashlytics NDK Crash Reporting 相关配置
apply plugin: 'com.android.application'
// set NDK Crash Reporting enable
crashlytics {
enableNdk true
}
dependencies {
// ...
// Add ndk dependency
implementation 'com.crashlytics.sdk.android:crashlytics-ndk:2.0.5'
}
六、自定键值对(可选)
// 设置唯一标识
Crashlytics.setUserIdentifier("unique identifier")
// 设置其他辅助键值对
Crashlytics.setString(key, value);
Crashlytics.setBool(key, value);
Crashlytics.setInt(key, value);
七、混淆处理
Crashlytics 使用 ProGuard 和 DexGuard 映射文件来将您应用的堆栈轨迹呈现为经过反混淆处理、人能阅读的代码。要生成适当的映射文件,请为 Crashlytics 配置 Proguard 或 Dexguard:
- 为了保留所需的信息,以便 Crashlytics 生成人能阅读的崩溃报告,请在您的 Proguard 或 Dexguard 配置文件中添加以下行:
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
-keep public class * extends java.lang.Exception
- 要让 Crashlytics 自动上传 ProGuard 或 DexGuard 映射文件,请从配置文件中移除以下行(若存在):
-printmapping mapping.txt
tips: 要使用 ProGuard 更快速地进行编译,可以排除 Crashlytics。 请在您的 ProGuard 配置文件中添加以下行:
-keep class com.crashlytics.** { *; }
-dontwarn com.crashlytics.**