Qt on Android:將Qt調試資訊輸出到logcat中

來源:互聯網
上載者:User

標籤: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全過程
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.