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:上傳斷板符號
- 使用 Breakpad 工具鏈傾印符號,如一節中的 Breakpad 檔 所述。
- 使用下列結構建立 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 入口網站
- 登入 App Center 並選取您的應用程式。
- 在左側功能表中,流覽至 [ 診斷 ] 區段,然後流覽 [ 問題]。
- 如果您的應用程式尚未回報任何當機,您必須使用 API 或 CLI 來上傳 Breakpad 符號。
- 如果您的應用程式已經回報需要符號的當機,請檢查 [未布 建] 索引標籤,而且應該有一個版本群組缺少符號,請單擊它以顯示功能表以上傳檔案。
- App Center 為符號編製索引之後,系統會為您符號損毀。
App Center API
透過 API 上傳符號的程式包含一系列三個 API 呼叫:一個用來配置後端的空間、一個用來上傳檔案,另一個用來更新上傳的狀態。 第一個 API 呼叫的主體應設定 symbol_type
為 Breakpad
。
POST
觸發對 symbol_uploads API 的要求。 此呼叫會在後端為您的檔案配置空間,並傳回symbol_upload_id
和upload_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}'
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}'
- 使用從第一
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 處理當機,並以檔案上的符號盡可能完整地加以符號化。 完成處理之後,它們會出現在部分符號化的 [當機 ] 索引卷標中。 新的當機也相依於標示為忽略的相同符號標識符,將會略過 [ 未布 建] 索引標籤,因為它們會傳入並流經系統。