O Firebase Crash Reporting cria relatórios detalhados dos erros no seu app. Os erros são agrupados em problemas com base nos rastreamentos de pilha semelhantes e são classificados pela gravidade do impacto nos usuários. Além de receber os relatórios automáticos, registre eventos personalizados para ajudar a detectar as etapas que deram origem à falha.
Configurar o Crash reporting
Para configurar o Crash reporting no Android, siga estas etapas:
- Configure o Firebase para o projeto do Android, caso não tenha feito isso.
- No Console do Firebase, adicione seu app ao projeto do Firebase.
- Adicione a dependência do Crash reporting ao arquivo
build.gradle
no nível do aplicativo:implementation 'com.google.firebase:firebase-crash:16.2.1'
Criar seu primeiro erro
O Firebase Crash Reporting gera relatórios automaticamente para erros fatais ou exceções não capturadas. No entanto, você também pode gerar relatórios quando capturar uma exceção, mas ainda quiser registrar a ocorrência. Para registrar um erro desses, siga estas etapas:
- Adicione uma chamada ao método estático
report
na atividade principal:FirebaseCrash.report(new Exception("My first Android non-fatal error"));
- Inicie o aplicativo.
- Nos registros
adb logcat
ou do Android Studio, procure a mensagem que confirma que o Crash reporting está ativado. - Verifique se o erro aparece na seção "Crash reporting" no Console do Firebase. Pode levar de um a dois minutos para que os erros sejam exibidos na seção.
Criar registros personalizados
Use o Crash reporting para registrar eventos personalizados nos seus relatórios de falhas e, opcionalmente, no logcat. Se você não quiser registrar um evento nem uma saída do logcat, precisa somente transmitir uma string como o argumento, conforme mostrado neste exemplo:
FirebaseCrash.log("Activity created");
Se você quiser criar uma saída do logcat, precisa enviar o nível e uma tag do registro.
Desofuscar rótulos do ProGuard
O ProGuard gera um arquivo mapping.txt
que mapeia os símbolos ofuscados pelo ProGuard para os nomes originais. Se o ProGuard estiver ativado, faça o upload dos arquivos de mapeamento para ver os rastreamentos desofuscados da pilha na interface do Crash reporting.
Para fins de teste, é possível configurar o ProGuard para tipos de versão de depuração e, em seguida, criar usando o comando ./gradlew assembleDebug
, como mostrado abaixo:
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
Fazer o upload de arquivos de mapeamento do ProGuard com o Gradle
Para ver rastreamentos desofuscados de pilha no Console do Firebase, use uma tarefa do Gradle criada no plug-in do Crash reporting para fazer o upload dos arquivos de mapeamento do ProGuard para o Firebase.
Para configurar o plug-in do Crash reporting, siga essas instruções:
- Adicione regras ao arquivo
build.gradle
no nível da raíz para incluir o plug-in do Crash reporting:buildscript { repositories { jcenter() // ... } dependencies { // ... // For Android Studio 2.x, use firebase-plugins version 1.1.1 classpath 'com.google.firebase:firebase-plugins:1.1.1' // For Android Studio 3.0, use firebase-plugins version 1.1.5 //classpath 'com.google.firebase:firebase-plugins:1.1.5' } }
- No arquivo Gradle (geralmente
app/build.gradle
) do projeto do aplicativo, adicione a linha mostrada a seguir embaixo de "ADD THIS" para ativar o plug-in do Crash reporting:apply plugin: 'com.android.application' // ADD THIS apply plugin: 'com.google.firebase.firebase-crash' android { // ... } dependencies { // ... }
- Em seguida, crie uma conta de serviço e uma chave privada:
Faça o download da chave da conta de serviço para autenticar os uploads. No Console do Firebase, selecione o projeto e clique em Gerar nova chave privada.
- Adicione uma propriedade chamada
FirebaseServiceAccountFilePath
com o caminho de arquivo para$HOME/.gradle/gradle.properties
ou especifique outro caminho na linha de comando usando a sinalização-P
. Depois é possível atualizar a propriedadeFirebaseServiceAccountFilePath
para executar uma tarefa com um arquivo da conta de serviço diferente.Como alternativa, especifique o caminho do arquivo de mapeamento na linha de comando usando a sinalização
-P
para definir a propriedade da seguinte forma:./gradlew -PFirebaseServiceAccountFilePath=/usr/ServiceAccount/MyApp-a287fsd34.json :app:firebaseUploadReleaseProguardMapping
-
No diretório do projeto, execute o comando
gradlew
para criar o APK e fazer o upload do arquivo de mapeamento. Exemplo:./gradlew :app:firebaseUploadReleaseProguardMapping
O nome exato da tarefa de upload varia de acordo com o nome da variante de versão e segue este padrão:
firebaseUpload<VariantName>ProguardMapping
. Para ver uma lista completa dos possíveis nomes de tarefas de upload, execute o seguinte comandogradlew
:./gradlew :app:tasks
Também é possível especificar as propriedades Gradle que serão usadas no upload de um arquivo de mapeamento ProGuard, basta usar a tarefa
firebaseUploadArchivedProguardMapping
. Use essa tarefa para especificar as propriedades Gradle paraFirebaseCrashMappingFilePath
,FirebaseCrashVersionCode
eFirebaseCrashPackageName
, conforme mostrado no exemplo a seguir:FirebaseCrashMappingFilePath=path/to/mapping/file FirebaseCrashVersionCode=2 FirebaseCrashPackageName=example.package.name
Nesse exemplo, o projeto usa o arquivo padrãogoogle-services.json
localizado na pasta do módulo do projeto, normalmenteapp/
. Se você não quiser usar um arquivogoogle-services.json
, especifique também as propriedades Gradle paraFirebaseCrashApiKey
eFirebaseCrashAppId
.
Trabalhar com apps que criam múltiplos APKs
O plug-in também funciona com aplicativos que usam o suporte a múltiplos APKs (em inglês). Para cada tarefa de variante de versão, a tarefa fará upload dos arquivos de mapeamento para todos os APKs dessa variante.
Por exemplo, digamos que você tenha uma variante de versão chamada fullRelease
e vários APKs, como app-full-armeabi-v7a-release.apk
e app-full-armeabi-release.apk
, para dar suporte a diferentes arquiteturas, conforme mostrado no exemplo do Gradle.
productFlavors { full { applicationId "com.google.firebase.sample.testapp" versionName "1.0-full" } } splits { abi { enable true reset() include 'armeabi', 'armeabi-v7a' universalApk true } }
Executar a tarefa ./gradlew :app:firebaseUploadReleaseProguardMapping
faz com que os arquivos de mapeamento do ProGuard para app-armeabi-v7a-release.apk
e app-armeabi-release.apk
sejam enviados ao servidor. Na saída do console desses uploads, o seguinte resultado é exibido:
Successfully uploaded proguard mapping file for app fullArmeabiRelease with versionCode: 1! Successfully uploaded proguard mapping file for app fullArmeabi-v7aRelease with versionCode: 2!
Fazer upload dos arquivos de mapeamento do ProGuard manualmente
Outra opção é fazer o upload manual de um arquivo mapping.txt
para o Console do Firebase ao acessar o Crash reporting e selecionar a guia Arquivos de mapeamento.
O arquivo para upload está localizado em um caminho com a mesma aparência do exemplo a seguir, mas específico para seu app:
<project root>/<module name>/build/outputs/mapping/<build type>/<appname>-proguard-mapping.txt
Por exemplo:
app/build/outputs/mapping/debug/app-proguard-mapping.txt
Problema conhecido
Se você usa o Android Studio 3.0, encontrará o seguinte erro ao usar a versão 1.1.0
ou 1.1.1
do plug-in do Crash reporting. Em vez disso, use a versão 1.1.5
do plug-in no arquivo build.gradle
no nível raiz do aplicativo:
Cannot create tasks to upload ProGuard Mapping File.java.lang.IllegalStateException: Resolving configuration 'androidTestAnnotationProcessor' directly is not allowed
Próximas etapas
- Para aprender a configurar alertas por e-mail e relatar novos problemas ou regressões, consulte Configurar alertas por e-mail.
- Analise e execute a amostra de código do Crash reporting para Android no GitHub (em inglês).