¿Hay alguna forma simple de desactivar Crashlytics Android SDK durante el desarrollo?
No quiero que envíe un bloqueo cada vez que hago algo estúpido
Por otro lado, no quiero comentar Crashlytics.start()
y posiblemente me arriesgue a olvidar descomentarlo y comprometerme
android
crashlytics
twitter-fabric
Miguel
fuente
fuente
Manifest
aplicación bloquea la aplicación, por lo que la pregunta es un poco más legítima.Respuestas:
Marc de Crashlytics aquí. ¡Aquí hay un par de formas de deshabilitar Crashlytics mientras realiza las compilaciones de depuración!
Use un Android diferente: versionString para depurar y liberar compilaciones y luego deshabilite los informes de fallas desde el panel web de Crashlytics para la versión de depuración.
Envuelva la llamada a Crashlytics.start () en una instrucción if que verifica un indicador de depuración. Puede usar un indicador personalizado o un enfoque como los propuestos aquí: ¿Cómo verificar si el APK está firmado o "compilación de depuración"?
fuente
BuildConfig.DEBUG
debe usarse si está construyendo usando Gradle. Siempre se generará correctamente.BuildConfig.DEBUG
?Encontré la solución de Crashlytics (con integración de Fabric)
Ponga el siguiente código dentro de su clase de aplicación
onCreate()
EDITAR:
En Crashalitics 2.3 y superior, esto está en desuso. El código correcto es:
o
(copiado del método obsoleto de Crashlytics deshabilitado () )
EDIT2:
Opcionalmente, también puede agregar esto a su
buildType
in gradle. Este comando deshabilita el envío del archivo de mapeo crashlytics y genera una ID para cada compilación, lo que acelera las compilaciones de gradle de esos sabores. (No desactiva Crashlytics en tiempo de ejecución). Vea la respuesta de Mike B aquí.fuente
ext.enableCrashlytics = false
tampoco funciona para mí con 2.5. En realidad, nunca funcionó. Incluso antes de la tela.La respuesta elegida ya no es correcta. Google cambió la integración de Crashlytics. Mi versión actual es
2.9.1
y lo único que tuve que hacer es agregarimplementation 'com.crashlytics.sdk.android:crashlytics:2.9.1'
a mi archivo Gradle. No se requieren más cosas, bueno, pero esto significa que Crashlytics siempre se está ejecutando.Solución 1
Solo compila Crashlytics en la versión de lanzamiento:
Solución 2
Si desea configurar adicionalmente Crashlytics, entonces la Solución 1 no funciona, ya que las clases de Crashlytics no se encontrarán en Debug Builds. Así que cambie la implementación de Gradle a:
Luego vaya a su Manifiesto y agregue la siguiente
meta-data
etiqueta dentro de laapplication
etiqueta:Agregue a su actividad de lanzamiento (solo se requiere una vez, no todas las actividades)
Esto solo habilitará Crashlytics en las versiones de lanzamiento. Tenga cuidado, también verifique BuildConfig.DEBUG cuando configure Crashlytics, por ejemplo:
fuente
Enable collection for selected users by initializing Crashlytics from one of your app's activities
pero supongo que no cambia mucho si inicializa Crashlytics en la aplicación. ¿Lo intentaste? Si funciona, entonces puedo agregarlo a mi respuesta. firebase.google.com/docs/crashlytics/customize-crash-reportsfirebase_crashlytics_collection_enabled
falso en manifiesto, el bloqueo no aparece en la consola (uso v2.9.9). Así que arreglé esto agregando un manifiesto separado para la compilación de depuración confirebase_crashlytics_collection_enabled=false
ytrue
para el lanzamientoSi usa Gradle, simplemente agregue esto a un sabor:
fuente
This app relies on Crashlytics.
"Mira el último documento. https://docs.fabric.io/android/crashlytics/build-tools.html#gradle-advanced-setup .
Además de agregar
ext.enableCrashlytics = false
build.grade, debes hacerlo,fuente
This app relies on Crashlytics. Please sign up for access at
ext.enableCrashlytics = false
en build.gradle.buildTypes -> debug, also i'm applying the plugin via
complemento de aplicación: 'io.fabric'`This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up
Encontré que esta es la solución más fácil:
Las líneas anteriores crearán un campo booleano estático llamado
enableCrashlytics
en elBuildConfig
archivo que puede usar para decidir si iniciarFabric
o no:NOTA: con este método, Fabrics se inicializa solo en versiones de lanzamiento (como se indica en el código anterior). Esto significa que debe poner llamadas a métodos estáticos en la
Crashlytics
clase en unif
bloque que verifique si Fabrics se ha inicializado como se muestra a continuación.De lo contrario, la aplicación se bloqueará con un
Must Initialize Fabric before using singleton()
error al probar en el emulador.fuente
Respuesta 2019
He estado tratando de habilitar Crashlytics solo en la versión y deshabilitarlo en la depuración durante 2 horas, comprobando la consola de Firebase para ver si las Excepciones estaban cargadas o no.
Hay 2 formas posibles de hacer esto.
OPCIÓN 1
Funciona, pero si llama a cualquier
Crashlytics
método de compilación de depuración, la aplicación se bloqueará .app / build.gradle
AndroidManifest.xml
OPCION 2
Una alternativa si eso le permite llamar a
Crashlytics
métodos sin verificarBuildConfig.DEBUG
primero. Con esta configuración, puede llamar con seguridad a métodos comoCrashlytics.logException()
: simplemente no hacen nada en las compilaciones de depuración. No veo que los informes se carguen en depuración.app / build.gradle
AndroidManifest.xml
Aplicación onCreate ()
fuente
android:value="false"
tiene que cambiarse aandroid:value="${enableCrashlytics}"
. ¿No es así?Use esto en
MyApplication#onCreate()
EDITAR Si actualizó a Fabric, use esta respuesta en su lugar.
fuente
BuildConfig
es generado por una tarea de Gradle, que se garantiza su ejecución. También usobuildConfigField
para configurar campos personalizados y esos siempre funcionan. tools.android.com/recent/androidstudio045released también sugiere que lo useBuildConfig.DEBUG
.Según Google, use este código para deshabilitar Crashlytics y también mejorará el proceso de compilación.
referencia- https://developer.android.com/studio/build/optimize-your-build
fuente
Otra solución simple que me gusta, porque no requiere diferentes archivos de manifiesto:
Paso 1: defina marcadores de posición de manifiesto en build.gradle
Paso 2: úsalos en tu AndroidManifest.xml
fuente
Tenga en cuenta que también puede deshabilitar la carga molesta de símbolos en la compilación de depuración:
Simplemente colóquelo en el
build.gradle
módulo de su aplicación.fuente
Si desea capturar todos los bloqueos (para las versiones de depuración y lanzamiento) pero desea separarlos en el Panel de control de Crashlytics, puede agregar esta línea de código a build.gradle:
Por ejemplo, si el nombre de la versión de su aplicación es 1.0.0, sus versiones de lanzamiento se etiquetarán como 1.0.0, mientras que las versiones de depuración serán 1.0.0-DEBUG
fuente
Hay muchas buenas respuestas aquí, pero para mis pruebas uso compilaciones de depuración para versiones beta internas y pruebas fuera del laboratorio donde los registros de fallas siguen siendo muy útiles y todavía me gustaría informarlos. Al igual que el OP, todo lo que quería era deshabilitarlos durante el desarrollo activo, donde a menudo estoy causando y resolviendo fallas rápidamente.
En lugar de eliminar TODOS los bloqueos de depuración, puede optar por desactivar solo los informes mientras un dispositivo está conectado a su máquina de desarrollo con el siguiente código.
fuente
Crashlytics.logException(e)
y esta declaración arroja una excepción en las compilaciones de depuración porque el singleton de Fabric no está inicializado. Si usa Crashlytics, siempre inicialice Fabric Singleton. Ver la respuesta de fahmy .El problema es que ninguna de las soluciones funciona para el último sdk de crashlytics. (Estoy usando 2.9.0)
No puede deshabilitarlo por código, ya que se compila en su proyecto y se ejecuta incluso antes de una llamada al Crear su aplicación. Por lo tanto, otra solución es simple: no compile crashlytics cuando no sea necesario. Reemplace la llamada 'compilar' con 'releaseCompile' dentro del archivo build.gradle.
fuente
La versión más fácil y actualizada al usar Gradle para compilar:
Utiliza la nueva sintaxis incorporada de Fabric para Crashlytics y funciona automáticamente con la construcción de Gradle.
fuente
Un problema extraño que encontré: seguí la respuesta de xialin (que también aparece en el sitio web oficial) y no funcionó. Resultó que estaba haciendo referencia
BuildConfig
en el paquete de Fabric que también contiene una variable DEBUG estática que se estableció en falso incluso en modo de depuración.Por lo tanto, si sigue la solución mencionada y aún recibe informes de depuración, asegúrese de hacer referencia a esto:
Y no esto:
fuente
Si le preocupa
BuildConfig.DEBUG
no estar configurado correctamente, useApplicationInfo
en su lugar:fuente
Usa sabores o crea configuraciones. Use un identificador de compilación separado para la compilación de desarrollo y todos sus bloqueos seguirán yendo a una aplicación separada. Puede ser útil en caso de compartir la compilación con pares o usarla sin un depurador. Algo como esto -
fuente
Si desea una versión de lanzamiento depurable, esta es la forma:
Cuando configura
debuggable true
su BuildConfig.DEBUG se inicializará con verdadero, es por eso que agregué esa variable en la clase BuildConfig.Tela de Init:
fuente
ext.enableCrashlytics
yext.alwaysUpdateBuildId
ya que no parecen estar referenciados en ninguna parte? ¿Me estoy perdiendo de algo?Podemos usar el método isDebuggable () de fabric.
Feliz codificación :)
fuente
Puede usar un archivo de manifiesto dedicado para el modo de depuración (funciona para mí con Crashlytics 2.9.7):
Cree el archivo
app/src/debug/AndroidManifest.xml
y agregue lo siguiente:Tenga en cuenta que este elemento de metadatos se debe poner en debug / AndroidManifest.xml solamente , y no en el AndroidManifest.xml regulares
La solución que utiliza
CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()
no funcionó para mí, y descubrí que CrashlyticsInitProvider inicializa crashlytics antes de que se llame a Application.onCreate () o que se inicie cualquier actividad, lo que significa que inicializar manualmente la tela en la aplicación o una actividad no tiene efecto porque la tela ya está inicializada.fuente
Paso 1: en build.grade
Paso 2: en manifiesto
Paso 3: en la aplicación o primera actividad
No estoy seguro de si el paso 3 es necesario, pero para asegurarme de que la versión de lanzamiento funcione sin fallar. fuente: https://firebase.google.com/docs/crashlytics/customize-crash-reports#enable_opt-in_reporting
fuente
Este trabajo para mi:
y en buildTypes:
fuente
Hay dos opciones para deshabilitar Firebase Crashlytics para la siguiente versión com.google.firebase: firebase-crashlytics: 17.0.0:
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
O
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)
fuente
Otra forma si solo desea hacerlo en su IDE es cerrar la sesión del complemento. Aparentemente, dejará de enviar informes mientras genera compilaciones sin iniciar sesión nuevamente.
fuente
Agregue esto al build.gradle de su aplicación:
Deshabilita el kit Crashlytics en tiempo de ejecución. De lo contrario, el kit Crashlytics arrojará el error:
En AndroidManifest.xml, agregue
fuente
Respuesta de 2020 Post Fabric
Pegue el código a continuación en su clase de Aplicación y llame al método
setCrashlyticsState
desde su aplicación en Crear. Opcionalmente, también puede agregar sus ID de dispositivo de prueba aldebugDevices
HashSet para que sus dispositivos personales puedan ser ignorados, incluso cuando se construye en modo de lanzamiento.Nota. El ID del dispositivo devuelto por
Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
No se garantiza que la sea única o constante (puede cambiar en un restablecimiento de fábrica o manualmente en un dispositivo rooteado). Pero debería ser lo suficientemente bueno.Verifique que BuildConfig. está mirando la clase BuildConfig correcta. A menudo hay varias opciones y se puede arrastrar la incorrecta.
fuente
Esta es una respuesta tonta, lo sé.
Solo comente
Fabric.with(this, new Crashlytics());
, trabaje en eso y descomente cuando quiera lanzarlo.fuente