Android クラッシュレポートの有効化/無効化
ネイティブ クラッシュ ハンドラ
インストゥルメンテーションが初期化されると、ネイティブ クラッシュ ハンドラは Splunk AppDynamics ライブラリ libadeum をロードします。コードのエントリポイントで、実行中のプロセスに信号ハンドラが注入されます。信号が処理された後は、libadeum で前の信号ハンドラが復元されます。(これにより、さまざまな方法を使用して信号を処理できます。)
このハンドラは、ネイティブクラッシュに関する情報を収集し、一時ファイルに書き込みます。アプリケーションを再起動すると、一時ファイルが読み取られ、処理されて、クラッシュ情報がコントローラ UI に表示されます。
ネイティブ クラッシュ レポートの設定
ただし、デフォルトではこの機能はオフになっているため、セクション nativeCrashHandling を追加し、enabled を true に設定する必要があります。さらに、各ビルドバリアントの variantLibraryPaths 配列内のライブラリパスを指定して、シンボルファイルをローカルに書き込み、そのシンボルファイルを EUM サーバーに送信します。また、プロジェクトビルドのビルド ID を指定することもできます。
プロジェクトをビルドしたら、ビルド ID は build/appDynamics/ndkSym<VariantName>/<AppBuildID> で確認できます。指定しない場合は、最後に作成したプロジェクトのビルド ID が使用されます。
adeum {
// Other configuration if needed.
// Enable native crash handling; the default is false.
nativeCrashHandling {
enabled = true
symbolUpload {
buildId = "<your_custom_build_id>"
variantLibraryPaths = ["release": "ndkLib/obj/local", "debug": "ndkLib/obj/debug", ...]
}
}
}
Android アプリケーションバンドルの設定
Android アプリケーションバンドルを使用している場合は、クラッシュが正しくシンボル化されるように、アプリケーションモジュール build.gradle に次の行を追加する必要があります。
android.bundle.enableUncompressedNativeLibs=false
スタックトレースのソースコード情報の表示
スタックトレースでシンボル情報を表示するには、次の 2 つの方法があります。
- [Crash Details] ダイアログから、クラッシュレポートをダウンロードし、ndk-stack などのユーティリティを使用し、ソースコードレベルのシンボル化を使用してクラッシュレポートを表示します。
- シンボルファイルをアップロードしてから、[Crash Details] ダイアログでスタックトレースを表示します。
クラッシュレポートのダウンロードおよび ndk-stack の使用
- [Crash Dashboard] から、[Unique Crashes] ウィジェットにリストされているクラッシュのいずれかをダブルクリックします。
- [Crash Details] ダイアログから、[Download] をクリックしてクラッシュレポートをダウンロードします。
- ダウンロードしたクラッシュレポートで、ソースコードレベルのシンボリケーションのクラッシュレポートを生成するための入力ファイルとして、ndk-stack(または同様のユーティリティ)を実行します。
シンボルファイルのアップロードおよびスタックトレースの表示
シンボルファイルを自動的に生成してアップロードすることをお勧めしますが、シンボルファイルを手動で生成してアップロードすることもできます。シンボルファイルをアップロードした後、アップロードした ndkSYM ファイルの UUID と同じビルド ID を持つアプリケーションがクラッシュすると、[Crash Details] ダイアログに表示されるスタックトレースの各フレームの C/C++ 関数名の横に、ファイル名と行番号が表示されます。
シンボルファイルの自動生成とアップロード
次の gradle コマンドを実行すると、シンボルファイルを生成し、EUM サーバーにアップロードすることができます。<VariantName> を設定で定義したビルドバリアント名で置き換えます。たとえば、上記の設定では、<VariantName> がリリースまたはデバッグの可能性があります。
$ gradle appDynamicsUploadNDKSymbolFile<VariantName>
シンボルファイルの手動生成とアップロード
トークンベースのアップロードを使用するには、次のプロパティが有効になっていることを確認します。
シンボルファイルを生成するには、次の gradle コマンドを実行します。ここで、<VariantName> はビルドバリアントの名前です。生成されたシンボルファイルは build/appDynamics/ndkSym<VariantName>/<AppBuildID>/<AppBuildID>.ndkSYM.zip に書き込まれます。
$ gradle appDynamicsGenerateNDKSymbolFile<VariantName>
生成されたシンボルファイルを手動でアップロードするには、次の cURL コマンドを使用して、<ndkSymZipFile> を生成したシンボルファイルに、<Account Name> を EUM アカウント名に、<License Key> を EUM ライセンスキーに置き換えます。
$ curl -v -H Content-Type:application/octet-stream --upload-file <ndkSymZipFile> --user <Account Name>:<License Key> https://api.eum-appdynamics.com/v2/account/<Account Name>/android-ndksym
トークンを使用した REST API での NDK シンボルのアップロード
MAPPING_FILE_UPLOAD_API_DISABLED: TrueNDK シンボルファイルをアップロードするには、次の手順を実行します。