Receber relatórios de erros do Android NDK

Se o app para Android tiver bibliotecas nativas, será possível ativar stack traces completos e relatórios detalhados de falhas para seu código nativo a partir do Firebase Crashlytics com algumas pequenas atualizações na configuração da compilação do seu app. Este guia descreve como configurar relatórios de erros com o novo SDK do Firebase Crashlytics.

Antes de começar

Para começar, configure o Crashlytics com o SDK do Firebase Crashlytics.

Etapa 1: atualizar a configuração do Gradle

No nível do app build.gradle, adicione a dependência de ambiente de execução do NDK do Crashlytics:

apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.crashlytics'

dependencies {
    // ...

    // Add the Crashlytics NDK dependency (if you have the
    // Firebase Crashlytics dependency, replace it).
    implementation 'com.google.firebase:firebase-crashlytics:17.1.0'
    implementation 'com.google.firebase:firebase-crashlytics-ndk:17.1.0'
}

// …
android {
    // ...
    buildTypes {
        release {
            // Add this extension
            firebaseCrashlytics {
                // Enable processing and uploading of native symbols to Crashlytics
                // servers. By default, this is disabled to improve build speeds.
                // This flag must be enabled to see properly-symbolicated native
                // stack traces in the Crashlytics dashboard.
                nativeSymbolUploadEnabled true
            }
        }
    }
}

Etapa 2: ativar o upload de símbolo nativo

Para produzir stack traces legíveis com base nas falhas do NDK, o Crashlytics precisa saber sobre os símbolos nos seus binários nativos. Nosso plug-in do Gradle inclui a tarefa uploadCrashlyticsSymbolFileBUILD_VARIANT para automatizar esse processo. Para acessar essa tarefa, verifique se nativeSymbolUploadEnabled está definido como verdadeiro.

Para que os nomes dos métodos apareçam nos stack traces, é necessário invocar explicitamente a tarefa uploadCrashlyticsSymbolFileBUILD_VARIANT após cada compilação da sua biblioteca do NDK. Exemplo:

>./gradlew app:assembleBUILD_VARIANT\
           app:uploadCrashlyticsSymbolFileBUILD_VARIANT

Etapa 3 (opcional): fazer upload de símbolos para dependências externas

Nossa tarefa de upload de símbolos pressupõe que você esteja criando suas bibliotecas nativas como parte da compilação do Gradle, usando ferramentas de compilação padrão do NDK, como o CMake. Se você tiver bibliotecas nativas criadas externamente ou se estiver usando um processo personalizado de compilação do NDK no Gradle, talvez seja necessário especificar explicitamente o caminho para suas bibliotecas removidas e não removidas. A extensão firebaseCrashlytics fornece propriedades para fazer isso: strippedNativeLibsDir e unstrippedNativeLibsDir.

// …
android {
    // ...
    buildTypes {
        release {
            firebaseCrashlytics {
                nativeSymbolUploadEnabled true
                strippedNativeLibsDir ‘path/to/stripped/parent/dir’
                unstrippedNativeLibsDir ‘path/to/unstripped/parent/dir’
            }
        }
    }
}

Nosso plug-in pressupõe que as bibliotecas estejam localizadas em subdiretórios específicos da arquitetura nos diretórios especificados e que os pares de biblioteca removidos/não removidos correspondentes tenham caminhos idênticos nesse diretório. Exemplo:

strippedNativeLibsDir/
 +- x86/
      |
      +- libfoo.so
      +- libbar.so
 +- arm64/
      |
      +- libfoo.so
      +- libbar.so

unstrippedNativeLibsDir/
 +- x86/
      |
      +- libfoo.so
      +- libbar.so
 +- arm64/
      |
      +- libfoo.so
      +- libbar.so

Se o sistema de compilação não aderir à estrutura/ao esquema de nomenclatura acima, crie manualmente essa estrutura no disco local antes de invocar a tarefa uploadCrashlyticsSymbolFileBUILD_VARIANT.

Etapa 4 (opcional): personalizar relatórios de erros do NDK

Como alternativa, é possível incluir o cabeçalho crashlytics.h no código C++ para adicionar metadados aos relatórios de erros do NDK, como registros, chaves personalizadas e IDs de usuário. crashlytics.h está disponível como uma biblioteca de C++ somente de cabeçalho no Repositório do GitHub do SDK do Firebase para Android. Leia os comentários no arquivo de cabeçalho para ver instruções sobre como usar as APIs NDK C++.

Etapa 5: ver os relatórios de erros

Verifique se o Crashlytics está reportando corretamente as falhas do NDK ao criar seu app, fazer upload de símbolos e forçar uma falha nativa. Será necessário reiniciar o app depois que ele apresentar falha para que o Crashlytics envie o relatório. Você verá a falha no Console do Firebase em alguns minutos.