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 符号

  1. 按照"获取调试符号"部分下的 Breakpad 文档中所述,使用 Breakpad 工具链转储符号。
  2. 创建 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 门户

  1. 登录到 App Center 并选择应用。
  2. 在左侧菜单中,导航到 " 诊断 " 部分,然后找到 " 问题"。
  3. 如果你的应用程序尚未报告任何故障,则需要使用 API 或 CLI 上传 Breakpad 符号。
  4. 如果你的应用程序已报告需要符号的故障,请检查 " Unsymbolicated " 选项卡,并且应有缺少符号的版本组,然后单击它以显示菜单来上传文件。
  5. App Center 对符号进行索引后,将会为您符号化崩溃。

App Center API

通过 API 上载符号的过程涉及到一系列三个 API 调用:一个用于在后端分配空间,一个用于上传文件,另一个用于更新上载状态。 第一个 API 调用的主体应设置 symbol_typeBreakpad

  1. 触发 POSTsymbol_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" 并提供文件在磁盘上的位置。 此调用会将文件上传到后端存储帐户。 了解有关 放置 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 没有所有符号文件来完全标志崩溃报告,则故障将列在 " Unsymbolicated " 选项卡中。如果有权访问所需的符号,可以从此页上传这些符号。

如果无法上载符号,可以通过选择表中的行并单击 "忽略版本" 按钮,将其标记为已 忽略。 此按钮指示 App Center 处理崩溃,并使其尽可能完全地处理文件中的符号标志。 完成处理后,它们将出现在部分符号化的 " 崩溃 " 选项卡中。 也依赖于标记为 "已忽略" 的相同符号 Id 的新崩溃将绕过 Unsymbolicated 的选项卡,因为它们进入并流过系统。