Il plug-in Gradle Crashlytics può rilevare automaticamente quando offuschi il codice. Quando la build genera un file di mapping, il plug-in lo carica in modo che i server Crashlytics possano utilizzarlo per eseguire il rendering delle analisi dello stack dell'app come codice non offuscato e leggibile.
Configurazione obbligatoria quando si utilizzano R8, ProGuard e DexGuard
Crashlytics può eseguire l'offuscamento con qualsiasi file di mapping compatibile con ProGuard ed è stato testato anche 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 un'etichettatura imprevista dei problemi.
Se la tua app utilizza il file di configurazione ProGuard, devi conservare le informazioni richieste da Crashlytics per generare report sugli arresti anomali leggibili. Aggiungi le seguenti righe al file di configurazione 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 con 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 mapping 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 è possibile velocizzare i tempi di compilazione per le build offuscate, ma tieni presente che le tracce dello stack risultanti verranno visualizzate 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 } } } }