所以..我正在使用Log.d(“”,“”);在我的应用程序的许多地方进行debuging。 但是我不希望商店里有这些日志。
现在为了在商店版本中隐藏它们,我创建了一个Constant.class并在其中放置一个名为debugMode的布尔值,并在if语句中包含每个日志,如下所示:
if (Constant.debugMode) {
Log.d(TAG, "check123");
}
然后当我构建一个谷歌商店apk时,我将该布尔值更改为true而不是false。
在我看来,这有点笨拙,有没有更有效的方法呢?答案 0 :(得分:1)
创建一个具有公共静态方法和swich的简单记录器类,以便仅为应用程序的调试版本启用日志。这是一个示例代码。
public class Logger {
public static final boolean D = BuildConfig.DEBUG;
public static void LogInfo(String TAG, String msg) {
if (D) {
Log.i(TAG, msg);
}
}
public static void LogWarrning(String TAG, String msg) {
if (D) {
Log.w(TAG, msg);
}
}
public static void LogDebug(String TAG, String msg) {
if (D) {
Log.d(TAG, msg);
}
}
public static void LogError(String TAG, String msg) {
if (D) {
Log.e(TAG, msg);
}
}
}
用法
Logger.LogDebug("Test", "Example");
通过这种方式,您可以将if子句保留在一个位置,而不必担心它们。我也不认为这样笨拙。
答案 1 :(得分:0)
我发现一个更容易的解决方案是忘记所有if检查 这个地方,只需使用ProGuard去除任何Log.d()或Log.v() 我们调用Ant释放目标时调用方法。
这样,我们总是将调试信息输出为常规 构建并且不必为发布版本进行任何代码更改。 ProGuard还可以对字节码执行多次传递以删除其他字节码 不需要的语句,空块,可以自动内联短 适当的方法。
例如,这是Android的一个非常基本的ProGuard配置:
-dontskipnonpubliclibraryclasses -dontobfuscate -forceprocessing - 优化通过5
-keep class *扩展android.app.Activity -assumenosideeffects类android.util.Log { public static * d(...); public static * v(...);所以你将它保存到一个文件,然后从Ant调用ProGuard,传入你刚刚编译的JAR和 您正在使用的Android平台JAR。
@REF:Remove all debug logging calls before publishing: are there tools to do this?