【问题标题】:Where does Android Studio save the ProGuard mapping file?Android Studio 在哪里保存 ProGuard 映射文件?
【发布时间】:2014-11-01 16:41:37
【问题描述】:

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

我不确定它是否不起作用,或者我只是忘记了文件路径,而我的强制 Google/Stack Overflow 搜索没有回答这个问题

【问题讨论】:

标签: android android-studio apk proguard


【解决方案1】:

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

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

【讨论】:

  • 更多关于生成文件和路径的信息:developer.android.com/studio/build/shrink-code.html
  • 如果您的 Instant Run 已启用,您可能无法看到映射文件。禁用 Instant Run 并重新构建。
  • 更新到 Gradle 6.2.2/Gradle Plugin 3.6.1 后,我们的路径发生了变化。 /app/build/outputs/mapping/brandExampleEnvProductionRelease/mapping.txt/app/build/outputs/mapping/brandExampleEnvIntegrationBeta/mapping.txt 是新路径。
  • 更新:从 AS 4.1.1 、Gradle 插件 4.0.2 、Gradle 6.1.1 开始,您需要有 minifyEnabled true 才能在 build/outputs/mapping/<FLAVOUR>/mapping.txt 中获取 mapping.txt
  • 如何在bitrise.yml文件中添加这个路径?
【解决方案2】:

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

【讨论】:

  • 'build/outputs/mapping/release/mapping.txt'
  • 是的,它非常适合 android studio 2.3.2
  • app/build/outputs/mapping/release/mapping.txt bc 有一个单独的构建文件夹不包含映射文件...
【解决方案3】:

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

要实现这一点,请将其放入您的 proguard-rules.pro 文件中:

-printmapping mapping.txt

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

注意:根据我的经验,这没有被 proguard 模板文件否决(这是由评论者向另一个 answer 建议的)。

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

【讨论】:

  • 这比我的解决方案好,就像你说的那样,你可以将它置于版本控制之下。
  • 为什么要对这个版本进行版本控制?您需要为每个单独发布的 APK 使用它,因为它依赖于构建。因为您必须从源代码中单独上传/签入这样的 apk,实际上不需要在源代码 VCS 中进行检查!?
  • @Denny1989 不确定您的意思。我构建了一个 APK 并将其存储在版本控制之外。我必须将映射文件保存在某处。我可以将它与 APK 一起存储,但我发现版本控制更简洁。但是,我每个项目只有一个发布 APK,所以 YMMV。
【解决方案4】:

我发现它没有生成,所以我将它添加到规则文件中

-printmapping build/outputs/mapping/release/mapping.txt

【讨论】:

  • 我发现打印映射被我正在使用的模板 proguard 文件否决了!
  • 这有效并为我生成了所有 proguard 输出文件。
  • 仍然没有映射目录。也许是因为 V8 现在忽略了 progurad?如何用 V8 生成它?
【解决方案5】:

现在回答这个问题已经很晚了,但以防万一有人需要我的回答。

要反混淆的映射文件的位置:

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-store 时)。

要自己将混淆的堆栈跟踪转换为可读的,请使用回溯脚本(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

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

希望对你有帮助。

【讨论】:

    【解决方案6】:

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

    【讨论】:

      【解决方案7】:

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

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

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

      【讨论】:

        【解决方案8】:

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

        cd StudioProjects/fooProject
        find . -name "mapping.txt" | xargs less
        

        【讨论】:

          【解决方案9】:

          如果有人还在搜索mapping.txt:

          build.gradle 中的 minifyEnabled 必须设置为 true

          我使用的是 Android Studio 4.2 Beta 4,标准设置是错误的。

          如果 minifyEnable 设置为 false,则构建不会“缩小”,因此当然不需要映射文件,但 google-play-console 无论如何都会要求提供映射文件。

          ...对于初学者来说非常混乱

          【讨论】:

            【解决方案10】:

            Proguard[About] 输出位于

            <module_name>/build/outputs/mapping/<buildType>/
            //e.g.
            /Users/alex/Desktop/MyProject/MyModule/build/outputs/mapping/releasefree
            

            【讨论】:

              猜你喜欢
              • 2017-04-04
              • 2015-10-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-09-19
              • 2016-01-08
              • 2015-12-14
              相关资源
              最近更新 更多