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.");

 

posted @ 2015-07-04 13:17  壬子木  阅读(264)  评论(0编辑  收藏  举报