在我之前工作的所有项目中,如果指定了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实际上正在读取我的Proguard配置文件?或者它是否正在使用它,但我设置了错误的选项?
- 我可以添加什么到Proguard文件中来将其工作仅限于混淆,以便我有一个启用了Proguard的构建配置作为起点(而不会破坏我的应用程序),并且不会优化任何代码。
我希望能得到任何帮助,以帮助我减少对Proguard的厌恶。