13

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 调用真的在运行时被剥离了吗?

4

3 回答 3

14

不,你必须自己做。您可以像这样制作自己的 Log.d 包装器:

public static void debug(String tag, String msg) {
    if (BuildConfig.DEBUG) {
        Log.d(tag, msg);
    }
}
于 2013-03-06T04:02:26.093 回答
6

此处报告了此问题,并于 2012 年 3 月在ADT 17.0.0中提供了解决方案

添加了一项功能,允许您仅在调试模式下运行某些代码。构建现在会生成一个名为 BuildConfig 的类,其中包含一个根据您的构建类型自动设置的 DEBUG 常量。您可以检查代码中的 (BuildConfig.DEBUG) 常量以运行仅调试功能。

于 2013-03-06T05:11:37.970 回答
0

删除日志的最佳方法可能是使用ProGuard实现

检查这个问题' Android Proguard,删除所有日志语句和合并包'

于 2014-01-28T15:07:56.093 回答