Android NDK

重要

Visual Studio App Center は、2025 年 3 月 31 日に廃止される予定です。 完全に廃止されるまで Visual Studio App Center を引き続き使用できますが、移行を検討できる推奨される代替手段がいくつかあります。

詳細については、サポートタイムラインと代替手段に関するページを参照してください。

Android NDK を使用すると、C と C++ を使用して Android アプリの一部を実装できます。 Android アプリ用の Google Breakpad クライアント ライブラリを使用して、ネイティブ コードで有効なスタック トレースを受信できます。 スタック トレースには、メモリ アドレスのみが含まれる場合があります。 クラッシュの読み取りと理解に必要なクラス名、メソッド、ファイル名、行番号は表示されません。 Android NDK アプリ用に変換されたメモリ アドレスを取得するには、ビルドごとにアプリケーション シンボルをアップロードする必要があります。

NDK のクラッシュを報告する方法については、Android アプリの Android SDK ドキュメント または Unity アプリの Unity SDK ドキュメントを参照してください

他のプラットフォームから App Center に Breakpad のクラッシュを送信する場合は、 カスタム クラッシュのアップロードに関するドキュメントを参照してください

Unsymbolicated クラッシュ

[App Center Diagnostics]\(App Center 診断\) セクションには、シンボルをアップロードする前でもいくつかの詳細を表示できるように、重複していないクラッシュが表示されます。 これらのクラッシュで見つからないシンボルは、[unsymbolicated] タブに表示されます。不足しているシンボルがアップロードされた場合、シンボル化されていないクラッシュ グループは、シンボリック化されたクラッシュ グループに置き換えられます。

注意

App Center では、システム ライブラリからのフレームのシンボル化はサポートされていません。 Android やその他のプラットフォーム用のシステム バイナリの断片化が高い場合 (特定のデバイスと OS のバージョンの組み合わせでは異なる場合があります)、App Center ではシステム バイナリのシンボル自体が提供されておらず、シンボル化でシステム バイナリからフレームが自動的にスキップされます。

アップロードする .zip ファイルを生成する

App Center でシンボル化に必要なシンボルを取得するには、2 つの方法があります。 App Center では、プロジェクトで使用されているネイティブ バイナリから生成することも、Breakpad シンボルを直接アップロードすることもできます。

オプション 1: ネイティブ バイナリをアップロードする

プロジェクト obj/local/$ABI/ のディレクトリからすべての .so ファイルを .zip ファイルに配置します。

オプション 2: ブレークパッド シンボルをアップロードする

  1. Breakpad のドキュメントの「デバッグ シンボルを取得する」セクションで説明されているように、Breakpad ツールチェーンを使用してシンボルをダンプします。
  2. 次の構造の symbols.zip ファイルを作成します。

注意

