O plug-in do Gradle para Crashlytics pode detectar automaticamente quando você ofusca seu código. Quando seu build gera um arquivo de mapeamento, o plug-in faz o upload dele para que os servidores do Crashlytics possam usar o arquivo a fim de renderizar os stack traces do app como um código não ofuscado e legível por humanos.
Configuração necessária ao usar R8, ProGuard e DexGuard
O Crashlytics pode desofuscar com qualquer arquivo de mapeamento compatível com o ProGuard. Além disso, ele foi testado com ProGuard, R8 e DexGuard.
Se o app usar o R8 com a ofuscação ativada junto do Android Gradle 4.2.0+, o Crashlytics vai produzir relatórios de erros legíveis. O Crashlytics melhorou recentemente o suporte a apps que usam o Kotlin e o R8, o que pode levar a algumas rotulações de problemas inesperadas.
Se o app usar o arquivo de configuração do ProGuard, será necessário preservar as informações exigidas pelo Crashlytics para produzir relatórios de erros legíveis. Para isso, adicione as seguintes linhas ao seu 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 ajuda ou resolução de problemas relacionados ao DexGuard, entre em contato diretamente com a equipe de suporte da Guardsquare (em inglês). Para receber ajuda com o ProGuard, acesse os fóruns da comunidade da Guardsquare (em inglês) para receber ajuda de especialistas.
Manter variantes de builds ofuscadas
Para impedir que o plug-in do Gradle para Crashlytics faça upload do arquivo de mapeamento para
variantes que usam ofuscação, defina a
propriedade da extensão firebaseCrashlytics.mappingFileUploadEnabled
do Gradle como
false
no arquivo de módulo (nível do app) do Gradle
(geralmente <project>/<app-module>/build.gradle.kts
ou <project>/<app-module>/build.gradle
). Isso pode ajudar a acelerar
o tempo dos builds ofuscados. No entanto, os stack traces resultantes vão aparecer
ofuscados na página do Crashlytics no 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 } } } }