Come disabilitare Crashlytics durante lo sviluppo


245

Esiste un modo semplice per disattivare l'SDK Android di Crashlytics durante lo sviluppo?

Non voglio che mandi un crash ogni volta che faccio qualcosa di stupido

D'altra parte non voglio commentare Crashlytics.start()e possibilmente rischiare di dimenticare di decommentarlo e impegnarmi


Hai provato a rimuovere la tua chiave API da manifest, non ricordo se è un crash.
Timmetje,

@timmied Si blocca. Inoltre, commentando l'intera riga Manifestnell'arresto anomalo dell'app, questo rende la domanda un po 'più legittima.
Michael,

Risposte:


172

Marc di Crashlytics qui. Ecco un paio di modi per disabilitare Crashlytics mentre esegui le build di debug!

  1. Usa un Android diverso: versionString per il debug e le versioni di rilascio, quindi disabilita la segnalazione degli arresti anomali dal pannello Web di Crashlytics per la versione di debug.

  2. Termina la chiamata a Crashlytics.start () in un'istruzione if che controlla un flag di debug. È possibile utilizzare un flag personalizzato o un approccio come quelli proposti qui: Come verificare se APK è firmato o "build di debug"?


5
@marcr Che ne dici di usare BuildConfig.DEBUG?
Dannyroa,

3
@dannyroa BuildConfig.DEBUG non è un flag standard che funziona in tutti gli ambienti di build. Credo che sia impostato in modo coerente quando si costruisce con Eclipse e ADT, ma non altrove.
marzo

11
BuildConfig.DEBUGdovrebbe essere usato se stai costruendo usando Gradle. Sarà sempre generato correttamente.
Austyn Mahoney,

3
@marcr che ne pensi dell'ultima versione di crashlytics (come sembra unita a Fabric), la libreria effettua un controllo interno BuildConfig.DEBUG?
ahyhy

2
@akhyar Non viene controllato automaticamente, io uso: if (! BuildConfig.DEBUG) {Fabric.with (this, new Crashlytics ());}
Björn Kechel

387

Ho trovato la soluzione da Crashlytics (con integrazione Fabric)

Inserisci il seguente codice nella tua classe di applicazione onCreate()

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

MODIFICARE:

In Crashalitics 2.3 e versioni successive, questo è deprecato. Il codice corretto è:

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

o

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

(copiato dal metodo obsoleto di Crashlytics disabilitato () )


EDIT2:

Puoi anche aggiungerlo facoltativamente al tuo buildTypein gradle. Questo comando disabilita l'invio del file di mapping crashlytics e la generazione di un ID per ogni build, che accelera le build graduali di tali sapori. (Non disabilita Crashlytics in fase di esecuzione.) Vedi la risposta di Mike B. qui.

buildTypes {
    release {
           ....
    }
    debug {
        ext.enableCrashlytics = false
    }
}

2
Questo è molto più bello da usare e fermerà l'arresto anomalo dell'app se si effettuano chiamate a Crashlytics nel proprio codice, al di fuori della propria classe di applicazione.
speedynomads

