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 檔

如果您想要從其他平臺將 Breakpad 當機傳送至 App Center,請參閱 上傳自定義損毀檔

未受監督的當機

[App Center 診斷] 區段中會顯示未受監督的當機,如此您甚至可以在上傳符號之前檢視一些詳細數據。 這些損毀中的遺漏符號會顯示在 [未混淆] 索引卷標中。如果上傳遺漏的符號,未受監督的當機群組將會由符號化當機群組取代。

注意

App Center 不支援來自系統連結庫的框架符號。 假設 Android 和其他平台的系統二進位檔片段偏高,這在任何指定的裝置/OS 版本組合上可能不同 – App Center 不會提供系統二進位檔的符號本身,而且會自動略過符號中的系統二進位檔框架。

產生要上傳 .zip 檔案

App Center 有兩種方式可擷取符號所需的符號。 App Center 可以從專案中所使用的原生二進位檔產生它們,或者您可以直接上傳斷板符號。

選項 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 組建和散發服務可以自動將符號轉送至診斷服務。 如果您使用App Center來建置和自動散發您的應用程式給終端使用者,則不需要手動取得並上傳符號檔,如下列步驟所述。

App Center 入口網站

  1. 登入 App Center 並選取您的應用程式。
  2. 在左側功能表中,流覽至 [ 診斷 ] 區段,然後流覽 [ 問題]。
  3. 如果您的應用程式尚未回報任何當機,您必須使用 API 或 CLI 來上傳 Breakpad 符號。
  4. 如果您的應用程式已經回報需要符號的當機,請檢查 [未布 建] 索引標籤,而且應該有一個版本群組缺少符號,請單擊它以顯示功能表以上傳檔案。
  5. App Center 為符號編製索引之後,系統會為您符號損毀。

App Center API

透過 API 上傳符號的程式包含一系列三個 API 呼叫:一個用來配置後端的空間、一個用來上傳檔案,另一個用來更新上傳的狀態。 第一個 API 呼叫的主體應設定 symbol_typeBreakpad

  1. POST觸發對 symbol_uploads API 的要求。 此呼叫會在後端為您的檔案配置空間,並傳回 symbol_upload_idupload_url 屬性。
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使用從第一個步驟傳回的屬性,使用標頭提出PUT要求:"x-ms-blob-type: BlockBlob",並提供磁碟上檔案的位置。 此呼叫會將檔案上傳至後端記憶體帳戶。 深入瞭解 PUT Blob要求標頭
curl -X PUT '{upload_url}' \
    -H 'x-ms-blob-type: BlockBlob' \
    --upload-file '{path to file}'
  1. 使用從第一PATCH個步驟傳回的屬性,向symbol_uploads API 提出要求。symbol_upload_id 在要求的本文中,指定您要將上傳 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" }'

注意

符號上傳 API 不適用於大於 256MB 的檔案。 使用 App Center CLI 上傳這些檔案。 您可以依照 App Center CLI 存放庫中的指示來安裝 App Center CLI。

App Center CLI

您也可以使用 CLI 上傳符號檔:

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

忽略符號

當 App Center 沒有所有符號檔可完整符號化當機報告時,當機會列在 [未布建] 索引 卷標中。如果您有這些符號的存取權,則會從此頁面上傳必要的符號。

如果您無法上傳符號,您可以選取資料表中的資料列並按下 [忽略版本] 按鈕,將它們標示為 [忽略]。 此按鈕會告訴 App Center 處理當機,並以檔案上的符號盡可能完整地加以符號化。 完成處理之後,它們會出現在部分符號化的 [當機 ] 索引卷標中。 新的當機也相依於標示為忽略的相同符號標識符,將會略過 [ 未布 建] 索引標籤,因為它們會傳入並流經系統。