モバイルモニタリングでは、デフォルトでモバイルアプリケーションのクラッシュレポートが有効になっており、クラッシュの追跡や診断に役立ちます。Android アプリケーションがクラッシュすると、エージェントはクラッシュレポートを New Relic コレクター にアップロードします。クラッシュの詳細は、ProGuard または DexGuard を使用している場合、自動的に処理され、難読化されます。
クラッシュの詳細情報は、 Crash analysis UI で見ることができますし、 Eメール でクラッシュ通知を受け取ることもできます。また、 New Relic Insights を使ってクラッシュデータをより深く調査したり、 チケッティングシステム と統合してさらに調査することもできます。
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と一致する必要があります。
プロジェクトでNew Relicアプリのトークンを含む newrelic.properties
ファイルを作成すると、ProGuardまたはDexGuard mapping.txt
ファイルがビルド毎に自動的にアップロードされます。
例外
以下のいずれかの状況が発生した場合は、 手動で mapping.txt
置換ファイルをアップロードする必要があります。
- *
mapping.txt
ファイルの名前を、DexGuard-printmapping
オプションを使用して変更した場合、Androidエージェントは、ストリップされた名前を見つけたりアップロードしたりすることができません。 - Crashes ページ に難読化されたクラッシュレポートが表示されている場合、
mapping.txt
ファイルがアップロードされていない可能性があります。
マップ処理
重要
Agent version 5.27.0 ビルド時のエージェントプラグインプロセスマップの方法が変更されました。
一部のバリアントビルドでマップが報告されています。
エージェントは、 mapping.txt Release build-type variants によって生成された
ファイルのみをタグ付けして報告します。この動作は、 New Relic Gradle Plugin の拡張機能で設定・無効化することができます。
バリアントには固有のビルド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のマップファイルを手動でアップロードするには、以下の手順に従います。
mapping.txt
file(s) をプロジェクトの build ディレクトリで探す 例えば、このファイルは< PROJECT_ROOT>/app/build/outputs/mapping/<BUILD_VARIANT>
Android Studio を使っているプロジェクトの場合は、このディレクトリにあります。一般的に、アプリケーションの最終バージョンをビルドする際には、リリース
バリアントを使用します。マップファイルを探すには、以下のコマンドが便利です。find <project_root> -name mapping.txt
コマンドターミナルを使用して、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
コマンドで以下のように置き換えてください。
< mapping.txt>
は、ProGuard または DexGuardmapping.txt
ファイルのフルパスです。< APPLICATION_TOKEN>
is your mobile monitoring application token.