Android Java层,Native层,Lib层打印Log简介

说明: 这里我根据个人工作情况说明在各个层打印log。如有问题欢迎拍砖。

1. Java层打印log。

  • 这个比较简单Android有封装好的Log.java, 可以使用。
  • 例如:

    Log.d(String Tag, String msg);

  • 个人习惯: 单独写一个类包装一下:MLog.java:

    import android.util.Log;
    
    public class MLog {
        public final static boolean DEBUG = true; 
    
        public static void d(String tag, String msg) {
            if (DEBUG) {
                Log.d(tag, msg);
            }
        }
        ...
    }

2. Native 层打印log。

网络上很多资料:http://stackoverflow.com/questions/12159316/logging-values-of-variables-in-android-native-ndk

  • 步骤如下:

    1. Android.mk 中添加:

      LOCAL_LDLIBS :=-llog

    2. 在需要打印的log的地方使用:
    #include  <android/log.h>
    #define TAG    "DroidMage" // 这个是自定义的LOG的标识
    #define LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__) // 定义LOGD类型

     xxx_function() {

       LOGD("%s  hello world",  "MSG");
    }
  • NOTE: 这只是对__android_log_print() 函数做了包装而已 原型如下:

     /** 
     * int __android_log_print(int prio, const char *tag,  const char *fmt, ...)
     * 
     * ANDROID_LOG_DEBUG : 是在头文件定义的log level,类似与java层Log.d()打印Debug信息。
     * tag : char * 类型的字符串。
     * format : char* 格式化的字符串
     */
    // 例子:
     char * tag = "DroidMage";
     char * format = "%s";
     char * msg = "This is for test!";
     __android_log_print(ANDROID_LOG_DEBUG, tag, format, msg);
  • Android 中有 < cutils/log.h> 做好了封装:

#define LOG_TAG DroidMage  //一定要定义,原因是< log/log.h> 做了封装,没有定义则未NULL。

xxx_func() {
    //log 的Tag就是所定义LOG_TAG
    LOGD("%s", msg);
}

3. bionic层打印log(笔者做过系统开发的工作,有时需要调试lib层)

  • 参考源码:”/bionic/libc/bionic/private/libc_logging.cpp”

#include "private/libc_logging.h"


xxx_function() {

    //ANDROID_LOG_DEBUG: int 类型, 定义log level, 参考"/bionic/libc/bionic/private/libc_logging.h" 定义。
    __libc_format_log(ANDROID_LOG_DEBUG, tag, "%s", msg);
}

未完待续。。。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值