Android隐藏日志的最佳方法是啥? [复制]
Posted
技术标签:
【中文标题】Android隐藏日志的最佳方法是啥? [复制]【英文标题】:Android what's the best way to hide logs? [duplicate]Android隐藏日志的最佳方法是什么? [复制] 【发布时间】:2015-08-05 06:48:15 【问题描述】:所以.. 我正在使用 Log.d("", "");在我的应用程序的许多地方进行调试。 但我不希望这些日志出现在商店中。
现在为了将它们隐藏在商店版本中,我创建了一个 Constant.class 并在其中放置了一个名为 debugMode 的布尔值,并将我拥有的每个日志包装在这样的 if 语句中:
if (Constant.debugMode)
Log.d(TAG, "check123");
然后当我构建一个谷歌商店 apk 时,我将该布尔值更改为 true 而不是 false。
在我看来这有点笨拙,有没有更有效的方法来做到这一点?
【问题讨论】:
【参考方案1】:创建一个简单的记录器类,它具有公共静态方法和一个开关,以便仅为应用程序的调试版本启用日志。这是一个示例代码。
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 子句保存在一个地方,而不必担心它们。而且我不认为这样笨拙。
【讨论】:
【参考方案2】:我发现一个更简单的解决方案是忘记所有的 if 检查 这个地方,只需使用 ProGuard 去除任何 Log.d() 或 Log.v() 当我们调用 Ant 发布目标时调用方法。
这样,我们总是可以定期输出调试信息 构建并且不必为发布构建进行任何代码更改。 ProGuard 还可以对字节码进行多次传递以删除其他 不需要的语句,空块并且可以自动内联short 适当的方法。
例如,这是一个非常基本的 android ProGuard 配置:
-dontskipnonpubliclibraryclasses -不要混淆 -强制处理 -优化通过 5
-keep class * 扩展 android.app.Activity -assumenosideeffects 类 android.util.Log 公共静态 * d(...); 公共静态 * v(...);所以你可以把它保存到一个文件中,然后从 Ant 调用 ProGuard,传入你刚刚编译的 JAR 和 您正在使用的 Android 平台 JAR。
@REF:Remove all debug logging calls before publishing: are there tools to do this?
【讨论】:
以上是关于Android隐藏日志的最佳方法是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
android中检查互联网是不是持续活动的最佳方法是啥(当互联网不活动时)? [复制]