推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家: Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习
安卓开发,目前主要在windows下开发,虽然可以调试,但是有些库不好调试,只能经过打印来进行。
在上一章中《Qt android 开发环境搭建》中正常搭建环境,按F5就能对工程进行调试。或者如下图:
进行调试
安卓调试
安卓日志
adb 加入path
找到adb所在的路径,并将其加入PATH中。
adb未加入PATH中
加入PATH中
重新打开cmd窗口,adb正常
adb 查看日志
adb logcat
这样的日志,太多查看起来比较麻烦。
我们可以写入文件中,再通过工具来进行分析,查找。
adb logcat > log.log
使用notepad++ 打开log.log
将Qt调试信息输出到logcat中
CMakeLists.txt
# 需要添加这一句
target_link_libraries( android_vlc PRIVATE log )
log.h
#ifndef __LOG_H__
#ifndef __LOG_H__
#ifdef ANDROID
void installLogcatMessageHandler(const char *TAG);
#else
#define installLogcatMessageHandler(TAG)
#endif
#endif
log.cpp
#if defined(ANDROID)
#include "log.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
在main中使用
main.cpp
#include "log.h"
#include <QApplication>
#include <QDebug>
#include <QMutex>
int main()
{
QApplication a(argc, argv);
installLogcatMessageHandler("android_log");
qDebug() << "Debug";
qWarning() << "qWarning";
qInfo() << "qInfo";
qCritical() << "qCritical";
return a.exec();
}
测试
工程中使用
开发中,Qt android生成的可执行的工程包,是一个.so文件,最终打包成一个apk,这里如果工程中有多个.so 就不好去单独调试了,这里就更好的去使用日志打印输入。来跟进项目
参考文档
Qt on Android:将Qt调试信息输出到logcat中
QT for android编写的程序如何输出调试信息到android的log日志