Log.d and Log.v for Android

 

http://blog.csdn.net/chb2000/article/details/6598361

 

 

 Android 开发文档中说明Log.d和Log.v只有在开发版本中输出,在Release版本中无输出。那么这个功能是如何实现的呢?Android中Log.d和Log.v在Java和Native Code有不同的实现,需要分别说明。

1. native code中实现

    我们知道C/C++版本编译的时候会有release/debug 编译参数可以选择,所以在native code中可以根据不同的编译宏开关参数实现。

#ifndef LOGV
#if LOG_NDEBUG
#define LOGV(...)   ((void)0)
#else
#define LOGV(...) ((void)LOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__))
#endif
#endif

2. Java代码中实现

Java的编译器就没有C/C++编译宏参数的功能,所以只能通过最原始的方法,写两个不同实现文件,在Make File 中根据编译参数不同进行COPY源代码的动作。大家可以在frameworks/base/Android.mk中查找实现方法。

其实在Java代码中,如果使用直接使用Log.v的方式输入trace,那么无论是Debug版本还是Release版本都还是会有Log输出的。文档所讲的,在Release版本中Verbose是不输出,在Android原始代码中使用下面的方式实现。

 if (Config.LOGV) Log.v(TAG, "<<< Releasing cursor " + this);

Config.LOGV的最值是最终是根据ConfigBuildFlags.java文件,而ConfigBuildFlags.java是在Android.mk中进行控制的。

 

# Include a different set of source files when building a debug build.
# TODO: Maybe build these into a separate .jar and put it on the classpath
#       in front of framework.jar.
# NOTE: Do not use this as an example; this is a very special situation.
#       Do not modify LOCAL_SRC_FILES based on any variable other
#       than TARGET_BUILD_TYPE, otherwise builds can become inconsistent.
ifeq ($(TARGET_BUILD_TYPE),debug)
  LOCAL_SRC_FILES += $(call find-other-java-files,core/config/debug)
else
  LOCAL_SRC_FILES += $(call find-other-java-files,core/config/ndebug)
endif

 

即使在Android2.2之后有增加Slog.java这样的类,在实现Log.v的控制的时候也是采用了Config.LOGV来做判断条件。由于每次写输出Log的时候都需要加上这样的判断,还真是有点痛苦哦。是否可以将Log.java 和 Slog.java进行下面的优化。

 

  public static int v(String tag, String msg) {

       if (Config.LOGV) 
        return Log.println_native(Log.LOG_ID_SYSTEM, Log.VERBOSE, tag, msg);

       else 

       return 0;
    }

    public static int v(String tag, String msg, Throwable tr) {

        if (Config.LOGV) 
        return Log.println_native(Log.LOG_ID_SYSTEM, Log.VERBOSE, tag,
                msg + '\n' + Log.getStackTraceString(tr));

      else

       return 0;
    }

 

posted @ 2015-12-16 20:22  terryc  阅读(309)  评论(0编辑  收藏  举报