2014-12-03 78 views
3

我以前曾经在Proguard指定的项目中使用过每个项目,最终都放弃了这个项目,因为它导致了许多问题,导致它无法使用,并导致资源耗尽。但是我目前的项目确实需要混淆才能使逆向工程变得更加困难。由于我使用的Android Studio和摇篮我启用了它在构建配置:如何获得一个简单的Android(Studio)Proguard配置工作

release { 
     runProguard true 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     signingConfig signingConfigs.release 
    } 

我再建一个发布版本,看看292页的警告和建设的失败。大多数情况如下,并涉及到库(改造,约达时间,Butterknife等)

Warning:butterknife.internal.ButterKnifeProcessor: can't find referenced class javax.lang.model.element.TypeElement 

OK,所以我认为它是优化掉库中的部分。所以,我想加入这样的线给proguard-rules.pro文件(在摇篮文件,并自动创建由Android工作室指定):

-keep class butterknife.internal.** { *; } 

没有区别。好的,所以我会尝试禁用所有缩小和优化,希望只能从混淆中受益(即使公认会减少混淆的好处)。我添加了这些行Proguard的配置文件:

-dontshrink 
-dontoptimize 

我重新编译,绝对没有什么变化,我还是留下了292个相当无意义的编译警告。现在我真的很困惑。

  • 我该如何让100%确定Proguard实际上是在阅读我的Proguard配置文件?还是使用它,但我设置了一个不正确的选项?
  • 什么可以添加到Proguard文件,以减少其工作只是混淆,所以我有一个Proguard启用构建配置,作为一个起点(没有打破我的应用程序),并没有优化掉任何代码。

我希望有任何帮助可以帮助减少我对Proguard的仇恨。

回答

0

在你的proguard配置文件中添加以下内容,这样它就不会让你的butterknife库变得麻木。

-keep class butterknife.** { *; } 
-dontwarn butterknife.internal.** 
-keep class **$$ViewInjector { *; } 

-keepclasseswithmembernames class * { 
    @butterknife.* <fields>; 
} 

-keepclasseswithmembernames class * { 
    @butterknife.* <methods>; 
} 

这里是同一个问题一个github上讨论环节,https://github.com/JakeWharton/butterknife/pull/117#issuecomment-51292624

+0

你的回答可以帮助在加上几行影响了身材,所以我知道正在使用ProGuard的配置文件。但我不想逐个修复每个库,我想禁用所有优化,删除代码,所以Proguard只会混淆代码。我尝试过使用你提到的方法(特别是 - 以前没有使用过的方法),所以添加“-dontwarn okio。**”这样的行可以让我解决构建警告并创建一个很棒的APK,但是APK以各种各样的方式崩溃,它并非没有Proguard。我需要停止Proguard删除代码。 – 2014-12-04 10:23:31

+0

看看Proguard手册,看起来像我需要的是保持一切的能力。我想从不删除任何代码的位置开始,只是优化混淆,但我不知道如何保留所有代码,似乎需要我单独地将每个类错误地删除,但这不是直截了当的。 – 2014-12-04 11:23:55

相关问题