Czytelne raporty o awariach w panelu Crashlytics (Android)

Wybierz platformę: iOS+ Android Flutter Unity


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

Wymagana konfiguracja w przypadku korzystania z R8, ProGuard i DexGuard

Crashlytics może usuwać zaciemnienie kodu za pomocą dowolnego pliku mapowania zgodnego z ProGuard. Dodatkowo przetestowano tę usługę z ProGuard, R8 i DexGuard.

Jeśli Twoja aplikacja używa R8 z włączonym zaciemnianiem kodu oraz wtyczki Androida do obsługi Gradle w wersji 4.2.0 lub nowszej, Crashlytics będzie generować czytelne raporty o awariach. Pamiętaj, że w Crashlytics niedawno ulepszono obsługę aplikacji, które używają zarówno Kotlina, jak i R8, co może prowadzić do nieoczekiwanego oznaczania problemów.

Jeśli Twoja aplikacja używa pliku konfiguracji ProGuard, musisz zachować informacje, których Crashlytics wymaga do generowania czytelnych raportów o awariach. Aby to zrobić, dodaj te wiersze do pliku konfiguracji 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 skorzystaj z pomocy eksperta.

Zachowywanie zaciemnionych wariantów kompilacji

Aby uniemożliwić wtyczce Gradle Crashlytics przesyłanie pliku mapowania w przypadku wariantów, które używają zaciemniania kodu, 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ć kompilowanie zaciemnionych kompilacji, ale pamiętaj, że wynikowe zrzuty 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
    }
  }
}
}