Como desativar o Crashlytics durante o desenvolvimento

245

Existe alguma maneira simples de desativar o Crashlytics Android SDK durante o desenvolvimento?

Não quero que ele acerte toda vez que faço algo estúpido

Por outro lado, não quero comentar Crashlytics.start()e, possivelmente, correr o risco de esquecer de descomentar e comprometer

Michael
fonte
Você já tentou remover sua chave api do manifesto, não me lembro se isso foi um acidente.
21813 Timmetje
@timmied Falha. Também comentando toda a linha nas Manifestfalhas do aplicativo, isso torna a pergunta um pouco mais legítima.
Michael

Respostas:

172

Marc de Crashlytics aqui. Aqui estão algumas maneiras de desativar o Crashlytics enquanto você faz suas compilações de depuração!

  1. Use um andróide diferente: versionString para compilações de depuração e lançamento e desative o relatório de falhas no painel da web do Crashlytics para a versão de depuração.

  2. Quebre a chamada para Crashlytics.start () em uma instrução if que verifique um sinalizador de depuração. Você pode usar um sinalizador personalizado ou uma abordagem como as propostas aqui: Como verificar se o APK está assinado ou "compilação de depuração"?

marcr
fonte
5
@marcr Que tal usar apenas o BuildConfig.DEBUG?
Dannyroa 06/12/19
3
@dannyroa BuildConfig.DEBUG não é um sinalizador padrão que funciona em todos os ambientes de compilação. Eu acredito que é definido de forma consistente ao criar com o Eclipse e o ADT, mas não em outro lugar.
marcr
11
BuildConfig.DEBUGdeve ser usado se você estiver construindo usando Gradle. Sempre será gerado corretamente.
Austyn Mahoney
3
@ marcr Que tal na versão mais recente do crashlytics (como parece mesclada com o Fabric), a biblioteca faz verificação interna para BuildConfig.DEBUG?
akhy
2
@akhyar Não é verificada automaticamente, eu uso: if (BuildConfig.DEBUG!) {Fabric.with (isso, novas Crashlytics ());}
Björn Kechel
387

Encontrei a solução da Crashlytics (com integração de malha)

Coloque o seguinte código dentro da sua classe Application onCreate()

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

EDITAR:

No Crashalitics 2.3 e acima, isso foi preterido. O código correto é:

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

ou

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

(copiado do método reprovado Crashlytics desativado () )


EDIT2:

Opcionalmente, você também pode adicioná-lo ao seu buildTypeem gradle. Esse comando desativa o envio do arquivo de mapeamento crashlytics e a geração de um ID para cada build, o que acelera a criação de gradles desses tipos. (Não desativa o Crashlytics em tempo de execução.) Veja a resposta de Mike B aqui.

