ProGuard 不生成映射文件

Posted

技术标签:

【中文标题】ProGuard 不生成映射文件【英文标题】:ProGuard doesn't generate mapping file 【发布时间】:2016-12-11 13:34:32 【问题描述】:

我已经阅读了关于 SO 的多个主题,但找不到任何答案。我在这里有多个问题。让我描述一下:

我对 ProGuard 了解不多,但据我所知,它在一定程度上混淆了 android 代码。我的问题是我需要在某处启用它吗? minifyEnabled 在我的 Gradle 文件中是 false。这是否会完全禁用 ProGuard? 要对 Firebase 上的崩溃进行去混淆处理并获取堆栈跟踪,我需要映射文件。我在任何地方都找不到它。在 app/build/outputs 文件夹中,我只有

然后我在某处读到了 proguard-rules.pro 文件。它只有一些 cmets,没有代码。然后我把它放进去:-printmapping mapping.txt。然后再次生成签名的APK,仍然没有成功。我错过了什么?

编辑 1:如果我必须执行一些 adb 终端命令,请描述步骤。我以前从未使用过终端。

【问题讨论】:

【参考方案1】:

在您的 gradle 文件中您必须专门将 minifyEnabled 选项设置为 true。 这可以实现混淆。通过这样做,它还会应用您在 'proguard-rules.pro' 文件中定义的混淆规则。

buildTypes 
    release 
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    

您可以通过应用相应的命令打印所使用的映射种子(请注意,您需要两者都完全解码/理解加密代码)

-printseeds obfuscation/seeds.txt

-printmapping obfuscation/mapping.txt

一个基本的 proguard 文件的例子是:

-optimizationpasses 5
-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*

-verbose

-dump obfuscation/class_files.txt
-printseeds obfuscation/seeds.txt
-printusage obfuscation/unused.txt
-printmapping obfuscation/mapping.txt

问候,

【讨论】:

感谢您提供的详细信息。启用 Proguard 并生成签名的 apk 后出现错误。调试 APK 生成成功但未签名。这是 gradle 消息:db.tt/Xhm8C10T 我有点担心“找不到引用的类 java.awt.datatransfer.DataFlavor”的例子。似乎您应该避免混淆此代码。在我看来,你不应该混淆改造、okttp 等库。这是因为这样做没有意义。如果图书馆是公开的,即使你混淆了它,人们仍然可以从他们的网站上得到它。您应该只专注于混淆您的属性(例如您自己的代码) 好吧,你可以在整个 *** 中找到大量信息。尝试使用 -keep 命令将公共库排除在外。 使用-printmapping 确实会创建一个映射文件,但它始终是空的。【参考方案2】:

尝试检查设置 -> InstantRun...它必须被禁用:)

【讨论】:

得到你 91 :-D 享受!【参考方案3】:
    将 minifyEnabled 设置为 true。 构建生成 APK。 在输出文件夹中查找映射文件。[不要清理项目,否则它将消失]

【讨论】:

启用 Proguard 并生成签名的 apk 后出现错误。调试 APK 生成成功但未签名。这是 gradle 消息:db.tt/Xhm8C10T 将 -dontwarn 标志与您在项目中使用的所有库包一起使用,例如 proguard 规则中的“-dontwarn com.android.volley.**” 添加 -ignorewarning 有效!我的应用程序的功能应该没有问题,对吧? 你必须尽可能多地测试它。应该没有问题。 一点帮助。我的项目中有改造和毕加索库。我怎样才能将它们排除在混淆之外。我正在尝试这样的事情:'-keep class com.squareup.** *; ' 但它似乎不起作用。【参考方案4】:
    您需要将minifyEnabled 设置为true 才能启用Proguard。 对于某些库,您需要在proguard-rules.pro 中编写一些行,以使它们不会被 Proguard 混淆。请参阅此页面上的“配置 ProGuard”部分以了解为 Firebase 添加的内容:https://firebase.google.com/docs/database/android/start/

【讨论】:

启用 Proguard 并生成签名的 apk 后出现错误。调试 APK 生成成功但未签名。这是 gradle 消息:db.tt/Xhm8C10T

以上是关于ProGuard 不生成映射文件的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio中的proguard映射文件在哪里[重复]

如何在 gradle for Android 项目中更改 proguard 映射文件名

未生成 Crashlytics 映射文件

无法在 Firebase 上上传 proguard 映射文件

如果源没有更改,Proguard 是不是保证提供相同的映射?

通过将 proguard 规则映射文件上传到 google play 控制台去混淆生产 Android 错误