我的 Android 项目和我的 Java 应用服务器项目中都有一些共享代码。在服务器项目中,我覆盖了一些用于记录的toString()
方法,这些方法在Android项目中是不需要的。然后我使用 ProGuard 优化了Android项目中的代码。但是当我反编译生成的 APK 的 classes.dex 时,toString()
方法仍然存在。如果我不删除它,它仍然可以作为容易逆向工程的缺陷。
我尝试了-assumenosideeffects
选项,但它不起作用。有没有办法通过编辑 ProGuard 配置或 Android 项目配置来删除这些toString()
方法?
答案 0 :(得分:2)
没有简单的用法检测,任何Object.toString都可以调用你的类'toString。
使用您自己的编译时注释标记每个有启发性的toString
,例如
@DevelopOnly
@Override
public String toString() { ...
然后使用注释处理器(apt)删除方法。 那里有许多不错的例子。
收集AbstractProcessor中的类并使用 ASM 或其他库删除方法。
答案 1 :(得分:0)
没有。 Proguard不会删除引用它的代码。
你最好的选择是“强制”编译器删除行: 使用BuildConfig.DEBUG或自定义常量并将调用包装在其中。
如果编译器找到一个计算结果为false的常量表达式,它可能会删除嵌套代码。