当前位置: 首页 > news >正文

windowsC++操作ADB

文章目录

    • 一、ADB基础
        • 1. 工作原理
        • 2. 安装与配置
    • 二、常用ADB指令分类
        • 1. 设备连接与管理
        • 2. 文件传输
        • 3. 应用管理
        • 4. 设备交互
        • 5. 系统信息
        • 6. 日志与调试
        • 7. 网络与端口转发
    • 三、高级用法
        • 1. 多设备管理
        • 2. 无线ADB连接
        • 3. 批量执行命令
        • 4. ADB脚本示例
    • 四、常见问题与解决方案
    • 五、注意事项
    • 六、进一步学习资源
    • 七、C++代码

在自动化生产过程中,可能会遇到各种各样的场景,比如需要通过软件取读写连在电脑上的安卓设备,那此时采用adb指令将是一种极为方便的方法,adb\adb指令、C++代码详细记录如下:

ADB(Android Debug Bridge)是一种功能强大的命令行工具,允许开发者与Android设备进行通信和交互。它是Android SDK的一部分,常用于调试应用程序、安装APK、传输文件以及执行设备命令。下面从多个方面详细介绍ADB及其指令:

一、ADB基础

1. 工作原理
  • ADB通过USB或Wi-Fi在计算机(客户端)和Android设备(守护进程adbd)之间建立通信桥梁。
  • 通信流程:客户端(如命令行)→ ADB服务器(本地进程)→ 设备上的ADB守护进程。
2. 安装与配置
  • 安装:通过Android SDK Platform-Tools安装,或直接下载独立的Platform-Tools包。
  • 配置环境变量:将platform-tools目录添加到系统PATH中,以便全局使用adb命令。
  • 安装教程网上大把的,这里就不赘述了,参考地址:https://blog.csdn.net/qq_44807940/article/details/140588328

二、常用ADB指令分类

1. 设备连接与管理
adb devices          # 列出所有连接的设备(包括模拟器)
adb kill-server      # 终止ADB服务器
adb start-server     # 启动ADB服务器
adb reconnect        # 重新连接设备
2. 文件传输
adb push <本地路径> <设备路径>  # 从电脑复制文件到设备
adb pull <设备路径> <本地路径>  # 从设备复制文件到电脑
adb shell ls <设备路径>        # 查看设备文件列表
3. 应用管理
adb install <APK路径>          # 安装APK
adb uninstall <包名>           # 卸载应用
adb shell pm list packages     # 列出所有安装的应用包名
adb shell pm clear <包名>      # 清除应用数据
4. 设备交互
adb shell input text "hello"   # 在设备上输入文本
adb shell input keyevent 26    # 按下电源键(26为电源键码)
adb shell input tap x y        # 点击屏幕坐标(x,y)
adb shell screencap <路径>     # 截图并保存到设备
adb shell screenrecord <路径>  # 录制屏幕(最长180秒)
5. 系统信息
adb shell getprop ro.product.model  # 获取设备型号
adb shell getprop ro.build.version.release  # 获取Android版本
adb shell dumpsys battery           # 获取电池信息
adb shell dumpsys wifi              # 获取Wi-Fi信息
adb reboot                          # 重启设备
6. 日志与调试
adb logcat                          # 查看系统日志
adb logcat -s <标签名>               # 过滤特定标签的日志
adb shell ps                        # 查看进程列表
adb shell top                       # 查看资源占用情况
7. 网络与端口转发
adb forward tcp:8080 tcp:8080       # 将本地端口8080转发到设备端口8080
adb reverse tcp:8080 tcp:8080       # 将设备端口8080转发到本地端口8080(Android 5.0+)
adb shell ifconfig                  # 查看网络配置

三、高级用法

1. 多设备管理

当连接多个设备时,使用-s <设备ID>指定目标设备:

adb -s emulator-5554 shell          # 对模拟器执行命令
adb -s 0123456789ABCDEF install app.apk  # 对特定设备安装APK
2. 无线ADB连接

需先通过USB连接设备,然后执行:

adb tcpip 5555                     # 开启设备的TCP/IP模式,监听5555端口
adb connect <设备IP>:5555          # 通过IP连接设备(断开USB后仍可通信)
3. 批量执行命令

使用adb shell结合循环或脚本批量操作:

adb shell "for i in $(seq 1 10); do input tap 500 500; done"  # 连续点击10次
4. ADB脚本示例
# 自动化安装并启动应用
adb install myapp.apk
adb shell am start -n com.example.app/.MainActivity

四、常见问题与解决方案

  1. 设备未被识别

    • 检查USB连接和驱动
    • 重启ADB服务器:adb kill-server && adb start-server
    • 确保设备开启USB调试模式
  2. 权限问题

    • 在设备上确认USB调试授权弹窗
    • 使用root权限:adb root(需设备已root)
  3. 无线连接失败

    • 确保设备和电脑在同一Wi-Fi网络
    • 检查防火墙设置
    • 尝试重新执行adb tcpip 5555adb connect

