NO IMAGE

    版權所有 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 ANDROID
void 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 的系列文章: