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 映射文件名
无法在 Firebase 上上传 proguard 映射文件