五、注意事项

  1. 数据安全:ADB可访问设备敏感数据,建议仅在受信任环境使用。
  2. 性能影响:长时间使用screenrecord可能导致设备发热。
  3. 兼容性:部分指令可能因设备型号或Android版本不同而有差异。

六、进一步学习资源

  • 官方文档:Android Developers - ADB
  • ADB命令速查表:可在线搜索或使用第三方工具(如ADBKeyBoard)提高效率。
  • ADB下载安装
    Windows版本: https://dl.google.com/android/repository/platform-tools-latest-windows.zip
    Mac版本:https://dl.google.com/android/repository/platform-tools-latest-windows.zip
    Linux版本:https://dl.google.com/android/repository/platform-tools-latest-linux.zip

通过掌握ADB指令,开发者可以大幅提升Android应用的调试、测试和部署效率。

七、C++代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>/*** 执行ADB命令并返回结果* @param command 要执行的ADB命令(不含"adb "前缀)* @param outputBuffer 用于存储命令输出的缓冲区* @param bufferSize 缓冲区大小* @return 成功返回0,失败返回-1*/
int executeAdbCommand(const char *command, char *outputBuffer, size_t bufferSize) {if (command == NULL || outputBuffer == NULL || bufferSize < 1) {errno = EINVAL;return -1;}// 构建完整的ADB命令char fullCommand[1024];_snprintf(fullCommand, sizeof(fullCommand), "adb %s", command);fullCommand[sizeof(fullCommand) - 1] = '\0'; // 确保字符串终止FILE *pPipe = _popen(fullCommand, "rt");if (pPipe == NULL) {fprintf(stderr, "Error: Failed to execute command (errno=%d)\n", errno);return -1;}// 初始化输出缓冲区outputBuffer[0] = '\0';// 读取命令输出char tempBuffer[256];while (fgets(tempBuffer, sizeof(tempBuffer), pPipe) != NULL) {size_t currentLen = strlen(outputBuffer);size_t lineLen = strlen(tempBuffer);// 检查是否有足够空间添加新行if (currentLen + lineLen + 1 >= bufferSize) {fprintf(stderr, "Warning: Output buffer is full, truncating output\n");break;}// 追加到输出缓冲区strncat(outputBuffer, tempBuffer, bufferSize - currentLen - 1);}// 关闭管道并获取退出码int exitCode = _pclose(pPipe);if (exitCode == -1) {fprintf(stderr, "Error: Failed to close pipe (errno=%d)\n", errno);return -1;}// 检查ADB命令是否成功执行(通常返回0表示成功)return (exitCode == 0) ? 0 : -1;
}int main(void)
{char output[2048];const char *adbCommands[] = {"devices","shell getprop ro.product.model","version","invalid-command"  // 测试失败情况};for (int i = 0; i < sizeof(adbCommands) / sizeof(adbCommands[0]); i++) {printf("Executing: adb %s\n", adbCommands[i]);printf("----------------------start------------------\n");if (executeAdbCommand(adbCommands[i], output, sizeof(output)) == 0){printf("Output:\n%s\n", output);printf("==0\n");} else{printf("Failed to execute command\n");printf("==-1\n");}printf("==================end======================\n\n");}return 0;
}

在这里插入图片描述

相关文章:

  • ansible进阶版01
  • js中的同步方法及异步方法
  • Unity引擎源码-物理系统详解-其一
  • 抗量子计算攻击的数据安全体系构建:从理论突破到工程实践
  • C# 通用OCR识别
  • 基于TI AM6442+FPGA解决方案,支持6网口,4路CAN,8个串口
  • CSS3 基础知识、原理及与CSS的区别
  • 洛谷 P3374 【模板】树状数组 1(树状数组解法)
  • Qt在统信UOS及银河麒麟Kylin系统中进行软件开发的环境配置,打包发布和注意事项
  • spark sql基本操作
  • 百度智能云千帆携手联想,共创MCP生态宇宙
  • 【计算机网络 第8版】谢希仁编著 第四章网络层 题型总结3 SDN OpenFlow
  • webpack重构优化
  • 运行Spark程序-在Idea中
  • PostgreSQL pg_dump 与 Oracle expdp 对比
  • Web 架构之攻击应急方案
  • 汉得 x 汇川联合动力|H-ZERO PaaS零衍平台,助力全新企业门户上线!
  • 【Git】合并和变基的区别
  • 三轴云台之减震和固定技术篇
  • Grok 3.5 跳票,ChatGPT 悄悄升级:GitHub 深度研究 + PDF 导出!
  • 习近平举行仪式欢迎巴西总统卢拉访华
  • 多家中小银行存款利率迈入“1时代”
  • 耿军强任陕西延安市领导,此前任陕西省公安厅机场公安局局长
  • 河北邯郸一酒店婚宴发生火灾:众人惊险逃生,酒店未买保险
  • 湖北宜昌:在青山绿水间解锁乡村振兴“密码”
  • 上海“世行对标改革”的税务样本:设立全国首个税务审判庭、制定首个税务行政复议简易程序