Android什么是隐藏日志的最佳方式?

时间:2015-05-23 07:58:37

标签: android logging

所以..我正在使用Log.d(“”,“”);在我的应用程序的许多地方进行debuging。 但是我不希望商店里有这些日志。

现在为了在商店版本中隐藏它们,我创建了一个Constant.class并在其中放置一个名为debugMode的布尔值,并在if语句中包含每个日志,如下所示:

if (Constant.debugMode) {
Log.d(TAG, "check123");
}

然后当我构建一个谷歌商店apk时,我将该布尔值更改为true而不是false。

在我看来,这有点笨拙,有没有更有效的方法呢?

2 个答案:

答案 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?