android 共用函数,log函数封装,让WIN32和android ndk共用相同的log函数,方便调试

_log.h

#ifdef __cplusplus

extern "C" {

#endif

typedef int (* funcPtr)(const char * format, ...);

typedef struct _Log

{

funcPtr d;

funcPtr i;

funcPtr e;

}LOG;

extern const LOG Log;

#ifdef __cplusplus

};

#endif

_log.c

#include

#include

#include

#include "_log.h"

#define BUFFER_SIZE (1024 * 2)

static char db_buffer[BUFFER_SIZE];

#ifdef WIN32

#define vsnprintf _vsnprintf

#define LOGDprintf

#define LOGIprintf

#define LOGWprintf

#define LOGEprintf

#define LOGFprintf

#else // #ifdef WIN32

#include

#include // 这个是输出LOG所用到的函数所在的路径

#define LOG_TAG "JNILOG" // 这个是自定义的LOG的标识

#undef LOG // 取消默认的LOG

//Android.mk中要添加LOCAL_LDLIBS := -llog

//# 如果不包含这一句的话,会提示:__android_log_print 未定义

#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__) // 定义LOG类型

#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) // 定义LOG类型

#define LOGW(...) __android_log_print(ANDROID_LOG_WARN,LOG_TAG,__VA_ARGS__) // 定义LOG类型

#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) // 定义LOG类型

#define LOGF(...) __android_log_print(ANDROID_LOG_FATAL,LOG_TAG,__VA_ARGS__) // 定义LOG类型

#endif //#ifdef WIN32

#define db_print(__tag, __p, __format) \

do { \

int n = 0; \

va_list args; \

va_start(args, __format); \

vsnprintf(db_buffer, BUFFER_SIZE - 1, __format, args); \

db_buffer[BUFFER_SIZE - 1] = 0; \

__p(__tag);\

n = __p(db_buffer); \

va_end(args); \

return n; \

} while (0)

static int log_d(const char * format, ...)

{

#ifdef _DEBUG

db_print("debug: ", LOGD, format);

#else

return 0;

#endif

}

static int log_i(const char * format, ...)

{

db_print("info : ", LOGI, format);

}

static int log_e(const char * format, ...)

{

db_print("error: ", LOGE, format);

}

const LOG Log =

{

log_d,

log_i,

log_e,

};

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := init

LOCAL_SRC_FILES := _log.c

LOCAL_LDLIBS := -llog

include $(BUILD_SHARED_LIBRARY)

WIN32下测试

main.c

#include "_log.h"

int main(int argc, char * argv[])

{

Log.d("dddddddd\n");

Log.i("iiiiiiii\n");

Log.e("eeeeeeee\n");

return 0;

}

运行结果

debug: dddddddd

info : iiiiiiii

error: eeeeeeee

注意:Android.mk中要添加LOCAL_LDLIBS := -llog# 如果不包含这一句的话,会提示:__android_log_print 未定义

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值