原 Twitter Fabric 已經(jīng)被 Google 收購(gòu),其中 Crashlytics 組件被集成進(jìn) Firbase 服務(wù)中驯杜,所以顶籽,要使用 Crashlytics 功能需要首先接入 Firbase 基礎(chǔ)服務(wù),再接入 Crashlytics SDK 組件琐脏。
接入需要如下幾步:
- 接入 Firbase 基礎(chǔ)服務(wù)依賴(lài)
- 接入 Crashlytics 組件依賴(lài)
- 自定義 Crashlytics SDK 初始化(可選)
- 接入 NDK Crash 收集依賴(lài)(可選)
- 自定鍵值對(duì)(可選)
一南捂、接入 Firbase 基礎(chǔ)服務(wù)
- 下載 google-services.json 文件吴裤,并復(fù)制到和 app/buil.gradle 文件平級(jí)目錄下
- gradle 配置 Firbase 依賴(lài)
a. 在根項(xiàng)目 build.gradle 文件里添加 Firbase 插件依賴(lài):
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 文件應(yīng)用插件
apply plugin: 'com.android.application'
// Google Play services Gradle plugin
apply plugin: 'com.google.gms.google-services'
android {
// ...
}
c. 添加 Firbase SDK 依賴(lài)
dependencies {
// ...
implementation 'com.google.firebase:firebase-core:17.4.1'
}
詳細(xì)查看 Google Firebase 服務(wù)文檔
二、接入 Crashlytics SDK
- 將 Crashlytics 代碼庫(kù)和依賴(lài)項(xiàng)添加到您的項(xiàng)目級(jí) 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 插件溺健、代碼庫(kù)和依賴(lài)項(xiàng)添加到您的應(yīng)用級(jí) build.gradle 中:
apply plugin: 'io.fabric'
dependencies {
implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
}
- 設(shè)置標(biāo)志以啟用 SDK
將 useFirebaseAppId 字符串添加到 strings.xml 中:
<string name="com.crashlytics.useFirebaseAppId">true</string>
創(chuàng)建一個(gè) app/fabric.properties 文件麦牺,其中包含以下行:
USE_FIREBASE_APP_ID=true
詳細(xì)查看 Google Firebase Crashlytics 文檔
三钮蛛、測(cè)試 Crash
可在 MainActivity.kt 點(diǎn)擊事件里制造一個(gè) Crash,重新打開(kāi) App剖膳,測(cè)試 Crash 是否上報(bào)成功魏颓。
findViewById<TextView>(R.id.tv).setOnClickListener {
// force a crash
Crashlytics.getInstance().crash();
}
四、自定義 Crashlytics SDK 初始化(可選)
完成以上步驟后吱晒,Crashlytics SDK 內(nèi)部會(huì)自動(dòng)初始化甸饱。如果你需要自己初始化 SDK,比如設(shè)置在 debug 模式下不啟用 Crash 上報(bào)仑濒,在 release 下啟用叹话。就需要做如下修改:
- 在 AndroidManifest.xml 文件中添加如下配置,不啟用默認(rèn)初始化
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false"/>
- 選擇合適時(shí)機(jī)手動(dòng)初始化 Crashlytics
private void configureCrashReporting() {
CrashlyticsCore crashlyticsCore = new CrashlyticsCore.Builder()
.disabled(BuildConfig.DEBUG) // debug 模式下不啟用 crash 上報(bào)
.build();
// ... 其它一些配置
Fabric.with(this, new Crashlytics.Builder().core(crashlyticsCore).build());
}
五墩瞳、NDK Crash監(jiān)控(可選)
Firebase Crashlytics 的官方文檔只列出來(lái)了 Java 代碼的 Crash 監(jiān)控使用方式驼壶,并沒(méi)有提及 NDK Crash 的監(jiān)控。
對(duì)于大部分 Android 開(kāi)發(fā)者來(lái)說(shuō)喉酌,NDK 的 Crash 也確實(shí)沒(méi)有監(jiān)控的必要热凹,但是考拉這邊用了很多第三方 so 庫(kù),這些 so 庫(kù)也是有必要監(jiān)控起來(lái)的泪电。
Firebase Crashlytics 是由 Firebase 收購(gòu) Fabric 而來(lái)的項(xiàng)目般妙,技術(shù)方案也幾乎沒(méi)有變化,所以可以用 Fabric 監(jiān)控 NDK Crash 的使用方式使用 Firebase Crashlytics相速。
- 在應(yīng)用級(jí) build.gradle 中股冗,添加 Crashlytics NDK Crash Reporting 相關(guān)配置
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'
}
六、自定鍵值對(duì)(可選)
// 設(shè)置唯一標(biāo)識(shí)
Crashlytics.setUserIdentifier("unique identifier")
// 設(shè)置其他輔助鍵值對(duì)
Crashlytics.setString(key, value);
Crashlytics.setBool(key, value);
Crashlytics.setInt(key, value);
七和蚪、混淆處理
Crashlytics 使用 ProGuard 和 DexGuard 映射文件來(lái)將您應(yīng)用的堆棧軌跡呈現(xiàn)為經(jīng)過(guò)反混淆處理、人能閱讀的代碼烹棉。要生成適當(dāng)?shù)挠成湮募芘?qǐng)為 Crashlytics 配置 Proguard 或 Dexguard:
- 為了保留所需的信息,以便 Crashlytics 生成人能閱讀的崩潰報(bào)告浆洗,請(qǐng)?jiān)谀?Proguard 或 Dexguard 配置文件中添加以下行:
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
-keep public class * extends java.lang.Exception
- 要讓 Crashlytics 自動(dòng)上傳 ProGuard 或 DexGuard 映射文件催束,請(qǐng)從配置文件中移除以下行(若存在):
-printmapping mapping.txt
tips: 要使用 ProGuard 更快速地進(jìn)行編譯,可以排除 Crashlytics伏社。 請(qǐng)?jiān)谀?ProGuard 配置文件中添加以下行:
-keep class com.crashlytics.** { *; }
-dontwarn com.crashlytics.**