Otrzymuj czytelne raporty o awariach w panelu Crashlytics


Wtyczka Gradle Crashlytics może automatycznie wykrywać zaciemnianie kodu. Gdy kompilacja wygeneruje plik mapowania, wtyczka prześle go na serwer Crashlytics, aby mógł on użyć tego pliku do wyrenderowania ścieżek wywołań w aplikacji jako kodu niezaszyfrowanego, zrozumiałego dla człowieka.

Konfiguracja wymagana przy korzystaniu z R8, ProGuard i DexGuard

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

Jeśli Twoja aplikacja korzysta z R8 z włączonym zaciemnieniem oraz z Android Gradle w wersji 4.2.0 lub nowszej, Crashlytics będzie generować czytelne raporty o awariach. Pamiętaj, że Crashlytics niedawno poprawiła obsługę aplikacji, które korzystają zarówno z Kotlina, jak i R8, co może prowadzić do nieoczekiwanych oznaczeń 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 do pliku konfiguracji ProGuard lub DexGuard te wiersze:

-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ź forum społeczności Guardsquare, aby uzyskać pomoc od eksperta.

Zachowanie zaciemnionych wersji kompilacji

Aby uniemożliwić wtyczce Gradle Crashlytics przesyłanie pliku mapowania w przypadku wersji, które korzystają z zaciemnienia, w pliku Gradle modułu (na poziomie aplikacji) (zazwyczaj <project>/<app-module>/build.gradle.kts lub <project>/<app-module>/build.gradle) ustaw właściwość rozszerzenia Gradle firebaseCrashlytics.mappingFileUploadEnabled na false. Może to przyspieszyć czas kompilacji zaciemnionych wersji, ale pamiętajmy, że wynikowe ścieżki wywołań 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
    }
  }
}
}