ADB介绍
GitHub: linkedbyte
Android Debug Bridge(ADB)是一种功能强大的命令行工具,它可以让开发者和设备进行通信。ADB 是由三个部分组成:PC上的 adb client、adb server 和设备上的 adb daemon。这三部分构成了一个多连接的设计,即一台PC可以连接多个设备,一台设备也可以连接多个PC。
当启动 adb 客户端时,它会首先检查 adb 服务端进程是否在运行。如果没有运行,它会启动服务端进程。adb 服务端在启动时,会绑定到本地的 TCP 5037 端口,并监听从 adb 客户端发来的命令——所有的 adb 客户端都使用 5037 端口与 adb 服务端通信。
然后,adb 服务端会扫描所有 5555 到 5585 范围内的奇数端口来定位所有的模拟器或设备,并与之建立连接。一旦 adb 服务端找到了 adb daemon(守护进程),它将建立一个到该端口的连接。这样,开发者就可以使用 adb 命令来控制和访问模拟器或设备了。
设备上的 adb daemon 是一个后台进程,它在 Android 设备或模拟器系统中运行。它的作用是连接 adb 服务器,并且为运行在主机上的客户端提供服务。
投屏软件使用到的ADB命令
-
adb devices -l
- 功能:列出当前连接到计算机的所有 Android 设备或模拟器的详细信息。
- 解释:
adb devices
命令用于检查是否有设备或模拟器连接到计算机。添加-l
选项可以提供更详细的信息,例如设备的型号或状态。这对于开发者在调试时确认设备连接非常有用。
-
adb push
- 功能:将计算机上的文件或目录复制到连接的 Android 设备上。
- 解释:使用
adb push
命令,开发者可以将本地计算机上的文件或目录推送到 Android 设备上的指定位置。这对于将测试数据、配置文件或其他资源部署到设备上非常有用。 - 用法:
adb push <本地路径> <设备路径>
-
adb reverse
- 功能:在 Android 设备与计算机之间设置端口转发。
- 解释:
adb reverse
允许开发者将 Android 设备上的某个端口映射到计算机上的端口,从而实现两者之间的通信。这对于在开发过程中需要在设备和计算机之间共享数据或进行调试的应用程序非常有用。 - 用法:
adb reverse <设备端口> <计算机端口>
-
adb shell app_process
- 功能:在 Android 设备的 shell 中以指定权限运行 Java 应用程序。
- 解释:
app_process
是 Android 系统上的一个原生程序,它是 APP 进程的主入口点。通过adb shell
使用app_process
,开发者可以在设备上以特定用户权限(通常是高权限)运行 Java 程序。这对于需要执行系统级操作或测试应用程序在不同权限环境下的行为非常有用。 - 用法:通常涉及更复杂的命令行参数和 Java 类路径设置,但基本形式是在
adb shell
内调用app_process
并传递相应的参数。
使用QProcess执行adb命令
首先,确保你的 Qt 项目包含了必要的头文件,并且链接了相应的 Qt 模块(通常是 core
)。
#include <QCoreApplication>
#include <QProcess>
#include <QDebug>
void runAdbDevices() {
QProcess process;
QString program = "adb";
QStringList arguments;
// 执行 adb devices -l
arguments << "devices" << "-l";
process.start(program, arguments);
process.waitForFinished();
QString output = QString(process.readAllStandardOutput());
qDebug() << "adb devices -l output:" << output;
}
void runAdbPush(const QString &localFilePath,