JNI本地文件中怎麼打印輸出到LOGCAT

JNI本地文件中怎麼打印輸出到LOGCAT
此問題困擾很久了,一直找不到答案,網上的答案卻是相當一致,不過都有問題 見http://www.ophonesdn.com/forum/viewthread.jsp?tid=1923&extra=page%3D2%26amp%3Bfilter%3D0%26amp%3Borderby%3Dlastpost%26amp%3Bascdesc%3DDESC
今天終於找到一個有用的啦,轉給大家看

----------------------------------------------------------------
Android NDK發佈後,java+C的編程方式成爲android上性能編程的首選。
但在C中調試困難,因此能使用logcat成爲必須的要求。


關於在Native代碼中使用logcat,網上有很多說法,大部分有所欠缺,有的根本是錯的。


要使用logcat,首先在代碼中要引入 log的頭文件。
#include <android/log.h>


然後你可以簡單的通過
__android_log_write(ANDROID_LOG_ERROR,"Tag","Message"); 方法向logcat輸出。
log 級別有很多  :
    ANDROID_LOG_UNKNOWN,
    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_log_write 方法undefined.
怎麼回事呢?關鍵是在設置編譯選項上面。
在Android.mk文件裏,可以指定一個LOCAL_LDLIBS的參數。如果不指定,那麼編譯的時候,只會引入默認的幾個重要的lib,比如libc之類的。
如果要用log,那就要把 liblog給引進來。
網上很多的寫法是 LOCAL_LDLIBS := -llog ,這在build static lib的時候沒什麼問題。如果是build shared lib,就會報個 cannot find -llog的錯誤。意思是找不到liblog.so這個庫文件。
因此需要改成 LOCAL_LDLIBS :=  -L$(SYSROOT)/usr/lib -llog 纔可以正常編譯。
其中-L參數是指定了搜索lib的路徑。
下面是一個android.mk的內容的例子:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := TestNdkNetwork
LOCAL_SRC_FILES := HttpConnection.cpp
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
include $(BUILD_SHARED_LIBRARY)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章