Se o app Android tem bibliotecas nativas, é possível ativar stack traces completos e relatórios detalhados de falhas para seu código nativo no Firebase Crashlytics com algumas pequenas atualizações na configuração do build do seu app.
Neste guia, você verá como configurar relatórios de erros com o SDK do Firebase Crashlytics para NDK.
Caso esteja em busca de informações para começar a usar o Crashlytics nos seus projetos do Unity, confira Guia para iniciantes do Unity.
Antes de começar
Adicione o Firebase ao projeto para Android, caso ainda não tenha feito isso. Caso você não tenha um app Android, faça o download de um app de exemplo.
Recomendado: para gerar automaticamente registros de navegação estrutural e entender as ações do usuário que levam a uma falha, um evento não fatal ou um ANR, você precisa para ativar o Google Analytics no seu projeto do Firebase.
Se o Google Analytics não estiver ativado no seu projeto do Firebase, ative o Google Analytics na guia Integrações das suas
no console do > Configurações do projetoFirebase. Se você estiver criando um novo projeto do Firebase, ative o Google Analytics durante a criação.
Verifique se o app tem estas versões mínimas necessárias:
- Gradle 8.0
- Plug-in do Android para Gradle 8.1.0
- Plug-in do Google Services para Gradle 4.4.1
Etapa 1: adicionar ao seu app o SDK do Crashlytics para NDK
No arquivo Gradle do módulo (nível do app) (geralmente<project>/<app-module>/build.gradle.kts
ou
<project>/<app-module>/build.gradle
),
adicione a dependência da biblioteca de NDK do Crashlytics para Android. Recomendamos o uso do
Firebase Android BoM
para controlar o controle de versões da biblioteca.
Para uma experiência ideal com o Crashlytics, recomendamos ativar o Google Analytics no seu projeto do Firebase e adicionar o SDK do Firebase para Google Analytics ao seu app.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.6.0")) // Add the dependencies for the Crashlytics NDK and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-crashlytics-ndk") implementation("com.google.firebase:firebase-analytics") }
Com a Firebase Android BoM, seu app sempre vai usar versões compatíveis das bibliotecas do Firebase para Android.
(Alternativa) Adicionar dependências das bibliotecas do Firebase sem usar o BoM
Se você preferir não usar o Firebase BoM, especifique cada versão das bibliotecas do Firebase na linha de dependência correspondente.
Se você usa várias bibliotecas do Firebase no app, recomendamos utilizar o BoM para gerenciar as versões delas, porque isso ajuda a garantir a compatibilidade de todas as bibliotecas.
dependencies { // Add the dependencies for the Crashlytics NDK and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-crashlytics-ndk:19.2.1") implementation("com.google.firebase:firebase-analytics:22.1.2") }
Etapa 2: adicionar ao seu app o plug-in do Gradle para o Crashlytics
No seu arquivo Gradle de nível raiz (do projeto) (
<project>/build.gradle.kts
ou<project>/build.gradle
), adicione o plug-in do Gradle para Crashlytics ao blocoplugins
:Kotlin
plugins { // Make sure that you have the AGP plugin 8.1+ dependency id("com.android.application") version "8.1.4" apply false // ... // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency id("com.google.gms.google-services") version "4.4.2" apply false // Add the dependency for the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") version "3.0.2" apply false }
Groovy
plugins { // Make sure that you have the AGP plugin 8.1+ dependency id 'com.android.application' version '8.1.4' apply false // ... // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency id 'com.google.gms.google-services' version '4.4.2' apply false // Add the dependency for the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' version '3.0.2' apply false }
No arquivo Gradle do módulo (nível do app) (geralmente
<project>/<app-module>/build.gradle.kts
ou<project>/<app-module>/build.gradle
), adicione o plug-in do Gradle para Crashlytics:Kotlin
plugins { id("com.android.application") // ... // Make sure that you have the Google services Gradle plugin id("com.google.gms.google-services") // Add the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") }
Groovy
plugins { id 'com.android.application' // ... // Make sure that you have the Google services Gradle plugin id 'com.google.gms.google-services' // Add the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' }
Etapa 3: adicionar a extensão do Crashlytics ao seu build
No arquivo Gradle do módulo (nível do app)
(geralmente <project>/<app-module>/build.gradle.kts
ou
<project>/<app-module>/build.gradle
), configure a extensão do Crashlytics.
Kotlin
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension // ... android { // ... buildTypes { getByName("release") { // Add this extension configure<CrashlyticsExtension> { // Enable processing and uploading of native symbols to Firebase 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 } } } }
Groovy
// ... android { // ... buildTypes { release { // Add this extension firebaseCrashlytics { // Enable processing and uploading of native symbols to Firebase 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 4: configurar o upload automático de símbolos nativos
Para produzir stack traces legíveis usando falhas do NDK, o Crashlytics precisa saber
sobre os símbolos nos seus binários nativos. O plug-in do Gradle para Crashlytics
inclui a tarefa uploadCrashlyticsSymbolFileBUILD_VARIANT
para automatizar esse processo.
Para acessar a tarefa de upload automático de símbolos, verifique se
nativeSymbolUploadEnabled
está definido comotrue
no arquivo Gradle do seu módulo no app.Para que os nomes dos métodos apareçam nos stack traces, é necessário invocar explicitamente a tarefa
uploadCrashlyticsSymbolFileBUILD_VARIANT
após cada build da biblioteca do NDK. Por exemplo:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
O SDK do Crashlytics para NDK e o plug-in do Crashlytics para Gradle dependem da presença do ID de build do GNU nos objetos compartilhados nativos.
Verifique a presença desse ID executando
em cada binário. Se o ID do build estiver ausente, adicionereadelf -n
às sinalizações do sistema de build para corrigir o problema.-Wl,--build-id
Etapa 5: forçar uma falha no teste para concluir a configuração
Para concluir a configuração do Crashlytics e conferir os dados iniciais no painel do Crashlytics no console do Firebase, é necessário forçar uma falha de teste.
Adicione um código ao app que possa ser usado para forçar uma falha no teste.
É possível usar o código a seguir no
MainActivity
do seu app para adicionar um botão que, quando pressionado, causa uma falha. O botão é chamado de "Testar falha".Kotlin+KTX
val crashButton = Button(this) crashButton.text = "Test Crash" crashButton.setOnClickListener { throw RuntimeException("Test Crash") // Force a crash } addContentView(crashButton, ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))
Java
Button crashButton = new Button(this); crashButton.setText("Test Crash"); crashButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { throw new RuntimeException("Test Crash"); // Force a crash } }); addContentView(crashButton, new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
Crie e execute seu app.
Force a falha de teste para enviar o primeiro relatório de erros do app:
Abra o app no dispositivo ou emulador de teste.
No app, pressione o botão "Testar falha" que você adicionou usando o código acima.
Depois que o app falhar, reinicie-o para que ele possa enviar o relatório de falhas ao Firebase.
Acesse o painel do Crashlytics no console do Firebase para ver a falha do teste.
Se você já atualizou o console e ainda não está vendo a falha de teste depois de cinco minutos, ative a geração de registros de depuração para ver se o app está enviando relatórios de falha.
Pronto. O Crashlytics já está monitorando seu app em busca de falhas.
Você também pode ver e investigar relatórios de erros e estatísticas no
painel do Crashlytics.
Próximas etapas
(Recomendado) Receba ajuda para depurar falhas causadas por erros de memória nativa coletando relatórios do GWP-ASan. Esses erros relacionados à memória podem ser associados à corrupção da memória no seu app, que é a principal causa de vulnerabilidades de segurança. Para aproveitar esse recurso de depuração, seu app precisa ter o GWP-ASan ativado explicitamente e usar o SDK do Crashlytics para NDK mais recente (v18.3.6+ ou a Firebase BoM v31.3.0+).
Para personalizar a configuração do relatório de erros, adicione relatórios de ativação, registros, chaves e rastreamento de erros não fatais.
Faça a integração com o Google Play para filtrar os relatórios de erros do app Android pela faixa do Google Play diretamente no painel do Crashlytics. Isso permite que você configure o painel para monitorar builds específicos.
Solução de problemas
Se você estiver vendo stack traces diferentes no console do Firebase e no logcat, consulte o Guia de solução de problemas.
Opções alternativas para o upload de símbolos
O fluxo de trabalho principal na página acima se aplica a builds padrão do Gradle. No entanto, alguns apps usam configurações ou ferramentas diferentes, como um processo de compilação que não seja o Gradle. Nessas situações, as opções a seguir podem ser úteis para o upload dos símbolos.
Opção: fazer upload de símbolos para módulos de biblioteca e dependências externas
Essa opção pode ser útil nas seguintes situações:
- Se você usa um processo personalizado de compilação do NDK no Gradle
- Caso suas bibliotecas nativas sejam criadas em um módulo de recurso/biblioteca ou fornecidas por um terceiro
- Se a tarefa de upload automático de símbolos estiver falhando ou você estiver vendo falhas não simbolizadas no painel
Opção: fazer upload de símbolos para builds que não são do Gradle ou bibliotecas nativas com símbolos inacessíveis
Essa opção pode ser útil nas seguintes situações:
Se você usa um processo de compilação diferente do Gradle
Se as bibliotecas nativas com símbolos forem fornecidas de uma maneira que impeça o acesso a elas durante os builds do Gradle