问题描述
我知道使用ProGuard,你可以删除发行版本的Java Log.d调试语句
http://stackoverflow.com/a/13327603/1527440
但是,有没有办法去除NDK C / C ++ code日志调试语句。
我使用的是定义语句来调用它们NDK
的#define LOGD(...)__android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__ VA_ARGS__)
使用 NDEBUG
宏。或者你可以真正的 #IFDEF
上的任何东西。
#IFDEF NDEBUG#定义LOGD(...)#其他#定义LOGD(...)__android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__ VA_ARGS__)#万一
然后为code:
无效F()
{
LOGD(关于做一些东西);
doSomeStuff();
}
编译器会看到(约 - ANDROID_LOG_DEBUG
和 LOG_TAG
也将与他们的价值观,如果他们是宏替换):
无效F()
{
__android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,关于做一些东西);
doSomeStuff();
}
在 NDEBUG
是不确定的,会看到:
无效F()
{
;
doSomeStuff();
}
在 NDEBUG
定义。
I know using proguard you can remove java Log.d debug statements from release versionshttp://stackoverflow.com/a/13327603/1527440
But is there way to remove log debug statements from NDK C/C++ code.
I am using a define statement to call them in NDK
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
Use the NDEBUG
macro. Or you could really #ifdef
on anything.
#ifdef NDEBUG
#define LOGD(...)
#else
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
#endif
Then for the code:
void f()
{
LOGD("About to do some stuff");
doSomeStuff();
}
The compiler will see (roughly - ANDROID_LOG_DEBUG
and LOG_TAG
will also be replaced with their values if they are macros):
void f()
{
__android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,"About to do some stuff");
doSomeStuff();
}
when NDEBUG
is undefined and will see:
void f()
{
;
doSomeStuff();
}
when NDEBUG
is defined.
这篇关于NDK如何删除发布上记录调试声明的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!