如何在运行时打开/关闭ndk中的本机日志cat

时间:2014-02-17 03:23:23

标签: android c++ android-ndk

我使用此代码段来打开或关闭登录

   #define DEBUG 1

   #if DEBUG
   #include <android/log.h>
   #define  LOG_TAG    "native_log"
   #define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
   #else
   #  define  LOGD(...)  do {} while (0) // do nothing
   #endif

   // use it
   LOGD("%s : %d","value", val);

通过打开/关闭DEBUG标志,它工作正常。问题是我想在java端运行时这样做。我想要的是这样:

   // java 
   private native void nativeSetDebug(boolean flag);

   // jni
   JNIEXPORT void JNICALL Java_com_my_package_Native_nativeSetDebug(JNIEnv *env, jobject thiz, jboolean flag){
        // what should I do in this method?
   }

由于在源文件甚至编译之前,c ++中的宏被它们的值替换为预处理器,所以我正在寻找另一种方法。有什么想法吗?

1 个答案:

答案 0 :(得分:5)

宏文件

extern bool useDebug;
#include <android/log.h>
#define  LOG_TAG    "native_log"
#define  LOGD(...)  if(useDebug){__android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)}

C档

bool useDebug = true;
JNIEXPORT void JNICALL Java_com_my_package_Native_nativeSetDebug(JNIEnv *env, jobject thiz, jboolean flag){
    useDebug = flag;

}

extern很重要,否则包含标题的每个文件都会定义自己的变量,并且它们将无法正确设置。