buildTypes {
    release {
           ....
    }
    debug {
        ext.enableCrashlytics = false
    }
}
xialina
fonte
2
É muito mais agradável de usar e interromperá o travamento do aplicativo se você fizer chamadas para o Crashlytics em seu código, fora da classe Application.
speedynomads
1
Foi preterido no Crashlytics 2.3.0 :(
Damian Walczak
1
ext.enableCrashlytics = false também não funciona para mim com o 2.5. Na verdade, nunca funcionou. Mesmo antes do Fabric.
Bao-Long Nguyen-Trong
2
Eu tenho uma preocupação aqui. Isso ativará o Answer e o Beta? Parece que isso deve estar mais correto: 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 não falha se você o usar corretamente. Como superar a falha está na documentação do Fabrics: docs.fabric.io/android/crashlytics/build-tools.html .
Frank
46

A resposta escolhida não está mais correta. O Google mudou a integração do Crashlytics. Minha versão atual é 2.9.1e a única coisa que eu tenho que fazer é adicionar implementation 'com.crashlytics.sdk.android:crashlytics:2.9.1'ao meu arquivo Gradle. Não é necessário mais nada, é bom, mas isso significa que o Crashlytics está sempre em execução.

Solução 1

Apenas compile o Crashlytics na versão:

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

Solução 2

Se você deseja configurar adicionalmente o Crashlytics , a Solução 1 não está funcionando, pois as classes do Crashlytics não serão encontradas nas Construções de Depuração. Então, mude a implementação Gradle de volta para:

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

Em seguida, vá para o seu manifesto e adicione a seguinte meta-datatag dentro doapplication tag:

<application
        android:name="...>

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

...

</application>

Adicione à sua Atividade de Lançamento (apenas uma vez necessária, nem todas as Atividades)

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

Isso ativará apenas o Crashlytics nas versões de lançamento. Cuidado, verifique também o BuildConfig.DEBUG ao configurar o Crashlytics, por exemplo:

if (!BuildConfig.DEBUG) {
   Crashlytics.setUserIdentifier("HASH_ID");
}
Paul Spiesberger
fonte
2
Isso parece limpo. Em vez de inicializar na atividade principal, quando não estiver na instância de Aplicativo?
Jules
Eles afirmam no site: Enable collection for selected users by initializing Crashlytics from one of your app's activitiesmas acho que não muda muito se você inicializar o Crashlytics no aplicativo. Você tentou? Se funcionar, posso adicioná-lo à minha resposta. firebase.google.com/docs/crashlytics/customize-crash-reports
Paul Spiesberger
2
Não consegui que nenhuma outra solução funcionasse, a fim de desativar os crashlytics em tempo de execução. A solução 1 funcionou perfeitamente - por que não pensei nisso.
Obrigado pela solução. Quando defino firebase_crashlytics_collection_enabledcomo false no manifesto, a falha não aparece no console (uso a versão 2.9.9). Então eu fixo isso adicionando manifesto separado para compilação de depuração com firebase_crashlytics_collection_enabled=falsee truepara a liberação
Vasily Kabunov
30

Se você usa Gradle, basta adicionar isso a um sabor:

ext.enableCrashlytics = false
user1998494
fonte
1
isso é só pelo sabor? o que dizer de debug vs. release? Tentei desativar a depuração, mas ainda enviar o acidente
Xialin
Eu acho que só funciona com sabores. A IMO usando a bandeira apontada por Austyn e Marcc é a mais fácil.
user1998494
Eu descobri a solução. mas não tenho certeza se é compatível com os antigos Crashlytics. é para o novo Crashlytics no Fabric SDK. verifique minha resposta abaixo
xialin 28/11
1
Esse comando desabilita o envio do arquivo de mapeamento crashlytics e a geração de um ID para cada compilação, o que acelera a compilação gradual desses tipos. (Ele não desativa o Crashlytics em tempo de execução.) Veja a resposta de Mike B aqui: stackoverflow.com/questions/28339323/…
Aphex
18
Isso causou um acidente ... " This app relies on Crashlytics."
Sakiboy 29/01
27

Confira o documento mais recente. https://docs.fabric.io/android/crashlytics/build-tools.html#gradle-advanced-setup .

Além de adicionar o ext.enableCrashlytics = falsebuild.grade que você precisa,

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);
Abhishek Patidar
fonte
Eu tentei desta forma, e ainda aplicação falhas comThis app relies on Crashlytics. Please sign up for access at
Balflear
Eu acho que você está faltando ext.enableCrashlytics = falseno build.gradle.
Abhishek Patidar
Não, eu adicionei no tipo de compilação de depuração no arquivo build.gradle, está em buildTypes -> debug, also i'm applying the plugin via aplicar plugin: 'io.fabric'`
Balflear
Não sei por que essa solução foi votada 24 vezes. This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up
Falha
24

Eu achei que essa era a solução mais fácil:

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

As linhas acima criarão um campo boolean estático chamado enableCrashlyticsno BuildConfigarquivo que você pode usar para decidir se deve iniciar Fabricou não:

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

