【发布时间】:2014-01-26 10:31:23
【问题描述】:
我在我的 Android 应用程序中使用 SLF4J 进行日志记录。在发布版本中,我不希望出现所有调试日志,因此我尝试使用 ProGuard 删除它们。但是日志语句仍然打印到 logcat 控制台,我自己无法弄清楚我做错了什么。这是我第一次使用 ProGuard,非常感谢任何帮助!谢谢!
MainActivity.java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MainActivity {
private static final Logger log = LoggerFactory
.getLogger(MainActivity.class.getSimpleName());
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
log.debug("Starting application.");
}
}
project-proguard.txt
-assumenosideeffects class org.slf4j.Logger {
public *** trace(...);
public *** debug(...);
}
project-proguard.txt(扩展为第一个版本不起作用)
-assumenosideeffects class org.slf4j.Logger {
public *** trace(...);
public *** debug(...);
}
-assumenosideeffects interface org.slf4j.Logger {
public *** trace(...);
public *** debug(...);
}
-assumenosideeffects class * implements org.slf4j.Logger {
public *** trace(...);
public *** debug(...);
}
-assumenosideeffects class * implements org.slf4j.Logger {
public void trace(java.lang.String);
public void trace(java.lang.String, java.lang.Object);
public void trace(java.lang.String, java.lang.Object, java.lang.Object);
public void trace(java.lang.String, java.lang.Object[]);
public void trace(java.lang.String, java.lang.Throwable);
public void trace(org.slf4j.Marker, java.lang.String);
public void trace(org.slf4j.Marker, java.lang.String, java.lang.Object);
public void trace(org.slf4j.Marker, java.lang.String, java.lang.Object, java.lang.Object);
public void trace(org.slf4j.Marker, java.lang.String, java.lang.Object[]);
public void trace(org.slf4j.Marker, java.lang.String, java.lang.Throwable);
public void debug(java.lang.String);
public void debug(java.lang.String, java.lang.Object);
public void debug(java.lang.String, java.lang.Object, java.lang.Object);
public void debug(java.lang.String, java.lang.Object[]);
public void debug(java.lang.String, java.lang.Throwable);
public void debug(org.slf4j.Marker, java.lang.String);
public void debug(org.slf4j.Marker, java.lang.String, java.lang.Object);
public void debug(org.slf4j.Marker, java.lang.String, java.lang.Object, java.lang.Object);
public void debug(org.slf4j.Marker, java.lang.String, java.lang.Object[]);
public void debug(org.slf4j.Marker, java.lang.String, java.lang.Throwable);
}
logcat - 调试构建
01-08 11:27:02.105 31142-31142/com.example.android D/MainActivity﹕ Starting application.
logcat - 发布版本(不应该存在!)
01-08 11:30:08.615 26483-26483/? D/MainActivity﹕ Starting application.
【问题讨论】:
-
长配置中唯一对我有用的是引用接口的部分。
标签: android logging proguard slf4j