重要
Visual Studio App Center 于 2025 年 3 月 31 日停用,但分析和诊断功能除外,这些功能将继续受支持,直到 2026 年 6 月 30 日。 了解详细信息。
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 可以从项目中使用的本机二进制文件生成它们,也可以直接上传 Breakpad 符号。
选项 1:上传本机二进制文件
将项目 obj/local/$ABI/
目录中的所有 .so 文件放入 .zip 文件中。
选项 2:上传 Breakpad 符号
- 使用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}'
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 处理崩溃,并使用文件中的符号尽可能全面地对其进行符号化。 完成处理后,它们将显示在“ 崩溃 ”选项卡中部分符号化。 新的崩溃,也依赖于标记为被忽略的相同符号 ID 将绕过 未配置 选项卡,因为它们传入并流经系统。