You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何让adb命令在所有已连接设备上并行执行(替代逐个执行方式)

让adb命令在所有连接设备上并行执行的脚本修改方案

要让adb命令在所有已连接设备上同时执行(而非逐个排队),核心是把每个设备的操作放到后台异步运行。下面是修改后的完整脚本,以及关键改动的说明:

修改后的脚本

function install(){
    # 过滤出有效的设备ID,跳过标题行和空行
    devices=$(adb devices | grep -v "List of devices attached" | awk '{print $1}' | grep -v '^$')
    
    # 遍历每个设备,将操作放到后台并行执行
    for device in $devices; do
        {
            echo "=== Starting operations on device: $device ==="
            # 安装APK
            adb -s "$device" install xxxx.apk
            if [ $? -eq 0 ]; then
                echo "APK installed successfully on $device"
            else
                echo "Failed to install APK on $device"
                continue  # 安装失败则跳过后续操作
            fi
            
            # 启动应用
            echo "Launching application on $device...."
            package='com.xxxx'
            activity='com.xxxx.MainFrm'
            adb -s "$device" shell am start -n $package/$activity
            
            # 模拟按键和触摸操作
            adb -s "$device" shell input keyevent 26
            sleep 3
            adb -s "$device" shell input tap 198 393
            sleep 1
            adb -s "$device" shell input swipe 198 390 198 80 1500
            sleep 2
            adb -s "$device" shell input tap 198 300
            
            echo "=== Completed all operations on device: $device ==="
        } &  # 后台运行当前设备的所有操作
    done
    
    # 等待所有后台进程完成后再结束脚本
    wait
    echo "✅ All devices have finished installation and configuration!"
}

关键改动说明

  • 更可靠的设备列表获取:用grep -v跳过标题行和空行,awk提取设备ID,避免原脚本中cut命令可能因空格处理不当导致的错误。
  • 后台并行执行:将每个设备的操作包裹在{ ... } &中,让每个设备的任务在独立的后台进程中运行,实现多设备同时操作。
  • 显式设备指定:统一使用adb -s "$device"指定目标设备,语法更规范,避免设备ID含特殊字符时出现问题。
  • 错误处理优化:增加APK安装结果的判断,安装失败时跳过后续操作,避免无效的按键/触摸指令。
  • 等待所有任务完成:末尾的wait命令会让主脚本等待所有后台的设备操作全部完成后再退出,确保所有设备的流程都执行完毕。
  • 日志标识增强:添加设备ID的日志分隔线,方便区分不同设备的执行状态,排查问题更清晰。

注意事项

  • 并行执行会同时占用多个设备的adb连接,若设备数量极多(比如10+),可以根据实际情况调整,但一般场景下不会有性能问题。
  • 确保xxxx.apk的路径在脚本执行环境中是可访问的(建议使用绝对路径),所有后台进程会继承主脚本的工作目录。
  • 若某台设备的adb命令执行失败,该设备的后台进程会自行终止,不会影响其他设备的操作,可通过终端输出的日志定位问题设备。

内容的提问来源于stack exchange,提问作者Sasha Milic

火山引擎 最新活动