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