web-dev-qa-db-fra.com

Crashlytics de Fabric avec Firebase ne peut pas être désactivé pour les versions DEBUG

J'ai une application qui utilise Crashlytics de Fabric via Firebase . Ce qui suit est la première chose exécutée dans mes applications onCreate

CrashlyticsCore crashlyticsCore = new CrashlyticsCore.Builder()
    .disabled(BuildConfig.DEBUG)
    .build();
Fabric.with(this, new Crashlytics.Builder().core(crashlyticsCore).build());

Néanmoins, les blocages sont soumis en mode DEBUG == true.

J'utilise les versions suivantes

dans mon build.gradle classpath "io.fabric.tools:gradle:1.25.1"

dans mon app/build.gradle implementation "com.crashlytics.sdk.Android:crashlytics:2.9.1"

Malheureusement, les accidents sont toujours signalés. Des idées, ce que je fais mal?

14
peshkira

La documentation de Firebase Crashlytics explique qu’une fois que le rapport est activé dans une session d’application, il ne peut pas être désactivé.

Par défaut, la création de rapports Crashlytics est activée dans un ContentProvider nommé CrashlyticsInitProvider qui s'exécute avant la création de votre instance Application. CrashlyticsInitProvider active ou désactive la création de rapports en fonction de la valeur de méta-donnée firebase_crashlytics_collection_enabled, qui par défaut est true.

Si vous souhaitez que les rapports soient désactivés, il est essentiel que les métadonnées du manifeste soient présentes et définies sur false:

<meta-data
    Android:name="firebase_crashlytics_collection_enabled"
    Android:value="false" />

Recherchez le message dans le logcat lors de l'initialisation de l'application:

CrashlyticsInitProvider: CrashlyticsInitProvider initialization successful

Si le message est présent, firebase_crashlytics_collection_enabled est vrai. Si le message n'est pas présent, vous avez correctement défini les métadonnées pour désactiver le signalement des incidents.

Si les métadonnées sont manquantes ou définies sur true, vous ne pouvez pas désactiver la création de rapports dans votre code à l'aide d'un appel à Fabric.with(...).

Dans un commentaire sur une autre réponse, vous indiquez que vous avez essayé de désactiver la création de rapports à l'aide des métadonnées et que votre tentative a échoué. Recherchez une faute de frappe et assurez-vous que la déclaration est correctement placée dans l'élément <application>. Dans mes tests, je peux désactiver les rapports à l'aide des métadonnées, puis l'activer au moment de l'exécution. 

13
Bob Snyder

Les réponses correctes ont été postées par Bob Snyder et niqueco mais il semble un peu fastidieux de changer la valeur des méta-données chaque fois que vous construisez une version actuelle APK voici donc une solution qui utilise ce que l'on appelle manifestPlaceholder et change automatiquement la valeur en trueou false en fonction de buildType.

Ajoutez les éléments suivants à vos applications build.gradle

Android {

    // ...

    buildTypes {
        debug {
            manifestPlaceholders = [enableCrashReporting:"false"]
        }
        release {
            manifestPlaceholders = [enableCrashReporting:"true"]
        }
    }

}

Et ceci à votre AndroidManifest.xml

<manifest ... >

    <application ...>

        // ...

        <meta-data Android:name="firebase_crashlytics_collection_enabled" Android:value="${enableCrashReporting}" />

    </application>

</manifest>

Vous pouvez vérifier la valeur actuelle en cliquant sur l'onglet Merged Manifest une fois que vous avez ouvert le fichier AndroidManifest.xml. Vous devriez voir quelque chose comme ça:

 Merged manifest meta-data value for crash reporting

30
reVerse

J'ai enfin trouvé le problème. Crashlytics est initialisé à partir d'un fournisseur de contenu. Par conséquent, lorsque vous essayez de désactiver la fonction onCreate() de l'application, il est trop tard. En parcourant le code décompilé, j'ai constaté que vous pouvez désactiver cette initialisation en ajoutant des métadonnées à l'élément <application> du manifeste.

Alors, voici ce que je fais ... J'ai ajouté ceci à app/src/debug/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><!--suppress ALL -->
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
   package="<your app package>">

   <application>
           <meta-data Android:name="firebase_crashlytics_collection_enabled" Android:value="false" />
   </application>

</manifest>

J'ai également désactivé Crashlytics dans le fichier de construction du module de l'application en ajoutant:

    debug {
        ext.enableCrashlytics = false
    }

À ma grande surprise, je n'avais pas besoin de faire la chose Fabric.with(...). Ce qui précède était suffisant.

Cela fonctionne bien: pas de rapports.

8
niqueco

Vous devez désactiver Crashlytics of build.gradle. Désactiver Crashlytics pour les versions de débogage

Android {
    buildTypes {
        debug {
          // Disable fabric build ID generation for debug builds
          ext.enableCrashlytics = false
          ...  
2
vm345

Vous avez cette information dans la documentation Android Personnalisez vos rapports d'incident Firebase

Activer la création de rapports d’inscription: Par défaut, Firebase Crashlytics collecte automatiquement les rapports d’incidents pour tous les utilisateurs de votre application. Pour donner aux utilisateurs plus de contrôle sur les données qu'ils envoient, vous pouvez également activer la création de rapports avec opt-in.

Pour ce faire, vous devez désactiver la collecte automatique et initialiser Crashlytics uniquement pour les utilisateurs opt-in.

Désactivez la collecte automatique avec une balise meta-data dans votre fichier AndroidManifest.xml:

<meta-data
    Android:name="firebase_crashlytics_collection_enabled"
    Android:value="false" />

Activez la collecte pour les utilisateurs sélectionnés en initialisant Crashlytics à partir d'une des activités de votre application:

Fabric.with(this, new Crashlytics());
0
Pradeepkumar Reddy