Czytelne raporty o awariach w panelu Crashlytics (Android)

Wybierz platformę: iOS+ Android Flutter Unity


Wtyczka Crashlytics do Gradle może automatycznie wykrywać, kiedy zaciemniasz kod. Gdy kompilacja wygeneruje plik mapowania, wtyczka prześle go aby serwery Crashlytics mogły użyć go do renderowania śladów stosu aplikacji jako niezaciemnionego i czytelnego dla człowieka kodu.

Wymagana konfiguracja w przypadku korzystania z R8, ProGuard i DexGuard

Crashlytics może cofać zaciemnianie za pomocą dowolnego pliku mapowania zgodnego z ProGuard. Został też przetestowany z ProGuard, R8 i DexGuard.

Jeśli Twoja aplikacja używa R8 z włączonym zaciemnianiem oraz Android Gradle w wersji 4.2.0 lub nowszej, Crashlytics będzie generować czytelne raporty o awariach. Pamiętaj, że Crashlytics niedawno ulepszył obsługę aplikacji, które używają zarówno Kotlin, jak i R8, co może prowadzić do niektórych nieoczekiwanych problemów z etykietowaniem.

Jeśli Twoja aplikacja używa pliku konfiguracyjnego ProGuard, musisz zachować informacje Crashlytics potrzebuje do generowania czytelnych raportów o awariach. Aby to zrobić, dodaj te wiersze do pliku konfiguracyjnego ProGuard lub DexGuard:

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

Jeśli masz pytania lub problemy związane z DexGuard, skontaktuj się bezpośrednio z zespołem pomocy Guardsquare. Aby uzyskać pomoc dotyczącą ProGuard, odwiedź fora społeczności Guardsquare i poproś o pomoc eksperta.

Zachowaj zaciemnione warianty kompilacji

Aby wtyczka Crashlytics do Gradle nie przesyłała pliku mapowania w przypadku wariantów, które używają zaciemniania, ustaw właściwość rozszerzenia Gradle firebaseCrashlytics.mappingFileUploadEnabled na false w pliku Gradle modułu (na poziomie aplikacji) (zwykle <project>/<app-module>/build.gradle.kts lub <project>/<app-module>/build.gradle). Może to przyspieszyć kompilację zaciemnionych wersji, ale pamiętaj, że ślady stosu będą zaciemnione na stronie Crashlytics w Konsoli Firebase.

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