Il plug-in Gradle Crashlytics può rilevare automaticamente quando offuschi il codice. Quando la compilazione genera un file di mappatura, il plug-in lo carica in modo che i server Crashlytics possano utilizzarlo per visualizzare le tracce dello stack dell'app come codice leggibile e non offuscato.
Configurazione richiesta quando si utilizzano R8, ProGuard e DexGuard
Crashlytics può deobfuscare con qualsiasi file di mappatura compatibile con ProGuard ed è stato inoltre testato con ProGuard, R8 e DexGuard.
Se la tua app utilizza R8 con l'offuscamento attivato insieme ad Android Gradle 4.2.0 o versioni successive, Crashlytics produrrà report sugli arresti anomali leggibili. Tieni presente che Crashlytics di recente è stato migliorato il supporto per le app che utilizzano sia Kotlin sia R8, il che può portare a etichettatura dei problemi imprevista.
Se la tua app utilizza il file di configurazione di ProGuard, devi conservare le informazioni richieste da Crashlytics per produrre report sugli arresti anomali leggibili. Aggiungi le seguenti righe al file di configurazione di ProGuard o DexGuard:
-keepattributes SourceFile,LineNumberTable # Keep file names and line numbers. -keep public class * extends java.lang.Exception # Optional: Keep custom exceptions.
Per ricevere assistenza in caso di domande o problemi relativi a DexGuard, contatta direttamente il team di assistenza di Guardsquare. Per assistenza su ProGuard, visita i forum della community di Guardsquare per ricevere assistenza da un esperto.
Mantieni le varianti di build offuscate
Per impedire al plug-in Gradle Crashlytics di caricare il file di mappatura per le varianti che utilizzano l'offuscamento, imposta la proprietà di estensione Gradle firebaseCrashlytics.mappingFileUploadEnabled
su false
nel file Gradle del modulo (a livello di app) (di solito <project>/<app-module>/build.gradle.kts
o <project>/<app-module>/build.gradle
). In questo modo puoi velocizzare i tempi di compilazione per le build offuscate, ma tieni presente che le tracce dello stack risultanti verranno offuscate nella pagina Crashlytics della console 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 } } } }