O plug-in Crashlytics Gradle pode detectar automaticamente quando você ofusca seu código. Quando sua compilação gera um arquivo de mapeamento, o plug-in o carrega para que os servidores do Crashlytics possam usar o arquivo para renderizar os rastreamentos de pilha do seu aplicativo como código não ofuscado e legível por humanos.
Configuração necessária ao usar R8, ProGuard e DexGuard
O Crashlytics pode desofuscar qualquer arquivo de mapeamento compatível com ProGuard e também foi testado com ProGuard, R8 e DexGuard.
Se seu aplicativo usa R8 com ofuscação ativada junto com o Android Gradle 4.2.0+, o Crashlytics produzirá relatórios de falhas legíveis. Observe que o Crashlytics melhorou recentemente o suporte para aplicativos que usam Kotlin e R8, o que pode levar a alguns problemas inesperados de rotulagem .
Se seu aplicativo usa o arquivo de configuração do ProGuard, você precisa preservar as informações que o Crashlytics exige para produzir relatórios de falhas legíveis. Faça isso adicionando as seguintes linhas ao arquivo de configuração do ProGuard ou DexGuard:
-keepattributes SourceFile,LineNumberTable # Keep file names and line numbers. -keep public class * extends java.lang.Exception # Optional: Keep custom exceptions.
Para obter ajuda para dúvidas ou problemas relacionados ao DexGuard, entre em contato diretamente com a equipe de suporte do Guardsquare . Para obter ajuda com o ProGuard, visite os fóruns da comunidade Guardsquare para obter assistência de um especialista.
Manter variantes de compilação ofuscadas
Para evitar que o plug-in Crashlytics Gradle carregue o arquivo de mapeamento para variantes que usam ofuscação, defina a propriedade de extensão firebaseCrashlytics.mappingFileUploadEnabled
Gradle como false
no arquivo Gradle do módulo (nível do aplicativo) (geralmente <project>/<app-module>/build.gradle.kts
ou <project>/<app-module>/build.gradle
). Isso pode ajudar a acelerar os tempos de compilação para compilações ofuscadas, mas observe que os rastreamentos de pilha resultantes aparecerão ofuscados na página Crashlytics do console do 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 } } } }