Android中C/C++的日志打印

1、对于很多Android开发人员来说,Android的标准日志打印已经使用的非常习惯,如果在调试C/C++时使用的是printf或者cout这种方式打印日志,那查找起来会非常不舒服,为了使自己舒服起来,还是有必要使用android标准的日志方式打印日志的。先看一下效果:

Android中C/C++的日志打印_第1张图片

2、新建一个deleteFile.cpp文件,导入android标准日志打印的头文件,并且通过宏定义简化日志的打印方式,具体实现如下。

#ifndef _DELETE_FILE
#define _DELETE_FILE

#include 
#include 
#include 

#define LOG_TAG "JPEG_JNI"
#define DEBUG
#define ANDROID_PLATFORM

#ifdef DEBUG
	#ifdef ANDROID_PLATFORM
		#define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__))
		#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__))
		#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__))
		#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__))


	#else
		#define LOGD(fmt, ...) printf(fmt"\n", ##__VA_ARGS__)
		#define LOGI(fmt, ...) printf(fmt"\n", ##__VA_ARGS__)
		#define LOGW(fmt, ...) printf(fmt"\n", ##__VA_ARGS__)
		#define LOGE(fmt, ...) printf(fmt"\n", ##__VA_ARGS__)
	#endif
#else
	#define LOGD(...);
	#define LOGI(...);
	#define LOGW(...);
	#define LOGE(...);
#endif


int main(int argc, char **argv)
{
	int num = 10;
	char* name = "hello world";
	printf("start------------------\n");
	LOGI("[%s(L:%d)] num = %d\n", __FUNCTION__, __LINE__, num);
	LOGW("name = %s\n", name);
	LOGD("end------------------\n");

	return 0;
}

#endif

3、编写Android.mk文件,这个文件的编写很简单,关键点是要加入跟日志相关的动态库liblog libutils,如下:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:= deleteFile.cpp
LOCAL_MODULE:= deletenavi
LOCAL_SHARED_LIBRARIES := liblog libutils
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog

include $(BUILD_EXECUTABLE)

Android中C/C++的日志打印_第2张图片 

3、将项目拷贝到Android系统的packages/apps目录下编译,编译完后生产deletenavi镜像文件。

Android中C/C++的日志打印_第3张图片

4、将编译出来的deletenavi文件push到设备中的/system/bin目录,并且chmod 755 /system/bin/deletenavi赋755的权限,然后执行就会出现步骤1中的效果。

 

你可能感兴趣的:(C/C++,android)