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ć dowolny plik mapowania zgodny 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 } } } }