我应该在发布之前从我的代码中删除e.printStackTrace()

jax*_*jax 41 logging production android exception

我正在阅读Android发布文档,他们说要从我的代码中删除所有日志调用.我e.printStackTrace()在我的代码中有一些调用,可以打印为我程序正常运行的一部分(即,如果文件还不存在).

我还应该删除这些电话吗?

Chr*_*Orr 46

您不应该e.printStackTrace()直接使用- 这样做会将信息发送到Android日志,而不显示它来自哪个应用程序(日志标记).

正如其他人所提到的那样,继续抓住Exception问题,但使用其中一种android.util.Log方法来进行日志记录.您可以只记录消息,但不记录堆栈跟踪,或者使用详细日志记录来查找堆栈跟踪:

try {
    Object foo = null;
    foo.toString();
} catch (NullPointerException ex) {
    Log.w(LOG_TAG, "Foo didn't work: "+ ex.getMessage());
    Log.d(LOG_TAG, Util.stackTraceWriter(ex));
}
Run Code Online (Sandbox Code Playgroud)

您应该从生产版本中删除DEBUGVERBOSE记录消息.最简单的方法是使用ProGuardLog.[dv]从代码中删除调用.

  • 看起来好像`Util.stackTraceWriter`不再存在了.无论如何,这是[`Log.getStackTraceString`](http://developer.android.com/reference/android/util/Log.html#getStackTraceString%28java.lang.Throwable%29) (11认同)
  • @SoheilSetayeshi是的,"不允许"使用日志与建议列表之间存在差异:) Google Play将阻止可调试的应用程序(我相信),但它们不会阻止人们调试他们的应用程序生产. (3认同)