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 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:

  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 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:

  1. Adicione uma chamada ao método estático reportna atividade principal:
    FirebaseCrash.report(new Exception("My first Android non-fatal error"));
  2. Inicie o aplicativo.
  3. Nos registros adb logcat ou 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" 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:

  1. 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'
          }
        }
    
  2. 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 {
          // ...
        }
    
  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 os 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 a sinalização -P. Depois é possível atualizar a propriedade FirebaseServiceAccountFilePath 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
  5. 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 comando gradlew:

    ./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 para FirebaseCrashMappingFilePath, FirebaseCrashVersionCode e FirebaseCrashPackageName, 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ão google-services.json localizado na pasta do módulo do projeto, normalmente app/. Se você não quiser usar um arquivo google-services.json, especifique também as propriedades Gradle para FirebaseCrashApiKey e FirebaseCrashAppId.

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