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
android
crashlytics
twitter-fabric
Michael
fonte
fonte
Manifest
falhas do aplicativo, isso torna a pergunta um pouco mais legítima.Respostas:
Marc de Crashlytics aqui. Aqui estão algumas maneiras de desativar o Crashlytics enquanto você faz suas compilações de depuração!
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.
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"?
fonte
BuildConfig.DEBUG
deve ser usado se você estiver construindo usando Gradle. Sempre será gerado corretamente.BuildConfig.DEBUG
?Encontrei a solução da Crashlytics (com integração de malha)
Coloque o seguinte código dentro da sua classe Application
onCreate()
EDITAR:
No Crashalitics 2.3 e acima, isso foi preterido. O código correto é:
ou
(copiado do método reprovado Crashlytics desativado () )
EDIT2:
Opcionalmente, você também pode adicioná-lo ao seu
buildType
em 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.fonte
ext.enableCrashlytics = false
também não funciona para mim com o 2.5. Na verdade, nunca funcionou. Mesmo antes do Fabric.A resposta escolhida não está mais correta. O Google mudou a integração do Crashlytics. Minha versão atual é
2.9.1
e a única coisa que eu tenho que fazer é adicionarimplementation '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:
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:
Em seguida, vá para o seu manifesto e adicione a seguinte
meta-data
tag dentro doapplication
tag:Adicione à sua Atividade de Lançamento (apenas uma vez necessária, nem todas as Atividades)
Isso ativará apenas o Crashlytics nas versões de lançamento. Cuidado, verifique também o BuildConfig.DEBUG ao configurar o Crashlytics, por exemplo:
fonte
Enable collection for selected users by initializing Crashlytics from one of your app's activities
mas 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-reportsfirebase_crashlytics_collection_enabled
como 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 comfirebase_crashlytics_collection_enabled=false
etrue
para a liberaçãoSe você usa Gradle, basta adicionar isso a um sabor:
fonte
This app relies on Crashlytics.
"Confira o documento mais recente. https://docs.fabric.io/android/crashlytics/build-tools.html#gradle-advanced-setup .
Além de adicionar o
ext.enableCrashlytics = false
build.grade que você precisa,fonte
This app relies on Crashlytics. Please sign up for access at
ext.enableCrashlytics = false
no build.gradle.buildTypes -> debug, also i'm applying the plugin via
aplicar plugin: 'io.fabric'`This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up
Eu achei que essa era a solução mais fácil:
As linhas acima criarão um campo boolean estático chamado
enableCrashlytics
noBuildConfig
arquivo que você pode usar para decidir se deve iniciarFabric
ou não: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
Crashlytics
classe em umif
bloco que verifica se o Fabrics foi inicializado como mostrado abaixo.Caso contrário, o aplicativo falhará com
Must Initialize Fabric before using singleton()
erro ao testar no emulador.fonte
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
Crashlytics
método na compilação de depuração, o aplicativo falhará .app / build.gradle
AndroidManifest.xml
OPÇÃO 2
Uma alternativa, se isso permitir que você chame
Crashlytics
métodos sem verificarBuildConfig.DEBUG
primeiro. Com essa configuração, você pode chamar métodos com segurançaCrashlytics.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
AndroidManifest.xml
Aplicativo onCreate ()
fonte
android:value="false"
tem que ser mudado paraandroid:value="${enableCrashlytics}"
. Não é?Use isso em
MyApplication#onCreate()
EDITAR Se você atualizou para o Fabric, use esta resposta .
fonte
BuildConfig
é gerado por uma tarefa Gradle, com garantia de execução. Eu também usobuildConfigField
para definir campos personalizados e esses sempre funcionam. tools.android.com/recent/androidstudio045released também sugere que você o useBuildConfig.DEBUG
.De acordo com o Google, use este código para desativar o Crashlytics e também irá melhorar o processo de compilação.
reference- https://developer.android.com/studio/build/optimize-your-build
fonte
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
Etapa 2 - use-os no seu AndroidManifest.xml
fonte
Observe que você também pode desativar o carregamento irritante de símbolos na compilação de depuração:
Basta colocá-lo no
build.gradle
módulo do seu aplicativo.fonte
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:
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
fonte
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.
fonte
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 .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.
fonte
Versão mais fácil atualizada ao usar o Gradle para criar:
Ele usa a nova sintaxe interna do Fabric for Crashlytics e trabalha automaticamente com a compilação Gradle.
fonte
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 referenciando
BuildConfig
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:
E não é isso:
fonte
Se você estiver preocupado em
BuildConfig.DEBUG
não ser configurado corretamente, useApplicationInfo
:fonte
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 -
fonte
Se você deseja criar uma versão depurável, eis o seguinte:
Quando você define
debuggable true
seu BuildConfig.DEBUG será inicializado com true, é por isso que adicionei essa variável na classe BuildConfig.Init Fabric:
fonte
ext.enableCrashlytics
eext.alwaysUpdateBuildId
uma vez que eles não parecem ser referenciados em lugar algum. Estou esquecendo de algo?Podemos usar o método isDebuggable () da tela.
Feliz codificação :)
fonte
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.xml
e adicione o seguinte: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.fonte
Etapa 1: no build.grade
Etapa 2: no manifesto
Etapa 3: no aplicativo ou na primeira atividade
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
fonte
Este trabalho para mim:
e em buildTypes:
fonte
Há duas opções para desativar o Firebase Crashlytics para a seguinte versão com.google.firebase: firebase-crashlytics: 17.0.0:
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
OU
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)
fonte
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.
fonte
Adicione isso ao build.gradle do seu aplicativo:
Desative o kit Crashlytics em tempo de execução. Caso contrário, o kit Crashlytics lançará o erro:
No AndroidManifest.xml, adicione
fonte
Resposta do Fabric 2020
Cole o código abaixo na sua classe Application e chame o método
setCrashlyticsState
do 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.Verifique se BuildConfig. está olhando para a classe BuildConfig correta. Muitas vezes, existem várias opções e a errada pode ser arrastada.
fonte
Esta é uma resposta boba, eu sei.
Apenas comente
Fabric.with(this, new Crashlytics());
, trabalhe nisso e remova o comentário quando quiser lançá-lo.fonte