2016-08-05 92 views
5

我已阅读过多个线程,但无法找到任何答案。我在这里有很多问题。让我描述一下:ProGuard不会生成映射文件

  • 我对ProGuard了解不多,但根据我的信息,它在某种程度上混淆了Android代码。我的问题是我需要在某个地方启用它吗? minifyEnabled在我的Gradle文件中是false。这是否完全禁用ProGuard?
  • 为了消除Firebase上的崩溃并获取堆栈跟踪,我需要映射文件。我无法在任何地方找到它。在应用程序/生成/输出文件夹,我只有

Folder

然后我读的地方约proguard-rules.pro文件。它只是有一些评论,没有代码。然后我把它放在它里面:-printmapping mapping.txt。然后再次生成签名APK,仍然没有成功。我错过了什么?

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

回答

7

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

buildTypes { 
    release { 
     minifyEnabled false 
     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 

问候,

+0

谢谢你的细节。启用Proguard并生成签名的apk后出现错误。调试APK虽然成功但未签名。这里是gradle消息:https://db.tt/Xhm8C10T –

+1

我有点担心'无法找到引用类java.awt.datatransfer.DataFlavor'的例子。看起来像你应该保持这个代码混淆。在我看来,你不应该像改造,okttp等混淆图书馆。这是因为这样做没有意义。如果图书馆是公开的,即使你混淆了它,人们仍然可以从他们的网站获得它。你应该只关注混淆你的财产(如你自己的代码) –

+0

我应该做一些新的线程? –

1
  1. 您需要将minifyEnabled设置为true以启用Proguard
  2. 对于一些图书馆,你需要在proguard-rules.pro内写一些行,让他们不被Proguard混淆。此页面上看到 “配置ProGuard的” 部分,以了解在为Firebase补充:https://firebase.google.com/docs/database/android/start/
+0

我使ProGuard,并将生成签署APK后得到一个错误。调试APK虽然成功但未签名。以下是gradle消息:https://db.tt/Xhm8C10T –

0
  1. 设置minifyEnabled为true。
  2. Build生成APK。
  3. 查找在映射文件的输出文件夹。[不干净的项目或将消失]
+0

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

+0

使用-dontwarn标志,在你的项目中使用的所有库软件包,如proguard规则中的“-dontwarn com.android.volley。**” –

+0

添加 - ignorewarning工作!应用程序的功能不应该有问题,对吧? –

2

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

+0

这对我有用! –