Android 反混淆

重要

Visual Studio App Center 于 2025 年 3 月 31 日停用,但分析和诊断功能除外,这些功能将继续受支持,直到 2026 年 6 月 30 日。 了解详细信息

ProGuard、DexGuard 和 R8 是优化和模糊处理 Android 应用代码的工具。 它删除了未使用的代码、重命名类、字段和具有语义模糊名称的方法,从而使代码基变得更小,更难反向工程。 若要在 Android 应用中启用 ProGuard 或 R8 模糊处理,请遵循 官方的 Android 开发人员文档

在 Android 应用中启用 ProGuard、DexGuard 或 R8 后,堆栈跟踪必须进行反混淆。 每当上传在每个构建中创建的mapping.txt文件时,App Center 会自动取消混淆 Java、Kotlin 和 React Native Android 应用的堆栈跟踪。 此文件将原始类、方法和字段名称映射到模糊处理的名称,以确保堆栈跟踪信息的可读性。

App Center 生成和分发服务可以自动生成映射文件并将其上传到诊断服务。 如果使用 App Center 生成并自动将应用分发给最终用户,则无需手动获取和上传映射文件,如以下步骤中所述。

上传 mapping.txt 文件

App Center 门户

  1. 在应用模块的生成目录中下载mapping.txt文件
  2. 登录到 App Center 并选择你的应用
  3. 在左侧菜单中,导航到“ 诊断 ”部分
  4. 选择 映射
  5. 单击右上角的“ 上传映射 ”按钮
  6. 填写版本名称和版本代码(这些代码必须与该版本的 Gradle 配置匹配,以便映射适用于特定生成)
  7. 上传应用模块生成目录中的mapping.txt文件。
  8. 单击“保存”按钮。

App Center API

通过 API 上传映射文件的过程涉及一系列三个 API 调用:一个用于在后端分配空间,一个用于上传文件,另一个用于更新上传状态。 第一个 API 调用的正文应将 symbol_typeAndroidProguard 设置为 buildversion,它们分别对应版本代码和版本名称的属性,以及一个 file_name

  1. 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}'
  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_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-mappings --mapping {mapping file} --version-name {version name} --version-code {version code}

注释

App Center 无法检查是否已上传正确的 mapping.txt 文件。 建议在创建.apk文件后直接上传文件,或将其推送到代码存储库(如果以后要上传)。

从 App Center 的构建中转发映射

如果构建被配置为生成 mapping.txt 文件,App Center 构建将生成该文件供下载。 自动分发构建或稍后手动分发mapping.txt文件将转发到诊断工具,以解析传入的崩溃报告。 分发生成后无需手动上传 mapping.txt 文件。

删除映射文件

  1. GETsymbols_list API 发出请求。 这会检索已上传的映射文件的 ID。
  2. DELETE使用映射文件 ID 向symbols_upload API 发出请求。 这会删除指定的映射文件。