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