A partir do agenteNew Relic Android versão 6.7.0, para ajudar a rastrear e diagnosticar falhas nativas, os relatórios e a análise foram aprimorados para incluir violação de sinal e outras falhas que ocorrem no nível do código nativo durante o tempo de execução.
Essas melhorias incluem:
Relatórios de falhas nativas: O agente Android sinalizará violação e outras falhas relatadas pelo aplicativo durante o tempo de execução, incluindo:
- Sinal 4 (instrução ilegal)
- Sinal 6 (terminação anormal)
- Sinal 7 (erro de barramento/acesso incorreto à memória)
- Sinal 8 (exceção de ponto flutuante)
- Sinal 11 (Segmentação violação/referência de memória inválida)
Exceções de tempo de execução nativo: o agente nativo relatará quaisquer exceções C++ não tratadas lançadas pelo aplicativo durante o tempo de execução e as reportará como exceções tratadas. Exceções não tratadas geralmente são fatais e travam o aplicativo.
Condições de aplicativo não respondendo (ANR): o agente nativo detectará e relatará condições de aplicativo não respondendo em que uma atividade ou thread de serviço foi bloqueado por mais tempo do que o tempo permitido pelo Android, que é de 5 segundos para atividades em primeiro plano e de 5 a 200 segundos para serviços . As condições ANR serão relatadas como uma exceção tratada (em vez de falhas), uma vez que não são consideradas condições fatais.
Importante
O relatório de falhas nativo é um recurso em incubação. O monitoramento nativo de falhas é, na melhor das hipóteses, difícil, mas o agente fará todos os possíveis para detectar e relatar essas condições. Ele pode perder ou relatar de forma incompleta algumas condições e pode haver latência na visualização dessas condições no dashboard do aplicativo.
A simbolização de símbolos nativos não será suportada nas primeiras versões do agente NDK. Quando os símbolos nativos de um aplicativo não estão presentes, o stack trace produzido por uma falha consiste apenas nesses rótulos ofuscados, que não são facilmente legíveis.
Você pode visualizar informações detalhadas sobre travamentos nativos na New Relic Mobile interface de Crash analysis ou receber notificações de travamentos por e-mail. Você também pode explorar mais profundamente os dados de falhas com New Relic Insights ou integrá-los a sistemas de tickets para uma investigação mais aprofundada.
Configuração
A configuração requer a adição de uma dependência adicional no arquivo build.gradle
dos projetos de aplicativo que iniciam o agente New Relic:
dependencies { implementation 'com.newrelic.agent.android:agent-ndk:1.+'}
Os artefatos do agente Android podem ser encontrados no MavenCentral e seguem convenções de controle de versão semântica. Consulte as notas de lançamento do agente Android para obter detalhes completos sobre lançamentos e downloads.
Ativar relatórios de falhas nativos
No código do seu aplicativo onde o agente New Relic é adicionado (geralmente em MainActivity
), ative o sinalizador de recurso NativeReporting
antes de iniciar o agente:
NewRelic.enableFeature(FeatureFlag.NativeReporting);NewRelic .withApplicationToken("APP_TOKEN") .start(this.getApplication());
Desativar relatórios de falhas nativos
Se você quiser usar outra ferramenta nativa de relatório de falhas, desative o relatório de falhas nativo chamando NewRelic.disableFeature(FeatureFlag/NativeReporting)
antes da inicialização do agente. Por exemplo:
NewRelic.disableFeature(FeatureFlag.NativeReporting);NewRelic .withApplicationToken("APP_TOKEN") .start(this.getApplication());
Depure o repórter de falhas nativo
O relatório de falhas para Android foi projetado para funcionar com outra estrutura de relatórios de falhas, encadeando o manipulador de exceções não capturadas, se já estiver registrado.
Quaisquer problemas que surjam durante o relatório aparecerão no logcat. Cada vez que New Relic captura uma violação, ela é registrada no nível DEBUG
. Por exemplo, para uma violação de segmento, você veria o seguinte log:
Signal 11 intercepted: Segmentation violation (invalid memory reference)Invoking previous handler for signal 11
A entrega de relatórios nativos é adiada até a próxima invocação do aplicativo, portanto, você não verá relatórios de falhas na interface do usuário do New Relic Mobile até que o aplicativo seja lançado novamente. No caso de uma falha, o agente nativo geralmente não terá tempo ou estabilidade suficiente para processar o relatório. Em vez disso, os dados do relatório são rapidamente gravados no armazenamento local, para serem processados na próxima vez que o aplicativo for lançado.
Resolução de problemas
Os relatórios nativos são armazenados no dispositivo como arquivos JSON em /data/data/APP_PACKAGE_NAME/cache/newrelic/reports
. Este diretório não deve conter nenhum relatório após o lançamento do aplicativo após uma falha.
Tal como acontece com outras informações de tempo de execução do agente, o agente nativo grava seu status no logcat para combinar com o status do tempo de execução do agente. A tag de log do agente é com.newrelic.android
e pode ser isolada de outros logs de tempo de execução executando adb logcat | grep "com.newrelic.android"
no shell.