欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > 【QT】Qt中ADB的使用

【QT】Qt中ADB的使用

2024/10/24 4:39:58 来源:https://blog.csdn.net/weixin_62370184/article/details/140997454  浏览:    关键词:【QT】Qt中ADB的使用

一、使用场景

        在Windows中需要控制安卓设备,在命令行操作不方便,集成在一个应用程序中

二、ADB类

为了方便,写了一个ADB类,通过这个类方法来实现adb的各个命令

完整源码

adb.h

#ifndef ADB_H
#define ADB_H#include <QObject>
#include <QProcess>// ADB 类继承自 QObject,用于处理 ADB 相关操作
class ADB : public QObject
{Q_OBJECT
public:// 构造函数和析构函数explicit ADB(QObject *parent = nullptr);~ADB();// 方法声明:启动 ADB shell,获取 root 权限,执行 shell 命令,// 执行 ADB 命令,停止应用程序,退出 shellvoid startShell();void root();void executeShellCommand(const QString &command);void executeADBCommand();void executeStop();void exitShell();signals:// 信号:命令输出,命令错误,root 完成void commandOutput(const QString &output);void commandError(const QString &error);void rootCompleted(); // root 完成信号private slots:// 私有槽函数:读取标准输出和标准错误void readProcessOutput();void readProcessError();private:QProcess *process; // QProcess 对象,用于处理进程
};#endif // ADB_H

        

adb.c

#include "adb.h"
#include <QDebug>// 构造函数:初始化 QProcess 对象,并连接信号和槽
ADB::ADB(QObject *parent) : QObject(parent)
{process = new QProcess(this);connect(process, &QProcess::readyReadStandardOutput, this, &ADB::readProcessOutput);connect(process, &QProcess::readyReadStandardError, this, &ADB::readProcessError);
}// 析构函数:删除 QProcess 对象
ADB::~ADB()
{delete process;
}// 启动 ADB shell
void ADB::startShell()
{process->start("adb", QStringList() << "shell");
}// 获取 root 权限
void ADB::root()
{process->start("adb", QStringList() << "root");
}// 退出 ADB shell
void ADB::exitShell()
{if (process->state() == QProcess::Running) {executeShellCommand("exit");} else {qDebug() << "ADB shell is not running.";}
}// 执行 shell 命令
void ADB::executeShellCommand(const QString &command)
{if (process->state() == QProcess::Running) {process->write(command.toUtf8() + "\n");} else {qDebug() << "ADB shell is not running.";}
}// 读取标准输出并发射信号
void ADB::readProcessOutput()
{QString output = process->readAllStandardOutput();emit commandOutput(output);// 检查输出以确定 root 命令是否成功if (output.contains("restarting adbd as root")) {emit rootCompleted();}
}// 读取标准错误并发射信号
void ADB::readProcessError()
{QString error = process->readAllStandardError();emit commandError(error);
}// 执行 ADB 命令以启动应用程序
void ADB::executeADBCommand()
{// 设置命令和参数process->setProgram("adb");process->setArguments(QStringList() << "shell" << "am" << "start" << "-n" << "com.zhx.camera_zhx/.MainActivity");// 启动进程process->start();
}// 停止应用程序
void ADB::executeStop()
{if (process->state() == QProcess::Running) {process->terminate();process->waitForFinished();}QStringList arguments;arguments << "shell" << "am force-stop" << "com.zhx.camera_zhx";process->start("adb", arguments);
}

三、在 Qt 中使用 ADB

  • 创建 ADB 对象:在你的主窗口或其他类中创建 ADB 对象。

    ADB *adb = new ADB(this);
  • 启动 ADB shell:调用 startShell() 方法

    adb->startShell();
  • 获取 root 权限:调用 root() 方法。

    adb->root(); 
  • 执行 shell 命令:调用 executeShellCommand() 方法。

    adb->executeShellCommand("ls");
  • 执行 ADB 命令以启动应用程序:调用 executeADBCommand() 方法。

    adb->executeADBCommand(); 

  • 停止应用程序:调用 executeStop() 方法。

    adb->executeStop(); 

  • 退出 ADB shell:调用 exitShell() 方法。

    adb->exitShell();

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com