Otrzymuj czytelne raporty o awariach w panelu Crashlytics


Wtyczka Gradle Crashlytics 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 niezaszyfrowanego i czytelnego kodu.

Wymagana konfiguracja podczas korzystania z R8, ProGuard i DexGuard

Crashlytics może odszyfrować kod za pomocą dowolnego pliku mapowania zgodnego z ProGuard, a dodatkowo został przetestowany z użyciem ProGuard, R8 i DexGuard.

Jeśli Twoja aplikacja korzysta z R8 z włączonym zaciemnianiem kodu oraz z wtyczki Androida do obsługi Gradle w wersji 4.2.0 lub nowszej,Crashlytics będzie generować czytelne raporty o awariach. Pamiętaj, że Crashlyticsostatnio ulepszyliśmy obsługę aplikacji, które korzystają zarówno z języka Kotlin, jak i z R8, co może prowadzić do nieoczekiwanego oznaczania problemów.

Jeśli Twoja aplikacja korzysta z pliku konfiguracyjnego 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.

Zachowaj zaciemnione warianty kompilacji

Aby zapobiec przesyłaniu przez wtyczkę Gradle pliku mapowania wariantów, które korzystają z zaciemniania kodu, ustaw właściwość rozszerzenia Gradle firebaseCrashlytics.mappingFileUploadEnabled na false w pliku Gradle modułu (na poziomie aplikacji) (zazwyczaj <project>/<app-module>/build.gradle.kts lub <project>/<app-module>/build.gradle). Może to przyspieszyć kompilację zaciemnionych wersji, ale pamiętaj, że wynikowe ślady stosu będą zaciemnione na stronie Crashlytics w konsoli 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
    }
  }
}
}