使用混淆器删除日志不起作用
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
我需要从我的发布应用程序类型中删除所有日志记录。我试过配置混淆器来为我做这件事。我的配置大部分与此处提供的配置相匹配: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