7

我知道使用 proguard 您可以从发布版本中删除 java Log.d 调试语句 https://stackoverflow.com/a/13327603/1527440

但是有没有办法从 NDK C/C++ 代码中删除日志调试语句。

我正在使用定义语句在 NDK 中调用它们

#define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__) 
4

1 回答 1

11

使用NDEBUG宏。或者你真的可以做#ifdef任何事情。

#ifdef NDEBUG

#define LOGD(...)

#else

#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)

#endif

然后对于代码:

void f()
{
    LOGD("About to do some stuff");
    doSomeStuff();
}

编译器将看到(大致 -如果它们是宏ANDROID_LOG_DEBUGLOG_TAG也将被替换为它们的值):

void f()
{
    __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,"About to do some stuff");
    doSomeStuff();
}

何时NDEBUG未定义并将看到:

void f()
{
    ;
    doSomeStuff();
}

何时NDEBUG定义。

于 2013-07-30T01:00:15.513 回答