macOS からシンボルをアップロードする場合は、余分なフォルダーのシンボルをクリーンする必要があります (例: __MACOSが生成され、これを削除するには、 を使用zip -d <symbols.zip> __MACOSX/\*できます。

$ unzip -l symbols.zip
Archive:  symbols.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
        0  07-22-13 15:07   symbols/
        0  07-22-13 15:07   symbols/libnative.so/
        0  07-22-13 15:07   symbols/libnative.so/EAC901FB6DDCCE8AED89E1A8E4A58360/
    12468  07-22-13 15:07   symbols/libnative.so/EAC901FB6DDCCE8AED89E1A8E4A58360/libnative.so.sym
        0  07-22-13 15:07   symbols/libnative.so/FDC5C9E715C4F16408C0B78F95855BF0/
    12467  07-22-13 15:07   symbols/libnative.so/FDC5C9E715C4F16408C0B78F95855BF0/libnative.so.sym
 --------                   -------
    24935                   6 files

シンボルのアップロード

注意

App Center Build and Distribution サービスでは、シンボルを診断サービスに自動的に転送できます。 App Center を使用してアプリをビルドし、エンド ユーザーに自動配布する場合は、以下の手順で詳しく説明するように、シンボル ファイルを手動で取得してアップロードする必要はありません。

App Center ポータル

  1. App Center にログインしてアプリを選択します。
  2. 左側のメニューで、[ 診断 ] セクションに移動し、[ 問題] に移動します。
  3. アプリケーションでクラッシュがまだ報告されていない場合は、API または CLI を使用して Breakpad シンボルをアップロードする必要があります。
  4. シンボルが必要なクラッシュがアプリケーションで既に報告されている場合は、[Unsymbolicated] タブをチェックし、シンボルが見つからないバージョン グループが存在する必要がある場合は、それをクリックしてメニューを表示してファイルをアップロードします。
  5. シンボルが App Center によってインデックス付けされると、クラッシュがシンボル化されます。

App Center API

API を介してシンボルをアップロードするプロセスには、一連の 3 つの API 呼び出しが含まれます。1 つはバックエンドに領域を割り当てる呼び出し、もう 1 つはファイルをアップロードし、もう 1 つはアップロードの状態を更新する呼び出しです。 最初の API 呼び出しの本文は に設定 symbol_type する Breakpad必要があります。

  1. POSTsymbol_uploads API への要求をトリガーします。 この呼び出しは、バックエンドにファイルの領域を割り当て、 プロパティと プロパティをupload_urlsymbol_upload_idします。
curl -X POST 'https://api.appcenter.ms/v0.1/apps/{owner_name}/{app_name}/symbol_uploads' \
    -H 'accept: application/json' \
    -H 'X-API-Token: {API TOKEN}' \
    -H 'Content-Type: application/json' \
    -d '{JSON BODY}'
  1. 最初のupload_url手順から返された プロパティを使用して、 ヘッダー"x-ms-blob-type: BlockBlob"を使用して要求を行いPUT、ディスク上のファイルの場所を指定します。 この呼び出しにより、バックエンド ストレージ アカウントにファイルがアップロードされます。 PUT BLOB 要求ヘッダーの詳細を確認してください。
curl -X PUT '{upload_url}' \
    -H 'x-ms-blob-type: BlockBlob' \
    --upload-file '{path to file}'
  1. 最初のPATCH手順から返された プロパティを使用してsymbol_upload_id、symbol_uploads API に要求を行います。 要求の本文で、アップロードの状態をアップロード プロセスに committed 設定するか (正常に完了したか)、または aborted (正常に完了しなかった) かを指定します。
curl -X PATCH 'https://api.appcenter.ms/v0.1/apps/{owner_name}/{app_name}/symbol_uploads/{symbol_upload_id}' \
    -H 'accept: application/json' \
    -H 'X-API-Token: {API TOKEN}' \
    -H 'Content-Type: application/json' \
    -d '{ "status": "committed" }'

注意

シンボル uploads API は、256 MB を超えるファイルでは機能しません。 これらのファイルをアップロードするには、App Center CLI を使用します。 App Center CLI リポジトリの手順に従って 、App Center CLI をインストールできます。

App Center CLI

CLI を使用してシンボル ファイルをアップロードすることもできます。

appcenter crashes upload-symbols --breakpad {symbols file}

シンボルを無視する

クラッシュ レポートを完全にシンボル化するためのシンボル ファイルがすべて App Center に存在しない場合、クラッシュは [ Unsymbolicated ] タブに一覧表示されます。必要なシンボルにアクセスできる場合は、このページからシンボルがアップロードされます。

シンボルをアップロードできない場合は、テーブル内の行を選択し、[バージョンを無視する] ボタンをクリックして、シンボルを [無視] としてマークできます。 このボタンは、クラッシュを処理し、ファイル上のシンボルを使用して可能な限り完全にシンボル化するように App Center に指示します。 処理が完了すると、部分的にシンボル化された [ クラッシュ ] タブに表示されます。 無視済みとしてマークされた同じシンボル ID にも依存する新しいクラッシュは、システムに入ってシステム内を流れるにつれて [ Unsymbolicated ] タブをバイパスします。