1
È stato deprecato in Crashlytics 2.3.0 :(
Damian Walczak,

1
ext.enableCrashlytics = false non funziona neanche con me con 2.5. In realtà, non ha mai funzionato. Anche prima di Fabric.
Bao-Long Nguyen-Trong,

2
Ho una preoccupazione qui. Questo abiliterà Answer e Beta? Sembra che questo dovrebbe essere più corretto: CrashlyticsCore core = new CrashlyticsCore.Builder (). Disabled (BuildConfig.DEBUG) .build (); Fabric.with (this, new Answers (), new Beta (), new Crashlytics.Builder (). Core (core) .build ());
Gbero,

1
ext.enableCrashlytics = false non si arresta in modo anomalo se lo si utilizza correttamente. Come superare l'incidente è nella documentazione dei tessuti: docs.fabric.io/android/crashlytics/build-tools.html .
Frank

46

La risposta scelta non è più corretta. Google ha modificato l'integrazione di Crashlytics. La mia versione attuale è 2.9.1e l'unica cosa che dovevo fare è aggiungere implementation 'com.crashlytics.sdk.android:crashlytics:2.9.1'al mio file Gradle. Non sono necessarie altre cose, bello ma questo significa che Crashlytics è sempre in esecuzione.

Soluzione 1

Compila solo Crashlytics nella versione di rilascio:

dependencies {
   ...
   releaseImplementation 'com.crashlytics.sdk.android:crashlytics:2.9.1' // update version
}

Soluzione 2

Se si desidera configurare ulteriormente Crashlytics, la Soluzione 1 non funziona, poiché le classi Crashlytics non si trovano nelle build di debug. Quindi modifica l'implementazione Gradle in:

implementation 'com.crashlytics.sdk.android:crashlytics:2.9.1' // update version

Quindi vai al tuo manifest e aggiungi il seguente meta-datatag all'interno del applicationtag:

<application
        android:name="...>

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

...

</application>

Aggiungi alla tua attività di lancio (solo una volta, non tutte le attività)

if (!BuildConfig.DEBUG) { // only enable bug tracking in release version
   Fabric.with(this, new Crashlytics());
}

Ciò abiliterà Crashlytics solo nelle versioni di rilascio. Fai attenzione, controlla anche BuildConfig.DEBUG quando configuri Crashlytics, ad esempio:

if (!BuildConfig.DEBUG) {
   Crashlytics.setUserIdentifier("HASH_ID");
}

2
Questo sembra pulito. Invece di inizializzare nell'attività primaria, quando invece non nell'istanza dell'applicazione?
jules,

Enable collection for selected users by initializing Crashlytics from one of your app's activitiesDichiarano sul sito Web: ma suppongo che non cambierà molto se si inizializza Crashlytics nell'applicazione. Hai provato? Se funziona, posso aggiungerlo alla mia risposta. firebase.google.com/docs/crashlytics/customize-crash-reports
Paul Spiesberger

2
Non sono riuscito a far funzionare nessuna delle altre soluzioni, al fine di disabilitare crashlytics in fase di esecuzione. La soluzione 1 ha funzionato perfettamente - perché non ci ho pensato.

Grazie per la soluzione Quando imposto firebase_crashlytics_collection_enabledsu false in manifest, l'arresto anomalo non viene visualizzato sulla console (utilizzo v2.9.9). Quindi ho risolto questo problema aggiungendo manifest separato per il debug build con firebase_crashlytics_collection_enabled=falsee trueper il rilascio
Vasily Kabunov

30

Se usi Gradle basta aggiungere questo a un sapore:

ext.enableCrashlytics = false

1
questo è solo per sapore? che dire di debug vs. release? Ho provato a disabilitare per il debug ma ancora inviare l'incidente
xialin

Penso che funzioni solo sui sapori. L'IMO con la bandiera Austyn e Marcc appuntite è la più semplice.
user1998494,

Ho scoperto la soluzione. ma non sono sicuro che sia compatibile con i vecchi Crashlytics. è per il nuovo Crashlytics in Fabric SDK. controlla la mia risposta qui sotto
xialin

1
Questo comando disabilita l'invio del file di mapping crashlytics e la generazione di un ID per ogni build, che accelera le build graduali di tali sapori. (Non disabilita Crashlytics in fase di esecuzione.) Vedi la risposta di Mike B qui: stackoverflow.com/questions/28339323/…
Aphex,

18
Ciò ha causato un incidente ... " This app relies on Crashlytics."
Sakiboy,

27

Dai un'occhiata all'ultimo documento. https://docs.fabric.io/android/crashlytics/build-tools.html#gradle-advanced-setup .

Oltre ad aggiungere ext.enableCrashlytics = falsebuild.grade devi fare,

Crashlytics crashlyticsKit = new Crashlytics.Builder()
    .core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
    .build();

// Initialize Fabric with the debug-disabled crashlytics.
Fabric.with(this, crashlyticsKit);

Ho provato in questo modo e ancora l'app si blocca conThis app relies on Crashlytics. Please sign up for access at
Balflear,

Immagino che ti manchi ext.enableCrashlytics = falsein build.gradle.
Abhishek Patidar,

No, ho aggiunto il tipo di build di debug nel file build.gradle, è nel buildTypes -> debug, also i'm applying the plugin via plugin di applicazione: 'io.fabric'``
Balflear

Non sono sicuro del perché questa soluzione sia stata persino votata 24 volte. Si blocca conThis app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up
TROD

24

Ho trovato questa la soluzione più semplice:

    release {
        ...
        buildConfigField 'Boolean', 'enableCrashlytics', 'true'
    }
    debug {
        buildConfigField 'Boolean', 'enableCrashlytics', 'false'
    }

Le righe precedenti creeranno un campo booleano statico chiamato enableCrashlyticsnel BuildConfigfile che è possibile utilizzare per decidere se avviare Fabrico meno:

    if (BuildConfig.enableCrashlytics)
        Fabric.with(this, new Crashlytics());

NOTA: con questo metodo i tessuti vengono inizializzati solo nelle build di rilascio (come indicativo nel codice sopra). Ciò significa che è necessario inserire le chiamate ai metodi statici nella Crashlyticsclasse in un ifblocco che verifica se i tessuti sono stati inizializzati come mostrato di seguito.

if (Fabric.isInitialized())
    Crashlytics.logException(e);

Altrimenti l'app si arresterà in modo anomalo Must Initialize Fabric before using singleton()durante il test sull'emulatore.


17

Risposta 2019

Ho provato ad abilitare Crashlytics in versione e disabilitare nel debug per 2 ore, controllando la console di Firebase per vedere se le eccezioni sono state caricate o meno.

Ci sono 2 modi possibili per farlo.

OPZIONE 1

Funziona, ma se chiami un Crashlyticsmetodo su build di debug l'app andrà in crash .

app / build.gradle

android {
    buildTypes {
        release {
            manifestPlaceholders = [crashlyticsEnabled: true]
        }
        debug {
            manifestPlaceholders = [crashlyticsEnabled: false]
        }

AndroidManifest.xml

<manifest
    <application
        <meta-data
            android:name="firebase_crashlytics_collection_enabled"
            android:value="${crashlyticsEnabled}" />

OPZIONE 2

Un'alternativa se ciò consente di chiamare i Crashlyticsmetodi senza BuildConfig.DEBUGprima verificare . Con questa configurazione puoi tranquillamente chiamare metodi come Crashlytics.logException(): semplicemente non fanno nulla nelle build di debug. Non vedo i rapporti caricati nel debug.

app / build.gradle

android {
    buildTypes {
        release {
            ext.enableCrashlytics = true
        }
        release {
            ext.enableCrashlytics = false
        }

AndroidManifest.xml

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

Applicazione onCreate ()

val crashlytics = Crashlytics.Builder()
    .core(CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
    .build()
Fabric.with(this, crashlytics)

Penso che android:value="false"debba essere cambiato in android:value="${enableCrashlytics}". Non è vero?
Jaydeep,

Un altro vantaggio con l'opzione n. 2 è che si inizia con la raccolta di analisi inizialmente disabilitata e quindi si può chiedere all'utente prima che sia OK tenere traccia dell'utilizzo dell'app (si pensi al GDPR). Quindi esegui il Fabric.with solo se l'utente acconsente al monitoraggio.
Per Christian Henden,

L'unico aspetto negativo dell'opzione n. 2 è che crea ancora versioni di debug nella dashboard di Firebase, anche se non verranno mostrati arresti anomali (poiché sono disabilitati). Ciò comporta due problemi: in primo luogo, è più difficile trovare le versioni di rilascio; secondo: la dashboard di Firebase mostra solo le ultime 100 versioni , il che potrebbe impedire di vedere arresti anomali in alcune versioni precedenti. Nella dashboard di Fabric è possibile disabilitare una versione particolare, ciò non è possibile nella dashboard di Firebase.
Alex Lipov,

14

Usa questo in MyApplication#onCreate()

if (!BuildConfig.DEBUG) Crashlytics.start(this);

MODIFICA Se hai eseguito l'upgrade a Fabric, utilizza questa risposta .


BuildConfig.DEBUG non è sempre impostato correttamente. Fare affidamento su di esso per abilitare / disabilitare Crashlytics mi ha causato alcuni problemi durante l'utilizzo di IntelliJ.
Zeb Barnett,

5
Quali strumenti di costruzione stai usando? Gradle imposterà SEMPRE quel valore. È stato un problema un anno fa, ma i nuovi strumenti di costruzione sono molto migliori.
Austyn Mahoney,

Sono su v0.9. + Del plugin Gradle per IntelliJ e v1.11 per Gradle stesso.
Zeb Barnett,

Non ho riscontrato problemi in nessuna delle mie app. BuildConfigviene generato da un'attività Gradle, che è garantita per essere eseguita. Uso anche buildConfigFieldper impostare campi personalizzati e quelli funzionano sempre. tools.android.com/recent/androidstudio045released suggerisce anche di utilizzare BuildConfig.DEBUG.
Austyn Mahoney,

Come idealista, mi piacerebbe sicuramente poterlo utilizzare in quanto semplificherebbe il processo di costruzione non abbastanza automatizzato per la piccola azienda per cui lavoro. È solo che abbiamo rilasciato in produzione una build che dipendeva da quella bandiera e Crashlytics non l'ha mai visto andare in diretta. Dopo che siamo tornati a attivarlo manualmente, Crashlytics lo ha visto immediatamente.
Zeb Barnett,


9

Un'altra soluzione semplice che mi piace, perché non richiede diversi file manifest:

Passaggio 1: definire i segnaposto manifest in build.gradle

android {
    ...
    buildTypes {
        release {
            manifestPlaceholders = [crashlytics:"true"]
        }
        debug {
            manifestPlaceholders = [crashlytics:"false"]
        }
    }
    ...
}

Passaggio 2: utilizzali nel tuo AndroidManifest.xml

<meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="${crashlytics}" />

6

Nota che puoi anche disabilitare il fastidioso caricamento di simboli nella build di debug:

def crashlyticsUploadStoredDeobsDebug = "crashlyticsUploadStoredDeobsDebug"
def crashlyticsUploadDeobsDebug = "crashlyticsUploadDeobsDebug"
tasks.whenTaskAdded { task ->
    if (crashlyticsUploadStoredDeobsDebug.equals(task.name) ||
            crashlyticsUploadDeobsDebug.equals(task.name)) {

        println "Disabling $task.name."
        task.enabled = false
    }
}

Basta inserirlo nel build.gradlemodulo dell'applicazione.


6

Se vuoi catturare tutti gli arresti anomali (per build di debug e release) ma vuoi separarli nel Crashlytics Dashboard, puoi aggiungere questa riga di codice a build.gradle:

debug {
    versionNameSuffix "-DEBUG"
}

Ad esempio, se versionName della tua app è 1.0.0, le build di rilascio saranno contrassegnate come 1.0.0 mentre le build di debug saranno 1.0.0-DEBUG


Questo è? Non hai bisogno di fare sapori?
portfoliobuilder

6

Ci sono molte buone risposte qui, ma per i miei test uso build di debug per beta interni e test fuori dal laboratorio in cui i registri degli arresti anomali sono ancora molto utili e vorrei comunque segnalarli. Come l'OP, tutto ciò che volevo era disabilitarli durante lo sviluppo attivo dove spesso causavo e risolvo rapidamente gli arresti anomali.

Invece di rimuovere TUTTI gli arresti anomali del debug, puoi scegliere di disabilitare i report solo quando un dispositivo è collegato al tuo computer di sviluppo con il seguente codice.

if (!Debug.isDebuggerConnected()) {
    Fabric.with(this, new Crashlytics());
}

È sbagliato. Registro eccezioni non fatali nel mio codice utilizzando Crashlytics.logException(e)e questa istruzione genera un'eccezione nelle build di debug perché Singleton Fabric non è inizializzato. Se usi Crashlytics, inizializza sempre Fabric singleton. Vedi la risposta di Fahmy .
naXa,

5

Il problema è che nessuna delle soluzioni funziona con l'ultimo crashlytics sdk. (Sto usando 2.9.0)

Non è possibile disabilitarlo tramite il codice poiché si compila nel progetto e viene eseguito anche prima di una chiamata su Crea dell'applicazione. Quindi un'altra soluzione è semplice: non compilare crashlytics quando non sono necessari. Sostituisci la chiamata 'compile' con 'releaseCompile' all'interno del file build.gradle.

 releaseCompile('com.crashlytics.sdk.android:crashlytics:2.9.0@aar') {
        transitive = true
    }

3

Versione più semplice aggiornata quando si utilizza Gradle per creare:

if (!BuildConfig.DEBUG) {
    Fabric.with(this, new Crashlytics());
}

Utilizza la nuova sintassi integrata di Fabric for Crashlytics e funziona automaticamente con la build a Gradle.


3

Uno strano problema che ho riscontrato: ho seguito la risposta di xialin (che appare anche sul sito ufficiale) e non ha funzionato. Si è scoperto che stavo facendo riferimento BuildConfignel pacchetto di Fabric che contiene anche una variabile DEBUG statica impostata su false anche in modalità debug.

Quindi, se segui la soluzione di cui sopra e ricevi ancora rapporti di debug, assicurati di fare riferimento a questo:

import com.yourpackagename.BuildConfig;

E non questo:

import io.fabric.sdk.android.BuildConfig;    

2

Se sei preoccupato di BuildConfig.DEBUGnon essere impostato correttamente, usa ApplicationInfoinvece:

boolean isDebug = ( mAppContext.getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) != 0;
Crashlytics crashlytics = new Crashlytics.Builder().disabled( isDebug ).build();
Fabric.with( uIContext, crashlytics );

2

Usa sapori o crea config. Usa un identificatore di build separato per dev build e tutti i tuoi arresti anomali continueranno a passare a un'app separata. Può tornare utile in caso di condivisione della build con peer o utilizzo senza debugger. Qualcosa come questo -

    productFlavors {
    dev {
        applicationId "io.yourapp.developement"
    }
    staging {
        applicationId "io.yourapp.staging"
    }

    production {
        applicationId "io.yourapp.app"
    }

2

Se si desidera creare una versione di debug, ecco il modo:

buildTypes {
    release {
        signingConfig signingConfigs.config
        debuggable true //-> debuggable release build
        minifyEnabled true
        multiDexEnabled false
        ext.enableCrashlytics = true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        buildConfigField 'boolean', 'BUILD_TYPE_DEBUG', 'false'
    }
    debug {
        minifyEnabled false
        multiDexEnabled true
        ext.enableCrashlytics = false
        ext.alwaysUpdateBuildId = false
        // Disable fabric build ID generation for debug builds
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        buildConfigField 'boolean', 'BUILD_TYPE_DEBUG', 'true'
    }
}

Quando imposti debuggable trueBuildConfig.DEBUG verrà inizializzato con true, ecco perché ho aggiunto quella variabile nella classe BuildConfig.

Tessuto Init:

Crashlytics crashlytics = new Crashlytics.Builder()
            // disable crash reporting in debug build types with custom build type variable
            .core(new CrashlyticsCore.Builder().disabled(BuildConfig.BUILD_TYPE_DEBUG).build())
            .build();

    final Fabric fabric = new Fabric.Builder(this)
            .kits(crashlytics)
            //enable debugging with debuggable flag in build type 
            .debuggable(BuildConfig.DEBUG)
            .build();

    // Initialize Fabric with the debug-disabled crashlytics.
    Fabric.with(fabric);

Qual è lo scopo ext.enableCrashlyticse ext.alwaysUpdateBuildIddal momento che non sembrano essere referenziati da nessuna parte. Mi sto perdendo qualcosa?
jules,


BuildConfig.BUILD_TYPE_DEBUG è ridondante, BuildConfig.DEBUG può essere utilizzato per ottenere lo stesso valore
Antonis Radz,

@AntonisRadz Perché avevo bisogno di una versione di debuggable build
M. Reza Nasirloo

1

Possiamo usare il metodo isDebuggable () di fabric.

import static io.fabric.sdk.android.Fabric.isDebuggable;

if(! isDebuggable()){
    // set Crashlytics ... 
}

Buona programmazione :)


1

Puoi usare un file manifest dedicato per la modalità debug (funziona per me con Crashlytics 2.9.7):

Creare il file app/src/debug/AndroidManifest.xmle aggiungere quanto segue:

<application>

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

</application>

Si noti che questo elemento di meta-dati deve essere messo in debug / AndroidManifest.xml solo , e non nella AndroidManifest.xml regolare

La soluzione che utilizza CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()non ha funzionato per me e ho scoperto che crashlytics è inizializzato da CrashlyticsInitProvider prima che venga chiamato Application.onCreate () o che venga avviata un'attività, il che significa che l'inizializzazione manuale del fabric nell'applicazione o un'attività non ha effetto perché il tessuto è già inizializzato.


1

Passaggio 1: in build.grade

buildTypes {
        debug {
            debuggable true
            manifestPlaceholders = [enableCrashlytic:false]
        }
        release {
            debuggable false
            manifestPlaceholders = [enableCrashlytic:true]
        }
    }

Passaggio 2: in manifest

<meta-data
            android:name="firebase_crashlytics_collection_enabled"
            android:value="${enableCrashlytic}" />

Passaggio 3: nell'applicazione o nella prima attività

private void setupCrashReport() {
        if (BuildConfig.DEBUG) return;
        Fabric.with(this, new Crashlytics());
    }

Non sono sicuro se il passaggio 3 sia necessario, ma per assicurarmi che la versione di rilascio funzioni senza crash. fonte: https://firebase.google.com/docs/crashlytics/customize-crash-reports#enable_opt-in_reporting


1

Questo lavoro per me:

    releaseCompile  'com.crashlytics.sdk.android:crashlytics:2.9.9'

e in buildTypes:

debug {
ext.enableCrashlytics = false
}

Che ne dici degli usi di Crashlytics nel codice? Ti darà errori di compilazione.
Micer,

1

Esistono due opzioni per disabilitare Firebase Crashlytics per la seguente versione com.google.firebase: firebase-crashlytics: 17.0.0:

  1. Aggiungi meta-tag al Manifest dell'app

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

O

  1. Configurare direttamente nell'app (tenere presente che quando impostato su false, il nuovo valore non si applica fino alla prossima esecuzione dell'app)

FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)


0

Un altro modo se vuoi solo farlo sul tuo IDE è disconnettersi dal plugin. Apparentemente smetterà di inviare report mentre stai generando build senza accedere di nuovo.


0
  1. Aggiungi questo al build.gradle della tua app:

    android {
        buildTypes {
            debug {
              // Disable fabric build ID generation for debug builds
              ext.enableCrashlytics = false
              ...
  2. Disabilita il kit Crashlytics in fase di esecuzione. Altrimenti, il kit Crashlytics genererà l'errore:

    // Set up Crashlytics, disabled for debug builds
    // Add These lines in your app Application class onCreate method
    
    Crashlytics crashlyticsKit = new Crashlytics.Builder()
        .core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
        .build();
    
    // Initialize Fabric with the debug-disabled crashlytics.
    Fabric.with(this, crashlyticsKit);
  3. In AndroidManifest.xml, aggiungi

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

0

2020 Post Fabric Answer

Incolla il codice seguente nella tua classe Applicazione e chiama il metodo setCrashlyticsStatedall'applicazione su Crea. Se lo debugDevicesdesideri, puoi aggiungere gli ID del tuo dispositivo di test a HashSet in modo che i tuoi dispositivi personali possano essere ignorati, anche quando si costruisce in modalità di rilascio.

Nota. L'ID dispositivo restituito da Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);non è garantito per essere univoco o costante (può cambiare su un ripristino di fabbrica o manualmente su un dispositivo rootato). Ma dovrebbe essere abbastanza buono.

private final HashSet<String> debugDevices = new HashSet<String>(Arrays.asList("6a3d5c2bae3fd32c"));

private boolean isDebugDevice(String deviceId) {
    return debugDevices.contains(deviceId);
}

private void setCrashlyticsState() {
    @SuppressLint("HardwareIds")
    String deviceId = Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
    if (BuildConfig.DEBUG || isDebugDevice(deviceId)) {
        Log.v("DeviceId", deviceId);
        FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(false);
    }
}

Controlla che BuildConfig. sta guardando la classe BuildConfig corretta. Esistono spesso diverse opzioni e potrebbe essere trascinata quella sbagliata.


-8

Questa è una risposta sciocca, lo so
Basta commentare Fabric.with(this, new Crashlytics());, lavorare su questo e decommentarlo quando vuoi rilasciarlo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.