Android NDK
Android NDK 允许使用 C 和 c + + 实现 Android 应用的某些部分。 你可以使用适用于 Android 应用的 Google Breakpad 客户端库来接收本机代码中的有效堆栈跟踪。 堆栈跟踪可能只包含内存地址。 它们不显示读取和理解崩溃所需的类名、方法、文件名和行号。 若要获取为 Android NDK 应用转换的内存地址,你必须为每个生成上传应用程序符号。
若要了解如何报告 NDK 崩溃,请参阅适用于 Android 应用的 Android SDK 文档 或适用于 unity 应用的 unity SDK 文档 。
如果要将 Breakpad 崩溃从其他平台发送到 App Center,请参阅 上传自定义故障文档。
Unsymbolicated 崩溃
"诊断"部分会显示未App Center崩溃,因此即使在上传符号之前,也可以查看一些详细信息。 这些崩溃中缺少的符号将显示在"未收缩"选项卡中。如果上传了缺少的符号,则无符号故障组将替换为符号化崩溃组。
备注
App Center 不支持来自系统库的帧带符号化。 由于适用于 Android 和其他平台的系统二进制文件的高碎片(对于任何给定的设备/操作系统版本组合,它们可能不同),App Center 不会为系统二进制文件提供符号,也不会在带符号化中自动跳过系统二进制文件中的帧。
生成要上传的 .zip 文件
有两种方法App Center检索符号所需的符号。 App Center从项目中使用的本机二进制文件生成它们,也可以直接上传 Breakpad 符号。
选项 1:上传本机二进制文件
将项目目录中的所有 .so obj/local/$ABI/ 文件放入 .zip 文件。
选项 2:上传 Breakpad 符号
- 按照"获取调试符号"部分下的 Breakpad 文档中所述,使用 Breakpad 工具链转储符号。
- 创建 symbols.zip 以下结构的文件:
备注
如果要从 macOS 上传符号,则必须清除任何多余的文件夹的符号,例如__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 符号。
- 如果你的应用程序已报告需要符号的故障,请检查 " Unsymbolicated " 选项卡,并且应有缺少符号的版本组,然后单击它以显示菜单来上传文件。
- 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"并提供文件在磁盘上的位置。 此调用会将文件上传到后端存储帐户。 了解有关 放置 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 没有所有符号文件来完全标志崩溃报告,则故障将列在 " Unsymbolicated " 选项卡中。如果有权访问所需的符号,可以从此页上传这些符号。
如果无法上载符号,可以通过选择表中的行并单击 "忽略版本" 按钮,将其标记为已 忽略。 此按钮指示 App Center 处理崩溃,并使其尽可能完全地处理文件中的符号标志。 完成处理后,它们将出现在部分符号化的 " 崩溃 " 选项卡中。 也依赖于标记为 "已忽略" 的相同符号 Id 的新崩溃将绕过 Unsymbolicated 的选项卡,因为它们进入并流过系统。