【问题标题】:ProGuard doesn't generate mapping fileProGuard 不生成映射文件
【发布时间】: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 终端命令,请描述步骤。我以前从未使用过终端。

【问题讨论】:

    标签: android apk proguard


    【解决方案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 等库。这是因为这样做没有意义。如果图书馆是公开的,即使你混淆了它,人们仍然可以从他们的网站上得到它。您应该只专注于混淆您的属性(例如您自己的代码)
    • 好吧,你可以在整个 stackoverflow 中找到大量信息。尝试使用 -keep 命令将公共库排除在外。
    • 使用-printmapping 确实会创建一个映射文件,但它始终是空的。
    【解决方案2】:

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

    【讨论】:

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

    【讨论】:

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

    【讨论】:

    • 启用 Proguard 并生成签名的 apk 后出现错误。调试 APK 生成成功但未签名。这是 gradle 消息:db.tt/Xhm8C10T
    猜你喜欢
    • 2018-06-13
    • 2021-11-30
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多