如何使用adb来实现自动化脚本

在移动自动化领域,ADB(Android Debug Bridge)一直是最核心的底层工具之一。它允许开发者通过命令行对 Android 设备进行深度控制,包括点击、滑动、启动应用、执行 Shell 命令等操作。在冰狐 JavaScript 脚本引擎中集成了完整的 ADB 模块,使得用户无需依赖外部环境,即可在脚本中直接调用 ADB 功能,实现稳定高效的自动化任务。(建议使用Shizuku来开启adb功能,不需要连接手机和电脑)

本文将详细介绍如何使用内置的 ADB API,并提供一个完整的实战 Demo,帮助开发者快速上手。

一、冰狐平台 ADB 模块简介

冰狐平台提供的 adb 模块封装了常用的 ADB 操作,所有接口均为同步或异步安全设计,适用于脚本自动化场景。主要功能包括:

  • adb.init():初始化 ADB 连接(通常用于连接本地设备)
  • adb.connect(host, port):连接远程 ADB 服务(如云手机)
  • adb.click(x, y):在屏幕坐标 (x, y) 处点击
  • adb.swipe(x1, y1, x2, y2, duration):从 (x1,y1) 滑动到 (x2,y2)
  • adb.home() / adb.back() / adb.recentApps():模拟系统按键
  • adb.execCmd(cmd):执行任意 ADB Shell 命令
  • adb.close():关闭 ADB 连接

⚠️ 注意:使用 ADB 功能前,需确保设备已开启 USB 调试 或已通过网络 ADB 授权。在冰狐平台中,若设备通过 Shizuku 或 root 权限运行,部分 ADB 功能可绕过调试限制。

二、使用前提与权限说明

在冰狐平台中使用 ADB 模块,需满足以下条件之一:

  1. 设备已开启 USB 调试 ,并通过 adb connect 连接;
  2. 设备安装 Shizuku 并授权 ,此时可通过 shizuku 模块间接调用 ADB 命令;
  3. 设备已 Root ,可直接使用 root 模块替代部分 ADB 功能。

本文示例基于 本地设备已开启 USB 调试 的场景,使用 adb.init() 自动连接。

三、实战 Demo:自动清理后台并打开x信

下面是一个完整的脚本示例,演示如何使用冰狐的 ADB 模块实现以下流程:

  1. 初始化 ADB 连接;
  2. 返回桌面;
  3. 打开最近任务列表;
  4. 清理所有后台应用;
  5. 启动x信;
  6. 在x信主界面随机滑动三次;
  7. 退出脚本。

✅ 本脚本仅使用冰狐平台提供的 JS API,不依赖任何第三方库或 Auto.js 等其他框架。

javascript 复制代码
/**
 * 冰狐 ADB 自动化脚本 Demo
 * 功能:清理后台 → 启动x信 → 随机滑动
 * 作者:冰狐用户
 * 日期:2026-03-24
 */

function main() {
    console.log("开始执行 ADB 自动化脚本...");

    // 步骤1:初始化 ADB(自动连接本地设备)
    var ret = adb.init();
    if (!ret) {
        console.error("ADB 初始化失败,请检查 USB 调试是否开启");
        return -1;
    }
    console.log("ADB 初始化成功");

    // 步骤2:返回桌面
    adb.home();
    sleep(1000); // 等待动画结束

    // 步骤3:打开最近任务
    adb.recentApps();
    sleep(1500);

    // 步骤4:清理所有后台(模拟多次上滑)
    for (var i = 0; i < 3; i++) {
        adb.swipe(rsScreenWidth / 2, rsScreenHeight * 0.8, rsScreenWidth / 2, rsScreenHeight * 0.2, 300);
        sleep(800);
    }
    console.log("后台清理完成");

    // 步骤5:返回桌面
    adb.home();
    sleep(1000);

    // 步骤6:启动x信(通过 adb shell am start)
    var pkg = "com.tencent.mm";
    var cmd = `am start -n ${pkg}/.ui.LauncherUI`;
    var result = adb.execCmd(cmd);
    if (result.indexOf("Error") !== -1) {
        console.error("启动x信失败:" + result);
        return -2;
    }
    console.log("x信启动成功");
    sleep(3000); // 等待x信加载

    // 步骤7:在x信主界面随机滑动三次
    for (var j = 0; j < 3; j++) {
        var x1 = randInt(rsScreenWidth * 0.3, rsScreenWidth * 0.7);
        var y1 = randInt(rsScreenHeight * 0.6, rsScreenHeight * 0.8);
        var y2 = randInt(rsScreenHeight * 0.2, rsScreenHeight * 0.4);
        adb.swipe(x1, y1, x1, y2, randInt(300, 600));
        console.log(`第 ${j + 1} 次滑动`);
        sleep(2000);
    }

    // 步骤8:返回桌面并结束
    adb.home();
    sleep(1000);
    console.log("脚本执行完毕");

    // 可选:关闭 ADB 连接(非必须,脚本结束会自动释放)
    // adb.close();

    return 0;
}

