Obtenha relatórios de falhas legíveis no painel do Crashlytics

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.

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
   
}
 
}
}
}
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
   
}
 
}
}
}