2014-02-17 40 views
3

開啓/關閉本地日誌貓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宏,所以我在尋找另一種方法。有什麼想法嗎?

+2

使用函數而不是宏。或者在其中使用一個帶有if語句的多行宏,並讓jni函數設置一個布爾變量的值。 –

+0

@GabeSechan你能回答一個例子嗎?因爲我不知道該怎麼做。 – R4j

回答

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是重要的,否則每個文件包括頭將定義其自己的變量它們將不被設置正確。

+0

它像一個魅力。你是男人。非常感謝你。 – R4j