デフォルトでは、 によりモバイル アプリケーションのクラッシュ レポートが有効になり、クラッシュの追跡と診断に役立ちます。 Android アプリケーションがクラッシュすると、エージェントはクラッシュ レポートを New Relicコレクターにアップロードします。 ProGuard または DexGuard を使用している場合は、クラッシュの詳細が自動的に処理され、難読化が解除されます。
Crash analysis 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
マッピングアップロードホストの構成
リダイレクトされたサーバーでマップを送信するには、アプリのnewrelic.properties
ファイルに以下を追加します。
# Please only provide the host name as the value without https:// at the beginning or / at the end, for example: xyz.api.comcom.newrelic.mapping_upload_host=xyz.api.com
衝突報告の延期
重要
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のマップファイルを手動でアップロードするには、以下の手順に従います。
プロジェクトのビルドディレクトリで
mapping.txt
ファイルを検索します。たとえば、Android Studioを使用するプロジェクトの場合、ファイルは<PROJECT_ROOT>/app/build/outputs/mapping/<BUILD_VARIANT>
ディレクトリにあります。一般に、アプリケーションの最終バージョンをビルドするときにrelease
バリアントが使用されます。次のコマンドは、マップファイルを見つけるのに役立ちます。bash$find <project_root> -name mapping.txtコマンドターミナルを使用して、ProGuardまたはDexGuardのマッピングファイルをアップロードします。
US accountの場合:
bash$curl -v -F upload=@"<mapping.txt>" -H "X-APP-LICENSE-KEY:<APPLICATION_TOKEN>" https://mobile-symbol-upload.newrelic.com/symbolEU accountの場合:
bash$curl -v -F upload=@"<mapping.txt>" -H "X-APP-LICENSE-KEY:<APPLICATION_TOKEN>" https://mobile-symbol-upload.eu.newrelic.com/symbol
コマンドで以下のように置き換えてください。
<mapping.txt>
ProGuardまたはDexGuardmapping.txt
ファイルへのフルパスです。<APPLICATION_TOKEN>
モバイル監視アプリケーショントークンです。
Androidネイティブクラッシュレポート
New Relic Android エージェント バージョン 6.7.0以降、ネイティブ クラッシュの追跡と診断を支援するために、レポートと分析が強化され、実行時にネイティブ コード レベルで発生する信号違反やその他の障害が含まれるようになりました。
Androidネイティブのクラッシュレポートについて詳しくは、 こちらをご覧ください。