我之前曾在Proguard指定的每个项目中最终放弃了它,因为它导致了许多问题,导致无法使用,资源大量流失。但我目前的项目确实需要混淆,以使逆向工程更加困难。当我使用Android Studio和Gradle时,我在构建配置中启用了它:
release {
runProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
然后我构建了一个发布版本,看到了292个警告和构建失败。大多数如下并与图书馆(Retrofit,Joda Time,Butterknife等)有关
Warning:butterknife.internal.ButterKnifeProcessor: can't find referenced class javax.lang.model.element.TypeElement
好的,所以我认为它正在优化部分库。所以我尝试将这样的行添加到proguard-rules.pro文件中(在Gradle文件中指定并由Android Studio自动创建):
-keep class butterknife.internal.** { *; }
没有区别。好的,所以我会尝试禁用所有收缩和优化,希望只能从混淆中获益(即使不可否认的是一点点混淆效益)。我将这些行添加到Proguard配置文件中:
-dontshrink
-dontoptimize
我重新编译,绝对没有任何变化,我仍然留下292个无意义的编译警告。现在我真的很困惑。
我很感激帮助减少我对Proguard的仇恨。
答案 0 :(得分:0)
将以下内容放入您的proguard配置中,以便它不会破坏您的刀库。
-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