小编Sla*_*shG的帖子

如何使用ProGuard删除方法

inb4重复

我知道有很多关于如何使用ProGuard从应用程序中删除日志记录代码的问题/博客,我已经尝试过这些解决方案并且它们按照设计的方式工作.我的问题略有不同.在我的应用程序中,我没有使用默认的日志记录方法或System.out.println()直接从任何地方.相反,我有一个自定义方法调用System.out.println(),MyApplication.log()每次记录时我的应用程序调用此方法().我需要这种方法是有原因的.

我的public static void log()方法驻留在一个名为MyApplicationovercides默认Application类的类中.我从这里得到了这个ProGuard规则:

-assumenosideeffects class java.io.PrintStream {
     public void println(%);
     public void println(**);
}
Run Code Online (Sandbox Code Playgroud)

这成功地删除了System.out.println()包括来自的直接用法MyApplication.log().但是当我通过调整它来删除它来使用这个规则时MyApplication.log(),它不起作用:

-assumenosideeffects class changed.package.name.MyApplication {
     public static void log(...);
}
Run Code Online (Sandbox Code Playgroud)

有两个版本log():

  1. log(String)
  2. log(String, int)

他们都没有被删除.该方法被混淆m17739c(),我甚至(幼稚地)在规则中添加了此方法名称.它仍然无法正常工作.

我不相信-assumenosideeffects是专门为默认的日志记录方法设计的.我在这做错了什么?

java android proguard android-proguard

7
推荐指数
0
解决办法
850
查看次数

标签 统计

android ×1

android-proguard ×1

java ×1

proguard ×1