標籤:qt on android qt logcat
著作權 foruok ,如需轉載敬請註明出處(http://blog.csdn.net/foruok)。
如果你在目標 Android 裝置上運行了 Qt on Android 應用,你可能希望看到程式輸出的日誌資訊。 Android SDK 中有 adb 工具,當你串連了目標裝置,可以使用 adb logcat 查看 Android 裝置上應用輸出的日誌。
先介紹一下 adb 工具的使用。一般我常用下列命令:
- adb logcat ,查看手機或其他裝置上輸出的所有日誌
- adb logcat -v time ,讓日誌帶時間資訊
- adb logcat -v time -s Tag ,只顯示指定標籤的日誌資訊,同時顯示日誌時間。比如 adb logcat -v time -s qnote ,只顯示標籤為 qnote 的日誌資訊;如果你想同時過濾多個標籤,可以用英文半形逗號分隔標籤,如 adb logcat -v time -s qnote,test 。
為了把日誌匯入 Android 系統的日誌系統(一個環形記憶體日誌系統),我寫了一個輔助函數,方便大家使用。
先看標頭檔 qDebug2Logcat.h :
#ifndef QDEBUG2LOGCAT_H#define QDEBUG2LOGCAT_H#ifdef ANDROIDvoid installLogcatMessageHandler(const char *TAG);#else#define installLogcatMessageHandler(TAG)#endif#endif // QDEBUG2LOGCAT_H
很簡單,我聲明了一個函數 installLogcatMessageHandler ,如果沒有定義 ANDROID 宏,它就是一個空宏,什麼也不幹;否則就安裝一個訊息過濾器,接管 Qt 輸出的訊息,轉寄到 Android 的日誌系統中。
看源檔案 qDebug2Logcat.cpp :
#if defined(ANDROID)#include "qDebug2Logcat.h"#include <android/log.h>#include <QDebug>#include <QByteArray>static const char *g_TAG = 0;static void messageOutput2Logcat(QtMsgType type, const QMessageLogContext &context, const QString &msg){ int prio = ANDROID_LOG_VERBOSE; QByteArray localMsg = msg.toLocal8Bit(); switch (type) { case QtDebugMsg: prio = ANDROID_LOG_DEBUG; break; case QtWarningMsg: prio = ANDROID_LOG_WARN; break; case QtCriticalMsg: prio = ANDROID_LOG_INFO; break; case QtFatalMsg: prio = ANDROID_LOG_FATAL; abort(); } __android_log_write(prio, g_TAG, localMsg.data());}void installLogcatMessageHandler(const char *TAG){ g_TAG = (TAG == 0 ? "QDebug" : TAG); qInstallMessageHandler(messageOutput2Logcat);}#endif
實現也很簡單,調用 qInstallMessageHandler 把 messageOutput2Logcat 設定為 Qt 應用的預設訊息處理器。 messageOutput2Logcat 函數則將 Qt 的調試訊息層級映射到 Android 的記錄層級上並調用 __android_log_write() 函數將日誌資訊寫入 Android 日誌系統。
你可以直接使用這兩個檔案,加入到你的項目中即可。然後在 main() 函數前包含 qDebug2Logcat.h 標頭檔,在 main() 函數體第一行加入下面的代碼:
installLogcatMessageHandler("yourLogTag");
好了,一切就緒了。
著作權 foruok ,如需轉載敬請註明出處(http://blog.csdn.net/foruok)。
我翻譯的大神 BogDan Vatra 的 Qt on Android 系列文章:
- Qt on Android Episode 1(翻譯)
- Qt on Android Episode 2(翻譯)
- Qt on Android Episode 3(翻譯)
- Qt on Android Episode 4(翻譯)
我的關於 Qt on Android 的系列文章:
- Windows下Qt 5.2 for Android開發入門
- Qt for Android 部署流程分析
- Qt for Android 編譯純C工程
- Windows下Qt for Android 編譯安卓C語言可執行程式
- Qt on Android:圖文詳解Hello World全過程