NDK 基本日志框架
在 Android.mk 中添加
1 # 定义日志标签 2 MY_LOG_TAG := \"hello-jni" 3 4 # 定义基于构建类型的默认日志等级 5 ifeq ($(APP_OPTIIM),release) 6 MY_LOG_LEVEL := MY_LOG_LEVEL_ERROR 7 else 8 MY_LOG_LEVEL := MY_LOG_LEVEL_VERBOSE 9 endif 10 11 # 追加编译标志 12 #LOCAL_CFLAGS += -DMY_LOG_TAG=$(MY_LOG_TAG) 13 #LOCAL_CFLAGS += -DMY_LOG_LEVEL=$(MY_LOG_LEVEL) 14 15 # 动态链接日志库 16 LOCAL_LDLIBS += -llog
NDK 基本日志框架 my_log.h
1 #pragma once 2 /** 3 * NDK 的基本日志框架 4 * 5 * @Author 6 */ 7 8 #include <android/log.h> 9 10 #define MY_LOG_LEVEL_VERBOSE 1 11 #define MY_LOG_LEVEL_DEBUG 2 12 #define MY_LOG_LEVEL_INFO 3 13 #define MY_LOG_LEVEL_WARNING 4 14 #define MY_LOG_LEVEL_ERROR 5 15 #define MY_LOG_LEVEL_FATAL 6 16 #define MY_LOG_LEVEL_SILENT 7 17 18 #ifndef MY_LOG_TAG 19 # define MY_LOG_TAG __FILE__ 20 #endif 21 22 #ifndef MY_LOG_LEVEL 23 # define MY_LOG_LEVEL MY_LOG_LEVEL_VERBOSE 24 #endif 25 26 #define MY_LOG_NOOP (void) 0 27 28 #define MY_LOG_PRINT(level,fmt,...)\ 29 __android_log_print(level, MY_LOG_TAG, "(%s:%u) %s: " fmt, \ 30 __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__) 31 32 #if MY_LOG_LEVEL_VERBOSE >= MY_LOG_LEVEL 33 # define MY_LOG_VERBOSE(fmt,...) \ 34 MY_LOG_PRINT(ANDROID_LOG_VERBOSE, fmt, ##__VA_ARGS__) 35 #else 36 # define MY_LOG_VERBOSE(...) MY_LOG_NOOP 37 #endif 38 39 #if MY_LOG_LEVEL_DEBUG >= MY_LOG_LEVEL 40 # define MY_LOG_DEBUG(fmt,...) \ 41 MY_LOG_PRINT(ANDROID_LOG_DEBUG, fmt, ##__VA_ARGS__) 42 #else 43 # define MY_LOG_DEBUG(...) MY_LOG_NOOP 44 #endif 45 46 #if MY_LOG_LEVEL_INFO >= MY_LOG_LEVEL 47 # define MY_LOG_INFO(fmt,...) \ 48 MY_LOG_PRINT(ANDROID_LOG_INFO, fmt, ##__VA_ARGS__) 49 #else 50 # define MY_LOG_INFO(...) MY_LOG_NOOP 51 #endif 52 53 #if MY_LOG_LEVEL_WARNING >= MY_LOG_LEVEL 54 # define MY_LOG_WARNING(fmt,...) \ 55 MY_LOG_PRINT(ANDROID_LOG_WARNING, fmt, ##__VA_ARGS__) 56 #else 57 # define MY_LOG_WARNING(...) MY_LOG_NOOP 58 #endif 59 60 #if MY_LOG_LEVEL_ERROR >= MY_LOG_LEVEL 61 # define MY_LOG_ERROR(fmt,...) \ 62 MY_LOG_PRINT(ANDROID_LOG_ERROR, fmt, ##__VA_ARGS__) 63 #else 64 # define MY_LOG_ERROR(...) MY_LOG_NOOP 65 #endif 66 67 #if MY_LOG_LEVEL_FATAL >= MY_LOG_LEVEL 68 # define MY_LOG_FATAL(fmt,...) \ 69 MY_LOG_PRINT(ANDROID_LOG_FATAL, fmt, ##__VA_ARGS__) 70 #else 71 # define MY_LOG_FATAL(...) MY_LOG_NOOP 72 #endif 73 74 #if MY_LOG_LEVEL_FATAL >= MY_LOG_LEVEL 75 # define MY_LOG_ASSERT(expression, fmt, ...) \ 76 if(!(expression)) \ 77 { \ 78 __android_log_assert(#expression, MY_LOG_TAG, \ 79 fmt, ##__VA_ARGS__); \ 80 } 81 #else 82 # define MY_LOG_ASSERT(...) MY_LOG_NOOP 83 #endif
在原生函数中添加日志声明语句
1 MY_LOG_VERBOSE("The stringFromJNI is called."); 2 MY_LOG_DEBUG("env = %p thiz = %p", env, thiz); 3 MY_LOG_ASSERT(0 != env, "JNIEnv cannot be NULL"); 4 MY_LOG_INFO("Returning a new atring.");