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 stosu aplikacji jako kodu niezaszyfrowanego i czytelnego dla człowieka.
Konfiguracja wymagana podczas korzystania 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 nieoczekiwanego oznaczenia problemu.
Jeśli Twoja aplikacja korzysta z pliku konfiguracyjnego ProGuard, musisz zachować informacje, których Crashlytics wymaga do generowania czytelnych raportów o błędach. 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.
Aby uzyskać pomoc w sprawach związanych 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 pakietu 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 } } } }