在 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
    }
  }
}
}