感谢Proguard的优化功能,我现在能够进行与我的代码一样多的调试日志记录 - 对于生产我只是让它删除所有这些不必要的代码。
这很好并且有效(使用最新的Proguard版本)。
但是:在我走这条路之前,我的final static boolean DEBUG
常量已经“保护”了我Log.d
/ Log.v
个来电。为了确保我没有忘记禁用签名生产apk,我只是在我的UI主要活动中有一个容易可见的添加,在某个角落里放了一个丑陋的文本“DEBUG IS ON”。
所以,在制作我的最终apk时,我所要做的只是安装一次 - 如果我忘了关闭调试模式,我会被提醒。
现在,Proguard正在完成删除调试日志调用的工作:我如何在我的应用程序中检测到并控制一个声明“调试已开启”的UI元素? 有什么想法吗?
我的第一次尝试是尝试这个:
boolean loggingEnabled = false;
Log.d(TAG, (loggingEnabled = true) ? "Logging test" : "");
我希望Proguard也会删除作业loggingEnabled=true
- 但我低估了Proguard。它删除了对Log.d
的调用,但仍然执行了分配......:)
答案 0 :(得分:0)
你可以做一些事情:
grep -E '(android/util/|de/ub0r/android/logg0r/)Log.[dv]' */build/proguard/release/dump.txt
Log.d()
和Log.v()
。我构建了一个简单的包装库,使它更方便:
https://github.com/felixb/ub0rlogg0r
---编辑---
要检查您的日志是否被剥离,请执行以下操作:
public static boolean sHasDebugCalls = false;
添加到Log
。sHasDebugCalls = true
添加到所有Log.d()
和Log.v()
方法。Log.d(TAG, "has debug logs")
。Log.sHasDebugCalls
以确定DEBUG提醒的可见性。