Android Studio在哪里保存ProGuard映射文件?


180

在Android Studio中,在编译签名的APK后在哪里生成ProGuard映射文件?

我不确定它是否无法正常工作,或者我只是忘记了文件路径,我的强制性Google / Stack Overflow搜索未回答此问题


1
正是在这里正式解释 firebase.google.com/docs/crash/...
Jayakrishnan下午

3
@JayakrishnanPM很高兴看到3年后Google熟悉了它。
CQM

Answers:


270

它应该位于build/outputs/proguard/release/mapping.txt您的应用程序模块的目录中。

在最新版本的ProGuard和Android Studio中,该文件位于build/outputs/mapping/release/mapping.txt


5
有关生成的文件和路径的更多信息:developer.android.com/studio/build/shrink-code.html
Helton Isac,

如果启用了“ 即时运行”,则可能看不到映射文件。禁用即时运行并重新构建。
Faizan Mubasher

1
在更新Gradle 6.2.2 / Gradle插件3.6.1之后,路径对我们而言已更改。/app/build/outputs/mapping/brandExampleEnvProductionRelease/mapping.txt /app/build/outputs/mapping/brandExampleEnvIntegrationBeta/mapping.txt是新的道路。
卡斯滕·哈格曼

75

对我来说,他们在 'build/outputs/mapping/release'


16
'构建/输出/映射/释放/的mapping.txt'
aleb

1
是的,它非常适合android studio 2.3.2
Subho

1
app / build / outputs / mapping / release / mapping.txt bc中有一个单独的构建文件夹,其中不包含映射文件...
NukeouT

39

我发现将proguard配置为将mapping.txt文件写入build/目录树之外的某个位置更为干净,这样可以更方便地将其检入版本控制中。

为此,请将其放入您的proguard-rules.pro文件中:

-printmapping mapping.txt

这(很可能)会将其放置在与proguard-rules.pro文件相同的目录中。最终,您可能希望将其写入与APK文件相同的目录,并使用等效名称(其中可能包括风味,构建类型等)。

注意:根据我的经验,proguard模板文件并不能解决这个问题(注释者在此处建议了另一个答案)。

更新:如果您有多种产品口味,那么这是一个更好的解决方案:https : //stackoverflow.com/a/31116608/444761


1
这比我的解决方案要好,就像您说的那样,然后可以将其置于版本控制下。
Clive Jefferies 2015年

您为什么要对此版本进行版本控制?您需要单独发行的每个APK,因为它依赖于构建。因为您必须单独从源上传/签入这样的apk,所以实际上没有必要在源VCS中对其进行检查!?
Denny1989

@ Denny1989不确定您的意思。我建立一个APK并将其存储在版本控制之外。我必须将映射文件保存在某处。我可以将其与APK一起存储,但是我发现它可以更干净地进行版本控制。但是,每个项目只有一个发行版APK,所以YMMV。
2015年


16

回答这个问题还为时已晚,以防万一有人需要我的回答。

要模糊处理的映射文件的位置:

ProGuard将文件保存在应用程序 app / build / outputs / mapping / FLAVOR / release / mapping.txt中

通常,在调试模式下,不需要映射文件,因为通常会禁用混淆功能。如果不是这种情况,请确保在build.gradle文件中,您具有以下用于调试变量的代码。

debug {
    minifyEnabled false
    debuggable true
}

一些陷阱:

每次使用ProGuard创建发布版本时,mapping.txt文件都会被覆盖,因此在创建新版本之前,请先对该文件进行备份。这将有助于从较旧版本的应用中混淆堆栈跟踪。

除此之外,还有两种混淆代码的方法:

1.将您的mapping.txt文件上传到Google Play控制台:

在Google Play上发布应用程序时,您可以上传每个APK版本的mapping.txt文件。然后,Google Play将对用户报告的问题中的传入堆栈跟踪进行模糊处理,以便您可以在Google Play控制台中对其进行检查。

2.使用本地sdk工具retrace.sh/retrace.bat:

有时您想运行应用程序的发行版(通过将构建变体更改为发行并运行)来交叉检查并修复错误,以使其在生产中不会发生(发行到Play商店时)。

要将混淆后的堆栈跟踪自己转换为可读的堆栈,请使用retrace脚本(在Windows上为retrace.bat;在Mac / Linux上为retrace.sh)。

它位于<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

我更喜欢本地版本的模糊处理,因为它可以很方便地预先检查生产错误。

希望对您有所帮助。


12

我正在使用Android Studio 2.2.2版本。对我来说,它位于以下位置:

对于调试: \app\build\outputs\mapping\debug\mapping.txt

发布: \app\build\outputs\mapping\release\mapping.txt


9

在此处输入图片说明

它在图片中-您将在映射文件夹中找到它:


2

因为即使有人告诉我文件在哪里,我也很傻并且迷路:

cd StudioProjects/fooProject
find . -name "mapping.txt" | xargs less
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.