1. 程式人生 > 實用技巧 >Android中C/C++的日誌列印

Android中C/C++的日誌列印

1、對於很多Android開發人員來說,Android的標準日誌列印已經使用的非常習慣,如果在除錯C/C++時使用的是printf或者cout這種方式列印日誌,那查詢起來會非常不舒服,為了使自己舒服起來,還是有必要使用android標準的日誌方式列印日誌的。先看一下效果:

2、新建一個deleteFile.cpp檔案,匯入android標準日誌列印的標頭檔案<android/log.h>,並且通過巨集定義簡化日誌的列印方式,具體實現如下。

#ifndef _DELETE_FILE
#define _DELETE_FILE
 
#include <stdio.h>
#include <stdbool.h>
#include <android/log.h>
 
#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)

  

3、將專案拷貝到Android系統的packages/apps目錄下編譯,編譯完後生產deletenavi映象檔案。

4、將編譯出來的deletenavi檔案push到裝置中的/system/bin目錄,並且chmod 755 /system/bin/deletenavi賦755的許可權,然後執行就會出現步驟1中的效果。