版权所有 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全过程

更多相关文章

  1. android的SDK----google中的翻译
  2. Android(安卓)NDK 使用第一步,编译c文件,声明jni并调用。
  3. android 电容屏(三):驱动调试之驱动程序分析篇
  4. android SDK2.3 更新改动翻译
  5. Android应用程序进程启动过程(前篇)
  6. Android应用程序请求SurfaceFlinger服务创建Surface的过程分析
  7. ANDROID音频系统散记之一:A2dpAudioInterface && Android(安卓)Au
  8. android - 为安全而设计 - 3 - 开发文档翻译
  9. android SDK2.3 更新改动翻译

随机推荐

  1. android 从矢量图SVG获取位图bitmap
  2. Android(安卓)Property实现介绍
  3. 2018-07-23
  4. KBinding 使用kotlin实现的Android(安卓)
  5. Android(安卓)可随意拖动的悬浮窗体
  6. Android(安卓)day_11 (四种对话框)
  7. 自定义对话框
  8. android gps经纬度实时更新,获取卫星数量
  9. android textView描边
  10. Android(安卓)Socket(TCP/IP) 通信