四、关键 API 解析

1. adb.init()

  • 用于初始化本地 ADB 连接。
  • 成功返回 true,失败返回 false
  • 通常只需调用一次。

2. adb.execCmd(cmd)

  • 执行任意 Shell 命令,如 am startinput tapdumpsys 等。
  • 返回命令执行结果字符串。
  • 注意:命令需符合 Android Shell 语法。

3. 屏幕尺寸常量

  • rsScreenWidthrsScreenHeight 是冰狐内置常量,代表当前设备分辨率。
  • 可用于计算相对坐标,提升脚本兼容性。

4. sleep(ms)

  • 冰狐全局函数,用于延时(单位:毫秒)。
  • 在 ADB 操作后必须加入适当等待,避免操作过快导致失败。

五、优势与适用场景

使用冰狐 ADB 模块相比传统方案有以下优势:

  • 无需 PC 环境:脚本直接在手机端运行,不需要连接手机和pc,通过冰狐引擎直接调用 ADB;
  • 与 UI 自动化互补:当无障碍无法识别控件时,可用 ADB 坐标操作兜底;
  • 支持远程设备 :通过 adb.connect("192.168.x.x", 5555) 控制云手机;
  • 高稳定性:ADB 命令底层可靠,不受界面变化影响。

典型应用场景包括:

  • 游戏领域
  • 设备批量管理
  • 云手机集群控制
  • 系统级自动化(如自动开关机、网络切换)

六、注意事项

  1. 权限问题:非 root 设备必须开启"USB 调试"和"无线调试"(Android 11+);
  2. 坐标适配:不同设备分辨率不同,建议使用比例计算坐标;
  3. 异常处理 :务必检查 adb.init() 返回值,避免空指针;
  4. 性能开销 :频繁调用 execCmd 会有一定延迟,应合理设计流程。

七、结语

使用封装 过的ADB 模块,为开发者提供了一种强大而简洁的自动化手段。结合其内置的 rsScreenWidthsleeprandInt 等全局函数,可快速构建跨设备、高兼容性的自动化脚本。本文提供的 Demo 虽简单,但展示了从连接、控制到交互的完整链路。开发者可在此基础上扩展更多功能,如自动登录、数据采集、批量测试等,充分发挥 ADB 在移动端自动化的潜力。

相关推荐
ai_coder_ai10 小时前
如何使用shizuku来实现自动化脚本?
autojs·自动化脚本·冰狐智能辅助·easyclick
Holen&&Beer11 小时前
mysql-bind-mount-to-named-volume-migration
数据库·mysql·adb
feng68_11 小时前
MySQL-Router+MySQL-MGR
android·linux·运维·数据库·mysql·adb
原来是猿12 小时前
MySQL 在 Ubuntu 环境安装
mysql·ubuntu·adb
流星白龙21 小时前
【MySQL】7.MySQL基本查询(2)
android·mysql·adb
rrrjqy1 天前
用 Docker 部署远程 MySQL:从端口踩坑到权限全开(附避坑指南)
mysql·adb·docker
feng68_1 天前
MySQL集群主从复制
linux·运维·数据库·mysql·adb
Wpa.wk1 天前
APP测试 - adb基础命令2
经验分享·测试工具·adb
Mr -老鬼1 天前
EasyClick 大文件分割合并
自动化·autojs·easyclick·易点云测
流星白龙1 天前
【MySQL】1.MySQL数据库基础
数据库·mysql·adb