Existe-t-il un moyen simple de désactiver le SDK Crashlytics Android pendant le développement?
Je ne veux pas qu'il envoie un crash à chaque fois que je fais quelque chose de stupide
D'un autre côté, je ne veux pas commenter Crashlytics.start()
et risquerais peut-être d'oublier de le commenter et de m'engager
android
crashlytics
twitter-fabric
Michael
la source
la source
Manifest
plantages de l'application, cela rend la question un peu plus légitime.Réponses:
Marc de Crashlytics ici. Voici quelques façons de désactiver Crashlytics pendant que vous effectuez vos versions de débogage!
Utilisez un autre Android: versionString pour les versions de débogage et de publication, puis désactivez les rapports de plantage à partir du tableau de bord Web Crashlytics pour la version de débogage.
Enveloppez l'appel à Crashlytics.start () dans une instruction if qui vérifie un indicateur de débogage. Vous pouvez utiliser soit un indicateur personnalisé, soit une approche comme celles proposées ici: Comment vérifier si l'APK est signé ou "debug build"?
la source
BuildConfig.DEBUG
doit être utilisé si vous construisez avec Gradle. Il sera toujours généré correctement.BuildConfig.DEBUG
?J'ai trouvé la solution de Crashlytics (avec intégration Fabric)
Mettez le code suivant dans votre classe Application
onCreate()
ÉDITER:
Dans Crashalitics 2.3 et supérieur, cela est déconseillé. Le bon code est:
ou
(copié depuis la méthode obsolète de Crashlytics désactivée () )
EDIT2:
Vous pouvez également éventuellement ajouter cela à votre
buildType
gradle. Cette commande désactive l'envoi du fichier de mappage crashlytics et la génération d'un ID pour chaque build, ce qui accélère les builds gradle de ces versions. (Il ne désactive pas Crashlytics au moment de l'exécution.) Voir la réponse de Mike B ici.la source
ext.enableCrashlytics = false
ne fonctionne pas pour moi non plus avec 2.5. En fait, cela n'a jamais fonctionné. Même avant le tissu.La réponse choisie n'est plus correcte. Google a changé l'intégration de Crashlytics. Ma version actuelle est
2.9.1
et la seule chose que je devais faire est d'ajouterimplementation 'com.crashlytics.sdk.android:crashlytics:2.9.1'
à mon fichier Gradle. Aucune autre chose n'est requise, c'est bien, mais cela signifie que Crashlytics est toujours en cours d'exécution.Solution 1
Compiler uniquement Crashlytics dans la version finale:
Solution 2
Si vous souhaitez également configurer Crashlytics, la solution 1 ne fonctionne pas, car les classes Crashlytics ne seront pas trouvées dans les versions de débogage. Modifiez donc à nouveau l'implémentation Gradle:
Accédez ensuite à votre manifeste et ajoutez la
meta-data
balise suivante à l'intérieur de laapplication
balise:Ajoutez à votre activité de lancement (une seule fois requise, pas toutes les activités)
Cela n'activera Crashlytics que dans les versions. Soyez prudent, vérifiez également BuildConfig.DEBUG lorsque vous configurez ensuite Crashlytics, par exemple:
la source
Enable collection for selected users by initializing Crashlytics from one of your app's activities
mais je suppose que cela ne change pas grand-chose si vous initialisez Crashlytics dans l'application. Est-ce que tu l'as essayé? Si cela fonctionne, je peux l'ajouter à ma réponse. firebase.google.com/docs/crashlytics/customize-crash-reportsfirebase_crashlytics_collection_enabled
à false dans le manifeste, le crash n'apparaît pas sur la console (j'utilise la v2.9.9). J'ai donc résolu cefirebase_crashlytics_collection_enabled=false
true
Si vous utilisez Gradle, ajoutez simplement ceci à une saveur:
la source
This app relies on Crashlytics.
"Découvrez le dernier doc. https://docs.fabric.io/android/crashlytics/build-tools.html#gradle-advanced-setup .
Outre l'ajout
ext.enableCrashlytics = false
de build.grade, vous devez faire,la source
This app relies on Crashlytics. Please sign up for access at
ext.enableCrashlytics = false
manquez dans build.gradle.buildTypes -> debug, also i'm applying the plugin via
plugin apply: 'io.fabric'`This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up
J'ai trouvé que c'était la solution la plus simple:
Les lignes ci-dessus créeront un champ booléen statique appelé
enableCrashlytics
dans leBuildConfig
fichier que vous pouvez utiliser pour décider d'initierFabric
ou non:REMARQUE: avec cette méthode, Fabrics n'est initialisé que dans les versions (comme indiqué dans le code ci-dessus). Cela signifie que vous devez placer les appels aux méthodes statiques dans la
Crashlytics
classe dans unif
bloc qui vérifie si Fabrics a été initialisé comme indiqué ci-dessous.Sinon, l'application se bloquera avec une
Must Initialize Fabric before using singleton()
erreur lors des tests sur l'émulateur.la source
Réponse 2019
J'ai essayé d'activer Crashlytics uniquement dans la version et de le désactiver dans le débogage pendant 2 heures, en vérifiant la console Firebase pour voir si les exceptions étaient téléchargées ou non.
Il existe 2 façons possibles de procéder.
OPTION 1
Cela fonctionne, mais si vous appelez une
Crashlytics
méthode sur les versions de débogage, l'application se bloquera .app / build.gradle
AndroidManifest.xml
OPTION 2
Une alternative si cela vous permet d'appeler des
Crashlytics
méthodes sans vérifier d'BuildConfig.DEBUG
abord. Avec cette configuration, vous pouvez appeler en toute sécurité des méthodes telles queCrashlytics.logException()
- elles ne font tout simplement rien dans les versions de débogage. Je ne vois pas les rapports téléchargés dans le débogage.app / build.gradle
AndroidManifest.xml
Application surCréer ()
la source
android:value="false"
qu'il faut changer pourandroid:value="${enableCrashlytics}"
. N'est-ce pas?Utilisez ceci dans
MyApplication#onCreate()
MODIFIER Si vous êtes passé à Fabric, utilisez plutôt cette réponse .
la source
BuildConfig
est généré par une tâche Gradle, dont l'exécution est garantie. J'utilise égalementbuildConfigField
pour définir des champs personnalisés et ceux qui fonctionnent toujours. tools.android.com/recent/androidstudio045released suggère également que vous l' utilisiezBuildConfig.DEBUG
.Selon Google, utilisez ce code pour désactiver Crashlytics et cela améliorera également le processus de construction.
référence- https://developer.android.com/studio/build/optimize-your-build
la source
Une autre solution simple que j'aime, car elle ne nécessite pas de fichiers manifest différents:
Étape 1 - Définissez les espaces réservés du manifeste dans build.gradle
Étape 2 - utilisez-les dans votre AndroidManifest.xml
la source
Notez que vous pouvez également désactiver le téléchargement ennuyeux de symboles dans la version de débogage:
Mettez-le simplement dans le
build.gradle
module d'application.la source
Si vous souhaitez capturer tous les plantages (pour les versions de débogage et de publication) mais que vous souhaitez les séparer dans le tableau de bord Crashlytics, vous pouvez ajouter cette ligne de code à build.gradle:
Par exemple, si le nom de version de votre application est 1.0.0, vos versions de version seront étiquetées comme 1.0.0 tandis que les versions de débogage seront 1.0.0-DEBUG
la source
Il y a beaucoup de bonnes réponses ici, mais pour mes tests, j'utilise des versions de débogage pour les bêtas internes et les tests hors laboratoire où les journaux de plantage sont toujours très utiles et je voudrais toujours les signaler. Comme l'OP, tout ce que je voulais, c'était de les désactiver pendant le développement actif où je suis souvent à l'origine et résolvant rapidement des plantages.
Plutôt que de supprimer TOUS les plantages de débogage, vous pouvez choisir de désactiver uniquement les rapports lorsqu'un périphérique est connecté à votre machine de développement avec le code suivant.
la source
Crashlytics.logException(e)
et cette instruction lève une exception dans les versions de débogage car Fabric singleton n'est pas initialisé. Si vous utilisez Crashlytics, initialisez toujours Fabric Singleton. Voir la réponse de fahmy .Le problème est qu'aucune des solutions ne fonctionne pour le dernier sdk crashlytics. (J'utilise 2.9.0)
Vous ne pouvez pas le désactiver par code car il se compile dans votre projet et s'exécute avant même un appel à la création de votre application. Donc, une autre solution est simple - ne compilez pas les crashlytics lorsqu'ils ne sont pas nécessaires. Remplacez l'appel 'compile' par 'releaseCompile' dans le fichier build.gradle.
la source
Version à jour la plus simple lors de l'utilisation de Gradle pour construire:
Il utilise la nouvelle syntaxe intégrée de Fabric for Crashlytics et fonctionne automatiquement avec la version Gradle.
la source
Un étrange problème que j'ai rencontré: j'ai suivi la réponse de xialin (qui apparaît également sur le site officiel) et cela n'a pas fonctionné. Il s'est avéré que je faisais référence
BuildConfig
dans le package de Fabric qui contient également une variable DEBUG statique qui était définie sur false même en mode débogage.Donc, si vous suivez la solution susmentionnée et que vous obtenez toujours des rapports de débogage, assurez-vous de faire référence à ceci:
Et pas ça:
la source
Si vous craignez de
BuildConfig.DEBUG
ne pas être configuré correctement, utilisezApplicationInfo
plutôt:la source
Utilisez des saveurs ou créez des configurations. Utilisez un identifiant de build distinct pour la build de développement et tous vos plantages continueront à aller vers une application distincte. Peut être utile en cas de partage de la build avec des pairs ou de l'utiliser sans débogueur. Quelque chose comme ça -
la source
Si vous voulez une version debuggable, voici le chemin:
Lorsque vous définissez
debuggable true
votre BuildConfig.DEBUG sera initialisé avec true, c'est pourquoi j'ai ajouté cette variable dans la classe BuildConfig.Tissu Init:
la source
ext.enableCrashlytics
etext.alwaysUpdateBuildId
puisqu'ils ne semblent être référencés nulle part. Suis-je en train de manquer quelque chose?Nous pouvons utiliser la méthode isDebuggable () de fabric.
Bon codage :)
la source
Vous pouvez utiliser un fichier manifeste dédié pour le mode débogage (fonctionne pour moi avec Crashlytics 2.9.7):
Créez le fichier
app/src/debug/AndroidManifest.xml
et ajoutez ce qui suit:Notez que cet élément de métadonnées doit être placé dans debug / AndroidManifest.xml uniquement , et non dans le fichier AndroidManifest.xml normal
La solution qui utilise
CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()
n'a pas fonctionné pour moi, et j'ai découvert que crashlytics est initialisé par CrashlyticsInitProvider avant que Application.onCreate () soit appelée ou qu'une activité soit démarrée, ce qui signifie que l'initialisation manuelle du tissu dans l'application ou une activité n'a pas effet car le tissu est déjà initialisé.la source
Étape 1: dans build.grade
Étape 2: dans le manifeste
Étape 3: Dans l'application ou la première activité
Je ne sais pas si l'étape 3 est nécessaire, mais pour m'assurer que la version finale doit fonctionner sans crash. source: https://firebase.google.com/docs/crashlytics/customize-crash-reports#enable_opt-in_reporting
la source
Ce travail pour moi:
et dans buildTypes:
la source
Il existe deux options pour désactiver Firebase Crashlytics pour la version suivante com.google.firebase: firebase-crashlytics: 17.0.0:
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
OU
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)
la source
Une autre façon si vous ne voulez le faire que sur votre IDE est de vous déconnecter du plugin. Apparemment, il cessera d'envoyer des rapports pendant que vous générez des builds sans vous reconnecter.
la source
Ajoutez ceci au build.gradle de votre application:
Désactivez le kit Crashlytics au moment de l'exécution. Sinon, le kit Crashlytics générera l'erreur:
Dans AndroidManifest.xml, ajoutez
la source
Réponse post-tissu 2020
Collez le code ci-dessous dans votre classe Application et appelez la méthode à
setCrashlyticsState
partir de votre application onCreate. Vous pouvez éventuellement ajouter vos ID d'appareil de test à ladebugDevices
ID de HashSet pour que vos périphériques personnels puissent être ignorés, même lors de la construction en mode de libération.Remarque. L'identifiant de périphérique retourné par
Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
n'est pas garanti d'être unique ou constant (il peut changer lors d'une réinitialisation d'usine ou manuellement sur un périphérique rooté). Mais cela devrait être suffisant.Vérifiez que BuildConfig. examine la classe BuildConfig correcte. Il existe souvent plusieurs options et la mauvaise peut être traînée.
la source
C'est une réponse idiote, je sais
juste commenter
Fabric.with(this, new Crashlytics());
, travailler dessus et décommenter quand vous voulez le libérer.la source