在android studio中编译已签名的APK后生成的proguard映射文件在哪里?
我不确定它是否无法工作或者我是否忘记了文件路径,并且我的强制google / stackoverflow搜索没有回答这个问题
它应位于应用程序模块目录中的 build/outputs/proguard/release/mapping.txt .
build/outputs/proguard/release/mapping.txt
在最新版本的ProGuard和Android Studio中,该文件位于 build/outputs/mapping/release/mapping.txt .
build/outputs/mapping/release/mapping.txt
对我来说,他们是 'build/outputs/mapping/release'
'build/outputs/mapping/release'
我发现配置proguard将mapping.txt文件写入 build/ 目录树之外的位置更加清晰,这样可以更方便地检查版本控制 .
build/
要实现此目的,请将其放在 proguard-rules.pro 文件中:
proguard-rules.pro
-printmapping mapping.txt
这将(很可能)将它放在与 proguard-rules.pro 文件相同的目录中 . 最终,您可能希望将其写入与APK文件相同的目录并使用等效名称(可能包括flavor,构建类型等) .
注意:根据我的经验,这不会被proguard模板文件推翻(这是由评论者向另一个answer建议的) .
更新:如果你有多种产品口味,那么这是一个更好的解决方案:https://stackoverflow.com/a/31116608/444761
我发现它没有生成,所以我将其添加到规则文件中
-printmapping build/outputs/mapping/release/mapping.txt
我使用的是版本 Android Studio 2.2.2 . 对我而言,它位于以下位置:
用于调试: \app\build\outputs\mapping\debug\mapping.txt
发布: \app\build\outputs\mapping\release\mapping.txt
这是一张图片 - 你会在映射文件夹中找到它:
回答这个问题已经很晚了,以防有人需要我的回答 .
Location of Mapping file to deobfuscate:
ProGuard将文件保存在app app / build / outputs / mapping / FLAVOR / release / mapping.txt中
通常在调试模式下,您不需要映射文件,因为通常会禁用混淆 . 如果不是这种情况,那么请确保在build.gradle文件中有以下代码用于调试变量 .
debug { minifyEnabled false debuggable true }
Some Gotchas:
每次使用ProGuard创建发布版本时,mapping.txt文件都会被覆盖,因此在创建新版本之前首先要备份该文件 . 它将有助于从旧版本的应用程序中混淆堆栈跟踪 .
除此之外,有两种方法可以混淆代码:
1. Upload your mapping.txt file to Google play Console:
在Google Play上发布您的应用时,您可以为每个版本的APK上传mapping.txt文件 . 然后,Google Play会根据用户报告的问题对传入的堆栈跟踪进行反混淆处理,以便您可以在Google Play控制台中查看这些跟踪 .
2. Use local sdk tool retrace.sh/retrace.bat:
有时您希望运行应用程序的发布版本(通过更改构建变体以释放并运行它)来交叉检查并修复错误,以便在 生产环境 中不会发生(当发布到游戏商店时) .
要将混淆的堆栈跟踪转换为可读的堆栈跟踪,请使用回溯脚本( retrace.bat on Windows; retrace.sh on Mac/Linux ) .
它位于 <sdk-root>/tools/proguard/bin/ 目录中 .
<sdk-root>/tools/proguard/bin/
<sdk-root> 是安装所有android库和sdks的地方 .
<sdk-root>
该脚本获取mapping.txt文件和堆栈跟踪,从而生成新的可读堆栈跟踪 .
Command Syntax:
retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]
For example:
retrace.bat -verbose mapping.txt obfuscated_trace.txt
我更喜欢本地版本的混淆,因为预先检查 生产环境 错误非常方便 .
我希望它有所帮助 .
因为即使有人告诉我文件的位置,我也很愚蠢并且迷路了:
cd StudioProjects/fooProject find . -name "mapping.txt" | xargs less
8 回答
它应位于应用程序模块目录中的
build/outputs/proguard/release/mapping.txt
.在最新版本的ProGuard和Android Studio中,该文件位于
build/outputs/mapping/release/mapping.txt
.对我来说,他们是
'build/outputs/mapping/release'
我发现配置proguard将mapping.txt文件写入
build/
目录树之外的位置更加清晰,这样可以更方便地检查版本控制 .要实现此目的,请将其放在
proguard-rules.pro
文件中:这将(很可能)将它放在与
proguard-rules.pro
文件相同的目录中 . 最终,您可能希望将其写入与APK文件相同的目录并使用等效名称(可能包括flavor,构建类型等) .注意:根据我的经验,这不会被proguard模板文件推翻(这是由评论者向另一个answer建议的) .
更新:如果你有多种产品口味,那么这是一个更好的解决方案:https://stackoverflow.com/a/31116608/444761
我发现它没有生成,所以我将其添加到规则文件中
我使用的是版本 Android Studio 2.2.2 . 对我而言,它位于以下位置:
用于调试: \app\build\outputs\mapping\debug\mapping.txt
发布: \app\build\outputs\mapping\release\mapping.txt
这是一张图片 - 你会在映射文件夹中找到它:
回答这个问题已经很晚了,以防有人需要我的回答 .
Location of Mapping file to deobfuscate:
通常在调试模式下,您不需要映射文件,因为通常会禁用混淆 . 如果不是这种情况,那么请确保在build.gradle文件中有以下代码用于调试变量 .
Some Gotchas:
每次使用ProGuard创建发布版本时,mapping.txt文件都会被覆盖,因此在创建新版本之前首先要备份该文件 . 它将有助于从旧版本的应用程序中混淆堆栈跟踪 .
除此之外,有两种方法可以混淆代码:
1. Upload your mapping.txt file to Google play Console:
在Google Play上发布您的应用时,您可以为每个版本的APK上传mapping.txt文件 . 然后,Google Play会根据用户报告的问题对传入的堆栈跟踪进行反混淆处理,以便您可以在Google Play控制台中查看这些跟踪 .
2. Use local sdk tool retrace.sh/retrace.bat:
有时您希望运行应用程序的发布版本(通过更改构建变体以释放并运行它)来交叉检查并修复错误,以便在 生产环境 中不会发生(当发布到游戏商店时) .
要将混淆的堆栈跟踪转换为可读的堆栈跟踪,请使用回溯脚本( retrace.bat on Windows; retrace.sh on Mac/Linux ) .
它位于
<sdk-root>/tools/proguard/bin/
目录中 .<sdk-root>
是安装所有android库和sdks的地方 .该脚本获取mapping.txt文件和堆栈跟踪,从而生成新的可读堆栈跟踪 .
Command Syntax:
For example:
我更喜欢本地版本的混淆,因为预先检查 生产环境 错误非常方便 .
我希望它有所帮助 .
因为即使有人告诉我文件的位置,我也很愚蠢并且迷路了: