El complemento Crashlytics Gradle puede detectar automáticamente cuando ofuscas tu código. Cuando su compilación genera un archivo de mapeo, el complemento lo carga para que los servidores de Crashlytics puedan usar el archivo para representar los seguimientos de la pila de su aplicación como código no ofuscado y legible por humanos.
Configuración requerida al usar R8, ProGuard y DexGuard
Crashlytics puede desofuscar con cualquier archivo de mapeo compatible con ProGuard y, además, se ha probado con ProGuard, R8 y DexGuard.
Si su aplicación usa R8 con la ofuscación activada junto con Android Gradle 4.2.0+, Crashlytics producirá informes de fallos legibles. Tenga en cuenta que Crashlytics mejoró recientemente la compatibilidad con aplicaciones que usan Kotlin y R8, lo que puede provocar algunos problemas inesperados en el etiquetado .
Si su aplicación utiliza el archivo de configuración ProGuard, debe conservar la información que Crashlytics requiere para producir informes de fallos legibles. Haga esto agregando las siguientes líneas a su archivo de configuración de ProGuard o DexGuard:
-keepattributes SourceFile,LineNumberTable # Keep file names and line numbers.
-keep public class * extends java.lang.Exception # Optional: Keep custom exceptions.
Para obtener ayuda si tiene preguntas o problemas relacionados con DexGuard, comuníquese directamente con el equipo de soporte de Guardsquare . Para obtener ayuda con ProGuard, visite los foros de la comunidad de Guardsquare para obtener asistencia de un experto.
Mantener variantes de compilación ofuscadas
Para evitar que el complemento Crashlytics Gradle cargue el archivo de mapeo para variantes que usan ofuscación, establezca la propiedad de extensión firebaseCrashlytics.mappingFileUploadEnabled
Gradle en false
en el archivo Gradle de su módulo (nivel de aplicación) (generalmente <project>/<app-module>/build.gradle.kts
o <project>/<app-module>/build.gradle
). Esto puede ayudar a acelerar los tiempos de compilación para compilaciones ofuscadas, pero tenga en cuenta que los seguimientos de pila resultantes aparecerán ofuscados en la página Crashlytics de Firebase console.
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
}
}
}
}