androidso包中的log.i怎么屏蔽
时间: 2024-03-06 18:46:37 浏览: 129
如果您想要屏蔽Android so库中的log.i,可以使用以下方法:
1. 使用NDK编译so库时,可以添加`-DNDEBUG`选项到编译命令中。例如:
```
ndk-build NDK_DEBUG=0 //添加NDK_DEBUG=0选项
```
这将禁用所有`LOGI`,`LOGD`和`LOGV`输出。
2. 在代码中添加条件编译。例如:
```cpp
#ifndef NDEBUG
LOGI("这是一个测试日志");
#endif
```
这将只在非调试版本中禁用log.i日志。
3. 如果您无法重新编译so库,您可以通过hook库函数来屏蔽log.i。例如,您可以使用`MSHookFunction`函数来替换log.i函数:
```cpp
#include <android/log.h>
#include <substrate.h>
typedef int (*log_i_t)(const char* tag, const char* fmt, ...);
int new_log_i(const char* tag, const char* fmt, ...) {
if (strcmp(tag, "INFER_NDK") == 0) {
return 0; //屏蔽tag为"INFER_NDK"的log.i
}
va_list ap;
va_start(ap, fmt);
int ret = __android_log_vprint(ANDROID_LOG_INFO, tag, fmt, ap);
va_end(ap);
return ret;
}
void (*orig_log_i)(const char* tag, const char* fmt, ...) = NULL;
MSInitialize {
orig_log_i = (log_i_t) dlsym(RTLD_DEFAULT, "__android_log_print");
if (orig_log_i != NULL) {
MSHookFunction((void*) orig_log_i, (void*) new_log_i, NULL);
}
}
```
上述代码使用`MSHookFunction`函数替换了log.i函数,并在新的log.i函数中屏蔽了tag为"INFER_NDK"的日志。
阅读全文