OBSERVAÇÃO: Com esse método, o Fabrics é inicializado apenas nas versões da versão (como indicativo no código acima). Isso significa que você precisa colocar chamadas para métodos estáticos na Crashlyticsclasse em um ifbloco que verifica se o Fabrics foi inicializado como mostrado abaixo.

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

Caso contrário, o aplicativo falhará com Must Initialize Fabric before using singleton()erro ao testar no emulador.

fahmy
fonte
17

2019 Resposta

Eu tenho tentado ativar apenas o Crashlytics na versão e desativado na depuração por 2 horas, verificando o console do Firebase para ver se as exceções foram carregadas ou não.

Existem 2 maneiras possíveis de fazer isso.

OPÇÃO 1

Funciona, mas se você chamar qualquer Crashlyticsmétodo na compilação de depuração, o aplicativo falhará .

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}" />

OPÇÃO 2

Uma alternativa, se isso permitir que você chame Crashlyticsmétodos sem verificar BuildConfig.DEBUGprimeiro. Com essa configuração, você pode chamar métodos com segurança Crashlytics.logException()- eles simplesmente não fazem nada nas versões de depuração. Não vejo os relatórios sendo carregados na depuração.

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" />

Aplicativo onCreate ()

val crashlytics = Crashlytics.Builder()
    .core(CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
    .build()
Fabric.with(this, crashlytics)
Albert Vila Calvo
fonte
Eu acho que android:value="false"tem que ser mudado para android:value="${enableCrashlytics}". Não é?
JaydeepW
Outra vantagem da opção 2 é que você começa com a coleção de análises desativada inicialmente e, em seguida, pode pedir ao usuário que não há problema em rastrear o uso de aplicativos (pense no GDPR). Então você faria a chamada Fabric.w apenas se o usuário consentir em rastrear.
Por Christian Henden em
A única desvantagem da opção 2 é que ela ainda cria versões de depuração no painel do Firebase, mesmo que nenhuma falha seja mostrada lá (uma vez que está desativada). Isso cria dois problemas - primeiro, fica mais difícil encontrar versões de lançamento; segundo - o painel do Firebase mostra apenas as últimas 100 versões - o que pode impedir que você veja falhas em algumas versões antigas. No painel do Fabric, você pode desativar uma versão específica, isso não é possível no painel do Firebase.
Alex Lipov
14

Use isso em MyApplication#onCreate()

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

EDITAR Se você atualizou para o Fabric, use esta resposta .

Austyn Mahoney
fonte
O BuildConfig.DEBUG nem sempre é definido corretamente. Confiar nele para ativar / desativar o Crashlytics causou alguns problemas para mim ao usar o IntelliJ.
Zeb Barnett
5
Quais ferramentas de construção você está usando? Gradle SEMPRE definirá esse valor. Foi um problema há um ano, mas as novas ferramentas de construção são muito melhores.
Austyn Mahoney
Estou na v0.9. + Do plugin Gradle para IntelliJ e na v1.11 para o próprio Gradle.
precisa
Não vi nenhum problema em nenhum dos meus aplicativos. BuildConfigé gerado por uma tarefa Gradle, com garantia de execução. Eu também uso buildConfigFieldpara definir campos personalizados e esses sempre funcionam. tools.android.com/recent/androidstudio045released também sugere que você o use BuildConfig.DEBUG.
Austyn Mahoney
Como idealista, com certeza gostaria de poder usá-lo, pois simplificaria o processo de criação não muito automatizado para a pequena empresa em que trabalho. Só que lançamos em produção uma compilação que dependia dessa bandeira e o Crashlytics nunca a viu ir ao ar. Depois voltamos a alterná-lo manualmente, o Crashlytics o viu imediatamente.
Zeb Barnett
9

Outra solução simples que eu gosto, porque não requer diferentes arquivos de manifesto:

Etapa 1 - defina espaços reservados manifestos em build.gradle

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

Etapa 2 - use-os no seu AndroidManifest.xml

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

Observe que você também pode desativar o carregamento irritante de símbolos na compilação de depuração:

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 colocá-lo no build.gradlemódulo do seu aplicativo.

Ariel Cabib
fonte
6

Se você deseja capturar todas as falhas (para compilações de depuração e lançamento), mas deseja separá-las no Crashlytics Dashboard, é possível adicionar esta linha de código ao build.gradle:

debug {
    versionNameSuffix "-DEBUG"
}

Por exemplo, se versionName do seu aplicativo for 1.0.0, as versões do seu lançamento serão marcadas como 1.0.0 enquanto as versões de depuração serão 1.0.0-DEBUG

Khronos
fonte
É isso? Não há necessidade de fazer sabores?
portfoliobuilder
6

Há muitas respostas boas aqui, mas, para meus testes, utilizo compilações de depuração para betas internos e testes fora do laboratório, onde os logs de falhas ainda são muito úteis e eu ainda gostaria de relatá-los. Como o OP, tudo que eu queria era desativá-los durante o desenvolvimento ativo, onde estou causando e resolvendo rapidamente falhas.

Em vez de remover TODAS as falhas de depuração, você pode optar por desativar apenas os relatórios enquanto um dispositivo estiver conectado à sua máquina de desenvolvimento com o código a seguir.

if (!Debug.isDebuggerConnected()) {
    Fabric.with(this, new Crashlytics());
}
William henderson
fonte
Está errado. Registro exceções não fatais no meu código usando Crashlytics.logException(e)e esta instrução lança uma exceção nas compilações de depuração porque o singleton do Fabric não é inicializado. Se você usar o Crashlytics, sempre inicialize o Singleton do Fabric. Veja a resposta de fahmy .
naXa 08/09/19
5

O problema é que nenhuma das soluções funciona para os mais recentes crashlytics sdk. (Estou usando 2.9.0)

Você não pode desabilitá-lo por código, pois ele é compilado em seu projeto e executado antes mesmo de uma chamada em Criar seu aplicativo. Portanto, outra solução é simples - não compile crashlytics quando não for necessário. Substitua a chamada 'compilar' por 'releaseCompile' no arquivo build.gradle.

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

Versão mais fácil atualizada ao usar o Gradle para criar:

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

Ele usa a nova sintaxe interna do Fabric for Crashlytics e trabalha automaticamente com a compilação Gradle.

Björn Kechel
fonte
3

Um problema estranho que encontrei: segui a resposta do xialin (que também aparece no site oficial) e não funcionou. Acabou que eu estava referenciandoBuildConfig no pacote do Fabric, que também contém uma variável estática DEBUG que foi definida como false, mesmo no modo de depuração.

Portanto, se você seguir a solução mencionada acima e ainda receber relatórios de depuração, verifique se está fazendo referência a isso:

import com.yourpackagename.BuildConfig;

E não é isso:

import io.fabric.sdk.android.BuildConfig;    
Neria Nachum
fonte
2

Se você estiver preocupado em BuildConfig.DEBUGnão ser configurado corretamente, use ApplicationInfo:

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

Use sabores ou crie configurações. Use um identificador de compilação separado para compilação de desenvolvedores e todas as suas falhas continuarão em um aplicativo separado. Pode ser útil no caso de compartilhar a compilação com colegas ou usá-la sem um depurador. Algo assim -

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

    production {
        applicationId "io.yourapp.app"
    }
ribhu
fonte
2

Se você deseja criar uma versão depurável, eis o seguinte:

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 você define debuggable trueseu BuildConfig.DEBUG será inicializado com true, é por isso que adicionei essa variável na classe BuildConfig.

Init Fabric:

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);
M. Reza Nasirloo
fonte
Qual é o propósito ext.enableCrashlyticse ext.alwaysUpdateBuildIduma vez que eles não parecem ser referenciados em lugar algum. Estou esquecendo de algo?
Jules
@jules Está nos documentos docs.fabric.io/android/crashlytics/build-tools.html
M. Reza Nasirloo
BuildConfig.BUILD_TYPE_DEBUG é redundante, BuildConfig.DEBUG pode ser usado para obter mesmo valor
Antonis Radz
@AntonisRadz Porque eu precisava de uma compilação de lançamento debuggable
M. Reza Nasirloo
1

