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.

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