在 Crashlytics 資訊主頁中取得可讀的當機報告


Crashlytics Gradle 外掛程式可自動偵測您何時混淆處理程式碼。建構作業產生對應檔案時,外掛程式會上傳該檔案,讓 Crashlytics 伺服器使用該檔案,將應用程式的堆疊追蹤記錄轉譯為未混淆處理且容易解讀的程式碼。

使用 R8、ProGuard 和 DexGuard 時的必要設定

Crashlytics 可使用任何與 ProGuard 相容的對應檔還原混淆處理,且已通過 ProGuard、R8 和 DexGuard 的測試。

如果應用程式使用 R8,且已開啟混淆功能,並搭配 Android Gradle 4.2.0 以上版本,Crashlytics 會產生可讀取的當機報告。請注意,Crashlytics 最近改善了對同時使用 Kotlin 和 R8 的應用程式的支援,這可能會導致出現一些非預期的問題標籤

如果應用程式使用 ProGuard 設定檔,您必須保留 Crashlytics 產生可讀當機報告所需的資訊。如要這麼做,請在 ProGuard 或 DexGuard 設定檔中加入下列程式碼:

-keepattributes SourceFile,LineNumberTable        # Keep file names and line numbers.
-keep public class * extends java.lang.Exception  # Optional: Keep custom exceptions.

如有 DexGuard 相關問題或需要協助,請直接與 Guardsquare 支援團隊聯絡。如需 ProGuard 相關協助,請前往 Guardsquare 社群論壇,向專家尋求協助。

保留混淆處理的建構變化版本

如要防止 Crashlytics Gradle 外掛程式上傳使用混淆處理的變體對應檔,請在模組 (應用程式層級) Gradle 檔案 (通常為 <project>/<app-module>/build.gradle.kts<project>/<app-module>/build.gradle) 中,將 firebaseCrashlytics.mappingFileUploadEnabled Gradle 擴充功能屬性設為 false。這有助於加快混淆處理建構作業的建構時間,但請注意,產生的堆疊追蹤記錄會在 Firebase 控制台的「Crashlytics」頁面中顯示為經過混淆處理。

Kotlin

import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension

// ...

android {

// To enable Crashlytics mapping file upload for specific build types:
buildTypes {
  getByName("debug") {
    minifyEnabled = true
    configure<CrashlyticsExtension> {
      mappingFileUploadEnabled = false
    }
  }
}

...

// To enable Crashlytics mapping file upload for specific product flavors:
flavorDimensions += "environment"
productFlavors {
  create("staging") {
    dimension = "environment"
    ...
    configure<CrashlyticsExtension> {
      mappingFileUploadEnabled = false
    }
  }
  create("prod") {
    dimension = "environment"
    ...
    configure<CrashlyticsExtension> {
      mappingFileUploadEnabled = true
    }
  }
}
}

Groovy

android {

// To enable Crashlytics mapping file upload for specific build types:
buildTypes {
  debug {
    minifyEnabled true
    firebaseCrashlytics {
      mappingFileUploadEnabled false
    }
  }
}

...

// To enable Crashlytics mapping file upload for specific product flavors:
flavorDimensions "environment"
productFlavors {
  staging {
    dimension "environment"
    ...
    firebaseCrashlytics {
      mappingFileUploadEnabled false
    }
  }
  prod {
    dimension "environment"
    ...
    firebaseCrashlytics {
      mappingFileUploadEnabled true
    }
  }
}
}