Podemos usar o método isDebuggable () da tela.

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

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

Feliz codificação :)

sadiq
fonte
1

Você pode usar um arquivo de manifesto dedicado para o modo de depuração (funciona para mim com o Crashlytics 2.9.7):

Crie o arquivo app/src/debug/AndroidManifest.xmle adicione o seguinte:

<application>

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

</application>

Note-se que este elemento meta-dados deve ser colocado em debug / AndroidManifest.xml única , e não para o AndroidManifest.xml regulares

A solução usada CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()não funcionou para mim e descobri que o crashlytics é inicializado pelo CrashlyticsInitProvider antes que Application.onCreate () seja chamado ou qualquer atividade seja iniciada, o que significa que a inicialização manual da malha no aplicativo ou em uma atividade não tem efeito porque o tecido já foi inicializado.

josias
fonte
1

Etapa 1: no build.grade

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

Etapa 2: no manifesto

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

Etapa 3: no aplicativo ou na primeira atividade

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

Não tenho certeza se a etapa 3 é necessária, mas para garantir que a versão de lançamento funcione sem falhas. fonte: https://firebase.google.com/docs/crashlytics/customize-crash-reports#enable_opt-in_reporting

thanhbinh84
fonte
1

Este trabalho para mim:

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

e em buildTypes:

