• ログイン今すぐ開始

本書は、お客様のご参考のために原文の英語版を機械翻訳したものです。

英語版と齟齬がある場合、英語版の定めが優先するものとします。より詳しい情報については、本リンクをご参照ください。

問題を作成する

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

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

クラッシュ分析UIでクラッシュに関する詳細情報を表示したり、電子メールでクラッシュ通知を受信したりできます。さらに調査するために、チケットシステムと統合することもできます。

ProGuardまたはDexGuardファイルのアップロード

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

ProGuardは、クラス、フィールド、およびメソッドの名前を意味不明のラベルで変更することにより、コードを難読化します。DexGuardは、難読化とセキュリティの層をさらに追加しますが、それ以外の動作はProGuardと同じです。ProGuard または DexGuard が有効な場合、クラッシュ時に生成されるスタック トレースは、難読化されたラベルのみで構成され、人間が読むことはできません。

SDKのインストールまたはアップグレードの手順に従って、 ProGuardまたはDexGuardを構成し、クラッシュレポートを有効にします。アプリケーショントークンを含むnewrelic.propertiesファイルを必ず作成してください。

マッピング.txtの使用

エージェントは、ProGuard/DexGuard対応のビルド中に生成されたmapping.txtファイルを使用します。このファイルは、難読化されたラベル名で構成され、難読化されたテキストラベルとプレーンテキストラベルの間の逆マッピングを提供します。最終的なアプリケーションを作成したビルド中に生成されたmapping.txtのコピーを使用する必要があります。アプリケーションのビルドIDはAPKが生成されるたびに変更され、マッピングファイルのビルドIDは、アップロードされた各クラッシュレポートに含まれるIDと一致する必要があります。

プロジェクトにNewRelicアプリトークンを含むnewrelic.propertiesファイルを作成すると、ビルドごとにProGuardまたはDexGuard mapping.txtファイルが自動的にアップロードされます。

例外

次のいずれかの状況が発生した場合は、 mapping.txt置換ファイルを手動でアップロードする必要があります。

  • DexGuard -printmappingオプションを使用してmapping.txtファイルの名前を変更すると、Androidエージェントは削除された名前を見つけたりアップロードしたりできなくなります。
  • [クラッシュ]ページに難読化されたクラッシュレポートが表示される場合は、 mapping.txtファイルがアップロードされていない可能性があります。

マップ処理

重要

Agent version 5.27.0 ビルド時のエージェントプラグインプロセスマップの方法が変更されました。

一部のバリアントビルドでマップが報告されています。

エージェントは、 Releaseビルドタイプのバリアントによって生成されたmapping.txtファイルのみにタグを付けて報告します。この動作は、 New RelicGradlePlugin拡張機能を介して構成または無効化できます。

バリアントには固有のビルドIDが割り当てられる

Gradle ビルドの実行中に、単一のユニークな ID (ビルド ID) が生成され、その呼び出し中にビルドされたアプリのすべてのバリアントを表していました。このため、共通のアプリのコードベースをカスタマイズするためにバリアントを使用するお客様のクラッシュレポートが不一致になることがよくありました。

各バリアントは独自のユニークなIDで識別されるようになり、このIDはバリアントのProGuardマップをNew Relicに報告する際に使用されます。この動作は、 New Relic Gradle Plugin 拡張機能で無効にすることができます。

アップロード前にマップを圧縮

アプリのサイズが大きくなると、関連するマップも大きくなり、その結果、マップを報告する際のアップロード時間が長くなります。マップの報告時間が不当に長い場合、エージェントは転送前にマップを圧縮することができます。

圧縮された地図のアップロードを有効にするには、アプリのnewrelic.propertiesファイルに以下を追加します。

com.newrelic.compressed_uploads=true

衝突報告の延期

重要

Agent version 6.0.0 では、エージェントプラグインが実行時にクラッシュを処理する方法に変更が加えられています。

クラッシュレポートの重複に対処するため、遅延クラッシュレポートがデフォルトのクラッシュレポート動作になりました。この場合、クラッシュレポートは発生時に記録されますが、次のアプリケーションの起動時までアップロードされません。

以前のクラッシュレポートの動作は引き続き利用できます。アプリケーションプロセスが終了する前にクラッシュが発生するとすぐにアップロードします。 NewRelic.withCrashReportingEnabled(boolean) APIメソッドを使用できます。例えば:

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

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

別のクラッシュレポートツールを使用する場合は、エージェントの初期化の前にNewRelic.disableFeature(FeatureFlag.CrashReporting)を呼び出すことで、クラッシュレポートを無効にできます。例えば:

NewRelic.disableFeature(FeatureFlag.CrashReporting);
NewRelic
.withApplicationToken("<appToken>")
.start(this.getApplication());

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

Androidのクラッシュレポーティングは、他のクラッシュレポーティングフレームワークが登録されている場合は、uncaught exception handlerを連鎖させることで、他のクラッシュレポーティングフレームワークと連携するように設計されています。

  • 他のフレームワークが見つからない場合 (または 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.

クラッシュレポートが表示されない場合は、デバッグログで以下のようなメッセージを確認してください。

ProGuardまたはDexGuardのマップファイルを手動でアップロードする

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

ProGuardまたはDexGuardのマップファイルを手動でアップロードするには、以下の手順に従います。

  1. プロジェクトのビルドディレクトリでmapping.txtファイルを検索します。たとえば、Android Studioを使用するプロジェクトの場合、ファイルは<PROJECT_ROOT>/app/build/outputs/mapping/<BUILD_VARIANT>ディレクトリにあります。一般に、アプリケーションの最終バージョンをビルドするときにreleaseバリアントが使用されます。次のコマンドは、マップファイルを見つけるのに役立ちます。

    find <project_root> -name mapping.txt
  2. コマンドターミナルを使用して、ProGuardまたはDexGuardのマッピングファイルをアップロードします。

    • USアカウントの場合:

      curl -v -F upload=@"<mapping.txt>" -H "X-APP-LICENSE-KEY:<APPLICATION_TOKEN>" https://mobile-symbol-upload.newrelic.com/symbol
    • For a EU account:

      curl -v -F upload=@"<mapping.txt>" -H "X-APP-LICENSE-KEY:<APPLICATION_TOKEN>" https://mobile-symbol-upload.eu.newrelic.com/symbol

    コマンドで以下のように置き換えてください。

Androidネイティブクラッシュレポート

New Relic Androidエージェントバージョン6.7.0以降、ネイティブクラッシュの追跡と診断に役立つように、レポートと分析が拡張され、実行時にネイティブコードレベルで発生する信号違反やその他の障害が含まれるようになりました。

Androidネイティブのクラッシュレポートについて詳しくは、 こちらをご覧ください。

Copyright © 2022 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.