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 门户
mapping.txt
从应用模块的生成目录下载文件- 登录到 App Center 并选择应用
- 在左侧菜单中,导航到 “诊断 ”部分
- 选择 映射
- 单击右上角 的“上传映射 ”按钮
- 填写版本名称和版本代码 (这些必须与该版本的 Gradle 配置匹配,以便映射适用于特定生成)
mapping.txt
从应用模块的生成目录上传文件。- 单击“保存”按钮 。
App Center API
通过 API 上传映射文件的过程涉及一系列三个 API 调用:一个用于在后端分配空间,一个用于上传文件,另一个用于更新上传状态。 第一个 API 调用的正文应分别设置为 AndroidProguard
symbol_type
,build
以及version
分别对应于版本代码和版本名称的属性,以及 file_name
。
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}'
- 使用从第一
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
文件。
删除映射文件
- 向
GET
symbols_list API 发出请求。 这会检索上传的映射文件的 ID。 DELETE
使用映射文件 ID 向 symbols_upload API 发出请求。 这会删除指定的映射文件。