【发布时间】:2014-12-03 17:26:04
【问题描述】:
我之前参与过的每个项目都指定了 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 个相当无意义的编译警告。现在我真的很困惑。
- 如何才能 100% 确定 Proguard 确实在读取我的 Proguard 配置文件?还是它在使用它,但我设置了错误的选项?
- 我可以在 Proguard 文件中添加什么内容以减少其工作量,使其仅进行混淆处理,这样我就有了一个支持 Proguard 的构建配置,它可以作为起点(不会破坏我的应用程序)并且不会优化任何代码。
如果能帮助我减少对 Proguard 的仇恨,我将不胜感激。
【问题讨论】: