Android文档(http://developer.android.com/reference/android/util/Log.html)说:
除了在开发期间,不应将详细编译到应用程序中。调试日志在运行时编译但被剥离。始终保留错误,警告和信息日志
我刚做了一个测试。在我的活动中,我写道:
private static String test(String what) {
Log.e("test", "I am called with argument: " + what);
return what;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.v("test", "log level: " + test("v"));
Log.d("test", "log level: " + test("d"));
Log.i("test", "log level: " + test("i"));
Log.w("test", "log level: " + test("w"));
Log.e("test", "log level: " + test("e"));
}
我将我的项目导出为apk文件,然后我在手机上安装了这个apk。我在手机上运行这个应用程序,然后查看了日志。在那里,我看到函数测试被调用了五次,并且对Log.something函数的所有五次调用都导致其文本被写入日志。
Log.d调用在运行时是否真的被剥离了?
答案 0 :(得分:12)
没有。你必须自己做。您可以像这样制作自己的Log.d包装器:
public static void debug(String tag, String msg) {
if (BuildConfig.DEBUG) {
Log.d(tag, msg);
}
}
答案 1 :(得分:6)
此问题已报告here,并于2012年3月在ADT 17.0.0中提供了解决方案
添加了一项功能,允许您仅在调试模式下运行某些代码。 Builds现在生成一个名为BuildConfig的类,其中包含一个DEBUG常量,该常量根据您的构建类型自动设置。您可以检查代码中的(BuildConfig.DEBUG)常量以运行仅调试函数。
答案 2 :(得分:0)
删除日志的最佳方法可能是ProGuard
检查此问题 'Android Proguard, removing all Log statements and merging packages'