Android エージェントのクラッシュレポート

New Relic Mobile はデフォルトで、クラッシュを追跡およびを診断に役立つモバイルアプリのクラッシュレポートを有効にしています。 Androidアプリケーションがクラッシュすると、エージェントは New Relic サーバーにクラッシュレポートをアップロードします。ProGuard や DexGuard を使っている場合、クラッシュの詳細は自動的に処理され、難読化されません。

SDK のインストール及びアップグレード手順に従って、クラッシュレポートを有効にします。アプリケーショントークンを含むnewrelic.properties ファイルの作成をお忘れなく。

DexGuard のサポート

Android エージェントは現在 DexGuard をサポートしています。DexGuard は ProGuard の拡張版で、クラッシュのシンボルや難読化されたコードマップを扱う際は、ProGuard と同じように動作します。

ProGuard や DexGuard ファイルのアップロード

ProGuard は、クラス、フィールド、メソッドの名前を意味のわからないラベルに変更し、コードを難読化します。DexGuard はさらに難読化とセキュリティのレイヤーを追加します。それ以外は、ProGuard と同じように動作します。ProGuard や DexGuard が有効になっている場合、クラッシュによって生成されたスタックトレースは、人間が判読できない難読化されたラベルのみで構成されます。これらの元名前と難読化後の名前で構成される mapping.txt ファイルもビルド時に生成され、このファイルを使って、難読化されたラベルの逆マッピングが行えます。

New Relic アプリケーショントークンを含む newrelic.properties ファイルをプロジェクトに作成すると、ProGuard やDexGuard のマッピングファイルがビルド後に自動的にアップロードされます。

Dexguard の –printmapping オプションを使って mapping.txt ファイルの名前を変更すると、エージェントはそれらを見つけられず、アップロードされません。その場合は、ファイルを手動でアップロードする必要があります。 詳しくは、ProGuard や DexGuard のマップファイルを手動でアップロードするをご覧ください。

Mobile の Crashes ページで難読化されたクラッシュレポートが表示される場合は、マッピングファイルをアップロードしていない可能性があります。詳しくは、ProGuard や DexGuard のマップファイルを手動でアップロードするをご覧ください。

クラッシュレポートの無効化

別のクラッシュレポートツールを使用する場合は、エージェントの初期化中に、.withCrashReportingEnabled(false) を呼ぶことで、New Relic のクラッシュレポート機能を無効にできます。以下が例です。

NewRelic
      .withApplicationToken("<appToken>")
      .withCrashReportingEnabled(false)
      .start(this.getApplication());

クラッシュレポーターのデバッグ

Android 用のクラッシュレポートは、未キャッチの例外ハンドラが既に登録されている場合、それらを連結することで、他のクラッシュレポートのフレームワークと連携します。

  • 他のフレームワークが見つからない場合(または New Relic が最初に登録されたフレームワークである場合)、デバッグログには Installing New Relic crash handler があります。
  • 別のハンドラがすでに登録されている場合、デバッグログには、Installing New Relic crash handler and chaining previous exception handler があります。

New Relic が例外をキャッチするたびに、debug レベルのログに記録されます。以下が例です。

A crash has been detected in <className>.

New Relic が例外をキャッチしたが、何らかの理由でクラッシュレポートが無効になっている場合、このメッセージは以下のようにログに記録されます。

A crash has been detected but crash reporting is disabled.
New Relic Mobile UI 上にクラッシュレポートが表示されない場合、デバッグログを開き、上記のようなメッセージがあるか確認してください。

ProGuard と DexGuard のマッピングファイルの手動アップロード

通常と異なる状況では、ProGuard や DexGaurd のマッピングファイルを自動的にアップロードできない場合があります。これは、アプリケーショントークンを含む newrelic.properties ファイルが誤って作成されていることが原因です。その場合、詳細なログメッセージ付きのビルドエラーや警告が発生します。

ProGuard や DexGuard ファイルを手動でアップロードするには、以下の手順を実行します。

  1. mapping.txt ファイルは、(Antの場合) <project_root>/bin/proguard ディレクトリか、(その他の Android インストールの場合) <project_root>/proguard ディレクトリ内から探します。
  2. 以下のように、ターミナルから、ProGuard または DexGuard マッピングファイルをアップロードします。

    • <mapping.txt>: ProGuard または DexGuard のmapping.txt ファイルへのパス
    • <APPLICATION_TOKEN>: New Relic のアプリケーショントークン
    • <buildId>:mapping.txt ファイルの最後の行にある
curl -v -F proguard=@"mapping.txt" -H "X-APP-LICENSE-KEY:<APPLICATION_TOKEN>" -F buildId="<buildId>" https://mobile-symbol-upload.newrelic.com/symbol

クラッシュ通知の受信

メールでクラッシュ通知を受信する方法については、クラッシュ通知を受けるをご覧ください。

関連情報