在Android Studio中,编译一个签名APK后生成的ProGuard映射文件在哪里?
我不确定它是否不工作,或者我只是忘记了文件路径,我的强制谷歌/Stack Overflow搜索没有回答这个问题
在Android Studio中,编译一个签名APK后生成的ProGuard映射文件在哪里?
我不确定它是否不工作,或者我只是忘记了文件路径,我的强制谷歌/Stack Overflow搜索没有回答这个问题
它应该位于应用程序模块目录下的build/outputs/proguard/release/mapping.txt。
在最新版本的ProGuard和Android Studio中,该文件位于build/outputs/mapping/release/mapping.txt。
我发现配置proguard将mapping.txt文件写入构建/目录树之外的位置更干净,这样可以更方便地检入版本控制。
要实现这一点,请将其放入您的proguard-rules中。支持文件:
-printmapping mapping.txt
这将(很可能)将其放置在与proguard-rules相同的目录中。支持文件。最终,你可能希望将它写入与APK文件相同的目录,并使用等效的名称(可能包括风味、构建类型等)。
注意:根据我的经验,这不会被proguard模板文件所否决(这是由评论者建议的另一个答案)。
更新:如果你有多种产品口味,那么这是一个更好的解决方案:https://stackoverflow.com/a/31116608/444761
因为我很笨,即使有人告诉我文件在哪里,我也会迷路:
cd StudioProjects/fooProject
find . -name "mapping.txt" | xargs less
我使用的是安卓Studio 2.2.2版本。对我来说,它位于以下位置:
调试: \ \ app \制造\输出映射\调试\ . txt
发布: \ \ app \制造\输出映射\ \ . txt
现在回答这个问题有点晚了,但以防有人需要我的答案。
去模糊化映射文件的位置:
ProGuard将文件保存在应用程序中 app /构建/输出/地图/味道/发布/ . txt
通常在调试模式下,你不需要映射文件,因为混淆通常是禁用的。 如果不是这种情况,那么在构建中确保。Gradle文件你有下面的代码调试变体。
debug {
minifyEnabled false
debuggable true
}
一些问题:
mapping.txt文件在每次使用ProGuard创建版本构建时都会被覆盖,因此在创建新版本之前首先备份该文件。这将有助于混淆堆栈跟踪从一个旧版本的应用程序。
除此之外,还有两种方法来混淆你的代码:
1. 将您的mapping.txt文件上传到谷歌play控制台:
当你在谷歌Play上发布你的应用时,你可以为你的APK的每个版本上传mapping.txt文件。然后谷歌播放将从用户报告的问题去混淆传入堆栈跟踪,以便您可以在谷歌播放控制台审查它们。
2. 使用本地sdk工具retrace.sh/retrace.bat:
有时你想要运行应用的发布版本(通过改变构建变体并运行它)来交叉检查和修复错误,这样它就不会在生产中发生(当发布到play-store时)。
要自己将混淆的堆栈跟踪转换为可读的堆栈跟踪,请使用retrace脚本(Windows上的retrace.bat;retrace.sh在Mac/Linux上)。
它位于<sdk-root>/tools/proguard/bin/目录下。
<sdk-root>是安装所有android库和sdk的地方。
该脚本使用mapping.txt文件和堆栈跟踪,生成一个新的可读堆栈跟踪。
命令语法:
retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]
例如:
retrace.bat -verbose mapping.txt obfuscated_trace.txt
我更喜欢本地版本的模糊处理,因为它非常方便地预先检查生产错误。
我希望这能有所帮助。
如果有人还在搜索mapping.txt:
在构建中启用minifyEnabled。Gradle必须设置为true
我使用的是Android Studio 4.2 Beta 4,标准设置是错误的。
如果minifyEnable设置为false,构建就不是“缩小”的,所以映射文件当然不是必要的,但google-play-console无论如何都会要求映射文件。
... 初学者很困惑
Proguard[About]输出位置
<module_name>/build/outputs/mapping/<buildType>/
//e.g.
/Users/alex/Desktop/MyProject/MyModule/build/outputs/mapping/releasefree