編輯:關於Android編程
在Java環境中我們使用JNI時可以使用printf函數打印,但是Android環境下使用JNI,printf函數就無效了,而我們使用IDE開發工具中的LogCat視圖以及Console視圖裡也沒有任何輸出。其實,Android NDK完全支持JNI本地日志調試。為了使用日志函數,我們可以按照如下步驟實現:
#include
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_LDLIBS += -llog LOCAL_MODULE := hello-jni LOCAL_SRC_FILES := hello-jni.c include $(BUILD_SHARED_LIBRARY)
通過日志API發送給logger模塊的每個日志條目都應該具有以下字段:
Priority:取值分別為verbose、debug、info、warning、error和fatal,表示信息的重要程度。
typedef enum android_LogPriority { ANDROID_LOG_UNKNOWN = 0, ANDROID_LOG_DEFAULT, ANDROID_LOG_VERBOSE, ANDROID_LOG_DEBUG, ANDROID_LOG_INFO, ANDROID_LOG_WARN, ANDROID_LOG_ERROR, ANDROID_LOG_FATAL, ANDROID_LOG_SILENT, } android_LogPriority;
Tag:標識產生日志信息的組件,Logcat和DDMS工具可以基於這個標簽值過濾日志信息。標簽值應盡可能小。
Message:用於存放實際日志信息。
android/log.h頭文件也聲明了一系列函數,這些函數主要用於原生代碼生成日志消息。
● _android_log_write:可用於生成一個簡單的字符串作為日志信息
_android_log_write(ANDROID_LOG_WARN,"hello-jni","warning log.");
● _android_log_print:可以用於生成一個格式化字符串作為日志消息。
_android_log_print(ANDROID_LOG_ERROR,"hello-jni","Failed with errno%d",erron);
● _android_log_vprint:除了參數傳遞方式外,其他功能與_android_log_print完全相同,_android_log_vprint函數用va_list傳遞附加參數,而_android_log_print函數中已連續參數的方式改為傳遞參數。
va_list args; va_start(args,format); _android_log_vprint(ANDROID_LOG_VERBOSS,"hello-jni",format,args);
● _android_log_assert:用於記錄斷言失敗,它不包括日志優先級,將所有日志記錄為fatal
if(0 != erron){ _android_log_assert("0!=errno","hello-jni","There is an errno"); }
案例如下:
hello-jni.c文件
#include#include #include jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz ) { int var = 0; var = 1; __android_log_print(ANDROID_LOG_INFO,"HelloJni","LOVE LOG"); __android_log_print(ANDROID_LOG_DEBUG,"HelloJni","var=%d",var); return (*env)->NewStringUTF(env, "I LOVE YOU UU! Compiled with ABI " ABI "."); }
android.mk文件
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_LDLIBS += -llog LOCAL_MODULE := hello-jni LOCAL_SRC_FILES := hello-jni.c include $(BUILD_SHARED_LIBRARY)
重新編譯後,運行項目,我們可以看到如下日志打印:
異步加載之使用多線程初次嘗試異步、異步,其實說白了就是多任務處理,也就是多線程執行,多線程那就會有各種問題,我們一步步來看,首先,我們創建一個class—&m
Android 活動條ActionBar的詳解圖一 圖二 圖三 圖四 圖五 ActionBar其提供的功能總結圖一使用ActionBar顯示選項菜單項
初學opengl ES,每一個教你在屏幕上貼圖的opengl版hello world都有這麼兩數組: static final float COORD[] = {
在本篇博客中,我們要實現在Android中“新建文件”和“讀取文件”: 目標界面: 在輸入文件名稱之後,輸入文件內容,點擊保存,可以保存成為一個文檔 He