如何使用 Proguard 或其他工具删除未使用的重写 toString() 方法?

How to remove unused overridden toString() methods with Proguard or other tools?

我的 Android 项目和我的 Java 应用程序服务器项目中都有一些共享代码。在服务器项目中,我覆盖了一些 toString() 日志记录方法,这些方法在 Android 项目中不需要。然后我用 ProGuard 优化了我的 Android 项目中的代码。但是当我反编译生成的A​​PKclasses.dex时,toString()方法仍然存在。如果我不删除它们,它可能会保留为易于逆向工程的缺陷。
我试过 -assumenosideeffects 选项,但它不起作用。有没有办法通过编辑 ProGuard 配置或 Android 项目配置来删除这些 toString() 方法?

没有。 Proguard 不会删除引用它的代码。

您最好的选择是 "force" 编译器删除以下行: 使用 BuildConfig.DEBUG 或自定义常量并将调用包装在其中。

如果编译器找到计算结果为 false 的常量表达式,它可能会丢弃嵌套代码。

没有简单的用法检测,任何 Object.toString 都可以调用您的 class' toString。

用您自己的编译时注释标记每一个有启发性的 toString,例如

@DevelopOnly
@Override
public String toString() { ...

然后使用注释处理器 (apt) 删除方法。 那里有很多很好的例子。

收集 AbstractProcessor 中的 classes 并使用 ASM 或其他库删除这些方法。