ネイティブ Android ライブラリに起因するネイティブクラッシュを報告できます。この機能は、Android ネイティブ開発キット(NDK)をサポートするすべてのアーキテクチャで使用できます。 

ネイティブ クラッシュ ハンドラ

インストゥルメンテーションが初期化されると、ネイティブ クラッシュ ハンドラは 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", ...]
        }
    } 
}
JAVA

Android アプリケーションバンドルの設定

Android アプリケーションバンドル を使用している場合、正しくクラッシュをシンボル化するために、アプリケーションモジュール build.gradle次の行を追加する必要があります。

android.bundle.enableUncompressedNativeLibs=false
JAVA

スタックトレースのソースコード情報の表示

スタックトレースでシンボル情報を表示するには、次の 2 つの方法があります。

  1. [Crash Details ] ダイアログから、クラッシュレポートをダウンロードし、ndk-stack などのユーティリティを使用し、ソースコードレベルのシンボル化を使用してクラッシュレポートを表示します。
  2. シンボルファイルをアップロードしてから、[Crash Details] ダイアログでスタックトレースを表示します。 

クラッシュレポートのダウンロードおよび ndk-stack の使用

  1. [Crash Dashboard] から、[Unique Crashes] ウィジェットにリストされているクラッシュのいずれかをダブルクリックします。
  2. [Crash Details ] ダイアログから、[Download ] をクリックしてクラッシュレポートをダウンロードします。
  3. ダウンロードしたクラッシュレポートで、ソースコードレベルのシンボリケーションのクラッシュレポートを生成するための入力ファイルとして、ndk-stack(または同様のユーティリティ)を実行します。

シンボルファイルのアップロードおよびスタックトレースの表示

シンボルファイルを自動的に生成してアップロードすることをお勧めしますが、シンボルファイルを手動で生成してアップロードすることもできます。シンボルファイルをアップロードした後、アップロードした ndkSYM ファイルの UUID と同じビルド ID を持つアプリケーションがクラッシュすると、[Crash Details] ダイアログに表示されるスタックトレースの各フレームの C/C++ 関数名の横に、ファイル名と行番号が表示されます。

シンボルファイルの自動生成とアップロード

次の gradle コマンドを実行すると、シンボルファイルを生成し、EUM サーバにアップロードすることができます。<VariantName> を設定で定義したビルドバリアント名で置き換えます。たとえば、上記の設定では、<VariantName> がリリースまたはデバッグの可能性があります。

$ gradle appDynamicsUploadNDKSymbolFile<VariantName>
BASH

シンボルファイルの手動生成とアップロード

シンボルファイルを生成するには、次の gradle コマンドを実行します。ここで、<VariantName> はビルドバリアントの名前です。生成されたシンボルファイルが build/appDynamics/ndkSym<VariantName>/<AppBuildID>/<AppBuildID>.ndkSYM.zip に書き込まれます。

$ gradle appDynamicsGenerateNDKSymbolFile<VariantName>
BASH

生成されたシンボルファイルを手動でアップロードするには、次の 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
BASH