代码之家  ›  专栏  ›  技术社区  ›  Blundell

发布时android.util.log-我能做/不做什么

  •  8
  • Blundell  · 技术社区  · 14 年前

    我有很多日志。我在我最近做的一个应用程序的代码中记录了.d日志.e。我将要发布这个应用程序,我不希望人们在将手机插入亚行时看到它,但我希望它在那里用于我自己的调试。

    我想扩展android.util.log并在其中设置一个布尔值开关,这样我可以在发布日志时关闭它,在开发时打开它,但是这个类是最终的,我是否缺少了一个技巧?

    我真的不想把我的代码全部删除,如果最坏的情况出现,我可以对//日志执行ctrl+h全局替换日志,但这确实是一个糟糕的答案。

    我也意识到log.d在运行时会被去掉,但它仍然在运行(会损失一点性能),所以不运行这将是一个额外的奖励。

    是的,所以基本上我正在寻找一种方法来打开和关闭我的调试程序,这也可以让我以后使它成为一个首选项或一些东西,如果人们想查看或帮助,并发送它。

    你们为此做了什么?

    谢谢

    3 回复  |  直到 8 年前
        1
  •  16
  •   straya    8 年前

    正如屋大维指出的,插入一个测井常数是最好的方法。如果启用调试,则为此编写一个调用原始日志记录方法的新类不是一个好主意。

    良好实践:

    if (C.D) { Log.d(C.T, "your log text here " + foo + bar); }
    

    不良做法:

    YourLog.d("your log text here " + foo + bar);
    
    // and in YourLog.java's d() method:
    ... { if (debugging) Log.d(tag, text); }
    

    如果C类的常数d为假,则第一个解非常快。如果您有用于创建日志记录字符串的复杂字符串操作,则在禁用调试时不会执行这些操作。如果d为false,编译器甚至可以在编译时删除这些操作,这可能导致零运行时开销。第二个(坏的)解决方案总是构建整个字符串并调用一个方法,这是您不需要的开销。

    一般来说,第一个解决方案是最好的。是的,我真的调用了类和成员C、D和T(常量/调试/标记),这是因为在输入过程中性能的原因。;-)

        2
  •  2
  •   Fred Grott    14 年前

    模糊使用proguard作为proguard有命令用来过滤它当你写proguard配置文件的时候..很好,很简单,它工作。

        3
  •  2
  •   Octavian Helm    14 年前

    一般来说,最好不要将它们以任何方式包含在您的分发代码中,因为它们需要进行处理,这只会导致不必要的电池耗尽。

    您可以在应用程序中的某个地方设置一个布尔值来指示代码的开发或发布版本,并且有很多if块来检查标志和执行日志代码,或者没有,但这只会导致代码膨胀。

    一旦你不再需要它们,你就应该把它们扔掉。