Android Deobfuscation

重要

Visual Studio App Center 计划于 2025 年 3 月 31 日停用。 虽然可以继续使用 Visual Studio App Center,直到它完全停用,但你可以考虑迁移到几个建议的替代方法。

详细了解支持时间线和替代方案。

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 调用的正文应分别设置为 AndroidProguardsymbol_typebuild以及version分别对应于版本代码和版本名称的属性,以及 file_name

  1. POST触发对symbol_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"并提供文件在磁盘上的位置。 此调用将文件上传到后端存储帐户。 详细了解 PUT 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-mappings --mapping {mapping file} --version-name {version name} --version-code {version code}

注意

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

从 App Center 中的内部版本转发映射

如果将生成 配置为生成 mapping.txt 文件,则 App Center 内部版本将生成文件作为可用下载。 自动分发生成或稍后手动分发会将 mapping.txt 文件转发到诊断,以解除对传入的故障报告进行模糊处理。 分发生成后,无需手动上传 mapping.txt 文件。

删除映射文件

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