Android上传应用到市场时如何隐藏日志信息

3
我的应用程序中添加了很多用于调试的Log.i()语句。现在,如果要将这样的应用程序上传到市场:
  1. 这些日志应该被删除吗?如果是,是否有比手动删除更简单的方法?

  2. 如果不删除,那么当用户从市场安装后运行应用程序时,这些日志会出现吗?

(我尝试查看一些应用程序的日志,但我无法看到来自应用程序的任何日志。我只能看到 Android 管理器之类的 Android 日志。但我不知道为什么如果不从代码中删除,这些日志就不会显示)
2个回答

4
Preetha,日志将被保存在手机上,任何用户/开发人员都可以通过安装应用程序(如Catlog)来查看它们,即使不使用adb!这是一个问题,因为您可能会向用户/其他开发人员提供不必要的,有时是机密的数据。
解决此问题的简单方法是?
a. 使用Proguard自动阻止所有日志记录,在this stackoverflow thread中获取更多信息。
在这里,您可以在Proguard的字节码级别自动阻止所有日志记录。
-assumenosideeffects class android.util.Log {
    public static int v(...);
}

例如,上述代码将删除任何冗长的日志记录,more in this thread b. 我在所有的日志中使用 if(DEBUG) Log.i,这样只需更改布尔值DEBUG,我就可以打开/关闭所有日志
c. 一种简单的解决方案:将所有Log.i替换为//Log.i :)

非常感谢您的回答。还有一个问题。如果我已经打开了Eclipse,并且将我的手机连接到电脑上,我是否需要安装像Catlog这样的应用程序才能在Logcat中看到日志呢? - png
作为开发人员,您不需要安装Catlog,只需在设备连接到PC时在Eclipse中查看logcat中的所有日志即可。如果您的设备未连接到PC并且想要在设备本身上查看日志,则可以在设备上安装Catlog应用程序,然后在其中查看日志。 - Soham
使用这种方法会影响匹配堆栈跟踪时的行号吗?我看到其他帖子中有这个解决方案,有些人说它只影响字节码,因此行号保持不变,而另一些人则说它不会。你能确认一下吗? - Tony Chan

2

是的,一个好的做法是在测试期间删除所有调用日志方法的内容。

当用户下载应用程序时,会向他/她显示您所创建的所有日志。

您可以创建一个静态类和该类中的静态方法

每当您想要进行日志调用时,只需通过ClassName.Method从任何地方调用该方法即可。

一旦完成测试,只需在静态类中编写的静态方法的定义中注释掉即可。


这通常是我维护日志的方式。 - Some one Some where

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接