Ir para o console

Gerar relatório de erros no Android

O Firebase Crash Reporting cria relatórios detalhados dos erros no seu app. Os erros são agrupados em problemas baseados em rastreamentos de pilhas semelhantes e a triagem é feita de acordo com a 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:

  1. Configure o Firebase para o projeto do Android, caso não tenha feito isso.
  2. No Console do Firebase, adicione seu app ao projeto do Firebase.
  3. Adicione a dependência do Crash reporting ao seu arquivo build.gradle de nível do app:
    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:

  1. Adicione uma chamada ao método estático report na atividade principal:
    FirebaseCrash.report(new Exception("My first Android non-fatal error"));
  2. Inicie o aplicativo.
  3. Em adb logcat, ou nos registros do Android Studio, procure a mensagem que confirma que o Crash reporting está ativado.
  4. Verifique se o erro aparece na seção "Crash reporting" do Console do Firebase. Pode levar de um a dois minutos para que os erros sejam exibidos lá.

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 deles. 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, configure o ProGuard para o tipo de compilação de depuração e crie a versão com o comando ./gradlew assembleDebug, conforme 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:

  1. Adicione regras ao arquivo build.gradle no nível de raiz 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'
          }
        }
    
  2. No arquivo Gradle do projeto do app (geralmente o app/build.gradle), adicione a seguinte linha abaixo 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 {
          // ...
        }
    
  3. 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 seus uploads. No Console do Firebase, selecione o projeto e clique em Gerar nova chave privada.

  4. Adicione uma propriedade chamada FirebaseServiceAccountFilePath com o caminho de arquivo para $HOME/.gradle/gradle.properties ou especifique outro caminho na linha de comando usando o sinalizador -P. Depois, atualize a propriedade FirebaseServiceAccountFilePath para executar uma tarefa com um arquivo de conta de serviço diferente.

    Como alternativa, você pode especificar 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
  5. No diretório do projeto, execute um comando gradlew para criar o APK e fazer o upload do arquivo de mapeamento dele. Por exemplo:

    ./gradlew :app:firebaseUploadReleaseProguardMapping

    O nome exato da tarefa de upload varia de acordo com o nome da variante da versão, seguindo este padrão: firebaseUpload<VariantName>ProguardMapping. Para ver uma lista completa dos possíveis nomes de tarefas de upload, execute o seguinte comando gradlew:

    ./gradlew :app:tasks

    Especifique as propriedades do Gradle a serem usadas para fazer o upload de um arquivo de mapeamento do ProGuard com a tarefa firebaseUploadArchivedProguardMapping. Use-a para definir as propriedades FirebaseCrashMappingFilePath, FirebaseCrashVersionCode e FirebaseCrashPackageName, conforme mostrado no seguinte exemplo:

    FirebaseCrashMappingFilePath=path/to/mapping/file
    FirebaseCrashVersionCode=2
    FirebaseCrashPackageName=example.package.name
    
    Nesse exemplo, o projeto usa o arquivo padrão google-services.json da pasta do módulo de projeto, geralmente app/. Para não utilizar um arquivo google-services.json, especifique as propriedades do Gradle FirebaseCrashApiKey e FirebaseCrashAppId.

Trabalhar com apps que criam múltiplos APKs

Esse plug-in também funciona para apps que usem o Suporte a múltiplos APKs. Para cada tarefa de variante de versão, a tarefa faz o upload dos arquivos de mapeamento de todos os APKs da variante.

Por exemplo, considere que você tenha uma variante de versão chamada fullRelease e múltiplos APKs, como app-full-armeabi-v7a-release.apk e app-full-armeabi-release.apk. Isso pode ser feito para que ela seja compatível com diferentes arquiteturas, conforme mostrado no exemplo do Gradle abaixo.

    productFlavors {
        full {
            applicationId "com.google.firebase.sample.testapp"
            versionName "1.0-full"
        }
    }

    splits {
        abi {
            enable true
            reset()
            include 'armeabi', 'armeabi-v7a'
            universalApk true
        }
    }

Quando a tarefa ./gradlew :app:firebaseUploadReleaseProguardMapping é executada, o upload dos arquivos de mapeamento do ProGuard para app-armeabi-v7a-release.apk e app-armeabi-release.apk é feito para o 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. Basta 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 na 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 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