New Relic Androidエージェントバージョン6.7.0以降、ネイティブクラッシュの追跡と診断に役立つように、レポートと分析が拡張され、実行時にネイティブコードレベルで発生する信号違反やその他の障害が含まれるようになりました。
これらの機能強化には次のものが含まれます。
ネイティブ クラッシュ レポート: Android エージェントは、実行時にアプリによって報告された違反やその他のクラッシュを通知します。これには以下が含まれます。
- 信号4(不正な指示)
- 信号6(異常終了)
- 信号7(バスエラー/メモリアクセス不良)
- シグナル8(浮動小数点例外)
- シグナル11(セグメンテーション違反/無効なメモリ参照)
ネイティブ ランタイム例外: ネイティブ エージェントは、実行時にアプリによってスローされた未処理の C++ 例外を報告し、それらを処理済み例外として報告します。 処理されない例外は通常致命的であり、アプリケーションをクラッシュさせます。
アプリケーションが応答しない (ANR) 状態: ネイティブ エージェントは、アクティビティまたはサービス スレッドが Android の許容時間 (フォアグラウンド アクティビティの場合は 5 秒、サービスの場合は 5 ~ 200 秒) を超えてブロックされているアプリケーションが応答しない状態を検出して報告します。 ANR 状態は致命的な状態とは見なされないため、クラッシュではなく、 処理された例外として報告されます。
重要
ネイティブクラッシュレポートは、インキュベーション機能です。ネイティブのクラッシュ監視はせいぜい困難ですが、エージェントはこれらの状態を検出して報告するために最善を尽くします。一部の条件を見逃したり、不完全に報告したり、アプリケーションダッシュボードでこれらの条件を表示するのに時間がかかる場合があります。
ネイティブシンボルのシンボル化は、初期のNDKエージェントリリースではサポートされません。アプリのネイティブシンボルが存在しない場合、クラッシュによって生成されるスタックトレースは、これらの難読化されたラベルのみで構成され、簡単に読み取ることはできません。
New Relic Mobileのクラッシュ分析UIでネイティブクラッシュに関する詳細情報を表示したり、電子メールでクラッシュ通知を受信したりできます。New Relic Insightsを使用してクラッシュデータをより深く調査したり、チケットシステムと統合してさらに調査したりすることもできます。
構成
設定では、New Relic エージェントを開始するアプリ プロジェクトのbuild.gradle
ファイルに追加の依存関係を追加する必要があります。
dependencies { implementation 'com.newrelic.agent.android:agent-ndk:1.+'}
Android エージェント アーティファクトはMavenCentralにあり、セマンティック バージョン管理規則に従います。 リリースとダウンロードの詳細については、Android エージェントのリリース ノートを参照してください。
ネイティブクラッシュレポートを有効にする
New Relic エージェントが追加されているアプリのコード (通常はMainActivity
内) で、エージェントを起動する前にNativeReporting
機能フラグを有効にします。
NewRelic.enableFeature(FeatureFlag.NativeReporting);NewRelic .withApplicationToken("APP_TOKEN") .start(this.getApplication());
ネイティブクラッシュレポートを無効にする
別のネイティブ クラッシュ レポート ツールを使用する場合は、エージェントの初期化の前にNewRelic.disableFeature(FeatureFlag/NativeReporting)
を呼び出して、ネイティブ クラッシュ レポートを無効にします。 例えば:
NewRelic.disableFeature(FeatureFlag.NativeReporting);NewRelic .withApplicationToken("APP_TOKEN") .start(this.getApplication());
ネイティブクラッシュレポーターをデバッグする
Androidのクラッシュレポーティングは、他のクラッシュレポーティングフレームワークが登録されている場合は、uncaught exception handlerを連鎖させることで、他のクラッシュレポーティングフレームワークと連携するように設計されています。
レポート中に発生した問題はすべて logcat に表示されます。 New Relic が違反をトラップするたびに、 DEBUG
レベルにログが記録されます。 たとえば、セグメント違反の場合は次のログが表示されます。
Signal 11 intercepted: Segmentation violation (invalid memory reference)Invoking previous handler for signal 11
ネイティブレポートの配信は次のアプリの呼び出しまで延期されるため、アプリが再度起動されるまで、NewRelicMobileのユーザーインターフェイスにクラッシュレポートは表示されません。クラッシュが発生した場合、ネイティブエージェントは通常、レポートを処理するのに十分な時間や安定性がありません。代わりに、レポートデータはローカルストレージにすばやく書き込まれ、次にアプリを起動したときに処理されます。
トラブルシューティング
ネイティブ レポートは、デバイス上の/data/data/APP_PACKAGE_NAME/cache/newrelic/reports
に JSON ファイルとして保存されます。 このディレクトリには、クラッシュ後のアプリリリース後のレポートは含まれません。
他のエージェントのランタイム情報と同様に、ネイティブ エージェントは、エージェントのランタイム ステータスと統合するために、そのステータスを logcat に書き込みます。 エージェントのログ タグはcom.newrelic.android
であり、シェルからadb logcat | grep "com.newrelic.android"
を実行することで他のランタイム ログから分離できます。