使用混淆器删除日志不起作用

Remove logs using proguard doesn't work

我需要从我的发布应用程序类型中删除所有日志记录。我试过配置混淆器来为我做这件事。我的配置大部分与此处提供的配置相匹配:proguard doesn't remove logs。 我已将 proguard-android.txt 更改为 proguard-android-optimize.txt 但没有成功。在阅读了 Proguard 手册并检查了 :

的输出之后
-whyareyoukeeping class android.util.Log {
   public static boolean isLoggable(java.lang.String, int);
   public static int v(...);
   public static int i(...);
   public static int w(...);
   public static int d(...);
   public static int e(...);
   public static int wtf(...);
} 

了解到无法删除此内容是因为:

Explaining why classes and class members are being kept...
Printing usage to [...]...
android.util.Log
  is a library class.
android.util.Log: boolean isLoggable(java.lang.String,int)
  is a library method.
android.util.Log: int v(java.lang.String,java.lang.String)
  is a library method.
android.util.Log: int v(java.lang.String,java.lang.String,java.lang.Throwable)
  is a library method.
android.util.Log: int i(java.lang.String,java.lang.String)
  is a library method.
android.util.Log: int i(java.lang.String,java.lang.String,java.lang.Throwable)
  is a library method.
android.util.Log: int w(java.lang.String,java.lang.String)
  is a library method.
android.util.Log: int w(java.lang.String,java.lang.String,java.lang.Throwable)
  is a library method.
android.util.Log: int w(java.lang.String,java.lang.Throwable)
  is a library method.
android.util.Log: int d(java.lang.String,java.lang.String)
  is a library method.
android.util.Log: int d(java.lang.String,java.lang.String,java.lang.Throwable)
  is a library method.
android.util.Log: int e(java.lang.String,java.lang.String)
  is a library method.
android.util.Log: int e(java.lang.String,java.lang.String,java.lang.Throwable)
  is a library method.
android.util.Log: int wtf(java.lang.String,java.lang.String)
  is a library method.
android.util.Log: int wtf(java.lang.String,java.lang.Throwable)
  is a library method.
android.util.Log: int wtf(java.lang.String,java.lang.String,java.lang.Throwable)
  is a library method.

这可能是什么原因?也许其他一些 Proguard 选项?是否有任何其他选项可以强制删除日志?

您需要指定 ProGuard 应使用如下配置删除这些日志记录调用:

-assumenosideeffects class android.util.Log 
{
    public static int d(...);
    public static int v(...);
    public static int i(...);
    public static int e(...);
}

请记住,您需要启用优化才能真正删除这些调用。为此,请使用此默认配置:

proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')

在 Guardsquare 支持的帮助下,我已经能够找出问题所在。其中一个库在其 ProGuard 配置文件中包含 -dontoptimize。选项 -printconfiguration [filename]

有助于缩小此问题的范围

医生。参考 - https://www.guardsquare.com/en/products/proguard/manual/usage#generaloptions