在我的应用程序中,我使用类Cs
来执行日志记录部分。
它已经有一个DEBUG
字段,根据构建类型设置为true / false。
到目前为止,一切都运转良好,但我想稍微改进一下,所以我试图找到自动评论这些线的方法。这样可以避免因日志而出现的一些问题。 例如:
1. StringBuilder messages = getSomeMessages()
2. Cs.e(TAG, messages.toString());
当第2行被评论时,如果messages
为空,则应用程序不会崩溃。
另外,如果我在发布中删除这些行但是将它们保留在调试版本中,则很难从stacktrace中检测到错误,因为行号不再匹配。
我的问题是:有可能告诉Proguard评论所有以某些字符开头的行(在我的情况下为Cs)?
谢谢
答案 0 :(得分:0)
此外,如果我在发布中删除这些行但是将它们保留在调试版本中,则很难从stacktrace中检测到错误,因为行号将不再匹配。
对于初学者,您假设注释行将进入已编译的类/ dex文件is incorrect。这在调试和发布版本之间没有区别。
其次,通过优化和/或混淆,Proguard很可能会修改您的代码,使得行号不再与原始源匹配。这正是它生成映射文件(通常只是mapping.txt
)的原因:这样就可以对堆栈跟踪进行反模糊处理(或:retraced)。
当第2行被注释时,如果消息为空,则应用程序不会崩溃。
StringBuilder messages = getSomeMessages()
Cs.e(TAG, messages.toString());
正确。但是,如果您在改进代码及其稳健性之后,为什么不通过null
检查来保护日志?
例如:如果确实存在消息,则仅记录某些内容:
if (messages != null) Cs.e(TAG, messages.toString());
或者:记录一些没有消息的迹象:
Cs.e(TAG, messages != null ? messages.toString() : "<empty>");
我不确定什么样的记录器Cs
包装,但考虑利用Android自己的Log
类的功能。也就是说,如果您真的为了开发目的而记录错误,那么使用 Verbose 或 Debug 日志级别会更有意义。这些会被自动删除(在编译时和运行时分配),因此您不必担心在生成日志记录时意外生成异常。
或者,你也可以通过检查自动生成的BuildConfig.DEBUG
标志轻松地包装任何调试日志 - 听起来你已经在这样做了。