debug {
ext.enableCrashlytics = false
}
Amirhosein Heydari
fonte
E quanto ao uso de Crashlytics no código? Isso fornecerá erros de compilação.
28619 Micer
1

Há duas opções para desativar o Firebase Crashlytics para a seguinte versão com.google.firebase: firebase-crashlytics: 17.0.0:

  1. Adicionar metatag ao manifesto do aplicativo

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

OU

  1. Configure diretamente no aplicativo (lembre-se de que quando definido como false, o novo valor não se aplica até a próxima execução do aplicativo)

FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)

Viktor Ivanov
fonte
0

Outra maneira, se você deseja apenas fazer isso no seu IDE, é sair do plug-in. Aparentemente, ele irá parar de enviar relatórios enquanto você estiver gerando builds sem fazer login novamente.

Neteinstein
fonte
0
  1. Adicione isso ao build.gradle do seu aplicativo:

    android {
        buildTypes {
            debug {
              // Disable fabric build ID generation for debug builds
              ext.enableCrashlytics = false
              ...
  2. Desative o kit Crashlytics em tempo de execução. Caso contrário, o kit Crashlytics lançará o erro:

    // 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. No AndroidManifest.xml, adicione

    <meta-data
    android:name="firebase_crashlytics_collection_enabled"
    android:value="false" />
100rbh
fonte
0

Resposta do Fabric 2020

Cole o código abaixo na sua classe Application e chame o método setCrashlyticsStatedo seu aplicativo onCreate. Como opção, você pode adicionar os IDs do seu dispositivo de teste aodebugDevices HashSet para que seus dispositivos pessoais possam ser ignorados, mesmo quando construídos no modo de liberação.

Nota. Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);Não é garantido que a identificação do dispositivo retornada por seja única ou constante (pode ser alterada em uma redefinição de fábrica ou manualmente em um dispositivo raiz). Mas deve ser bom o suficiente.

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);
    }
}

Verifique se BuildConfig. está olhando para a classe BuildConfig correta. Muitas vezes, existem várias opções e a errada pode ser arrastada.

Will Calderwood
fonte
-8

Esta é uma resposta boba, eu sei.
Apenas comente Fabric.with(this, new Crashlytics());, trabalhe nisso e remova o comentário quando quiser lançá-lo.

Tej42
fonte