在所有连接的设备上运行adb命令

Hei*_*sch 26 android adb

有没有办法在所有连接的设备上运行adb命令?使用"adb uninstall com.example.android"从所有连接的设备卸载应用程序.

我感兴趣的命令主要是安装和卸载.

我正在考虑为此编写一个bash脚本,但我觉得有人应该已经完成​​了:)

Oli*_*Oli 26

创建一个bash(adb +)

adb devices | while read line
do
    if [ ! "$line" = "" ] && [ `echo $line | awk '{print $2}'` = "device" ]
    then
        device=`echo $line | awk '{print $1}'`
        echo "$device $@ ..."
        adb -s $device $@
    fi
done
Run Code Online (Sandbox Code Playgroud)

用它

adb+ //+ command
Run Code Online (Sandbox Code Playgroud)

  • `adb -s $ device $ @&`将并行执行 (13认同)
  • 这适用于adb shell命令吗?适用于'adb + root',但它似乎将所有命令导入到'adb + shell setenforce 0'的第一个设备shell中 (2认同)

Joe*_*Joe 10

在@ Oli的答案的基础上,这也将使命令并行运行xargs.只需将其添加到您的.bashrc文件中:

function adball()
{
    adb devices | egrep '\t(device|emulator)' | cut -f 1 | xargs -t -J% -n1 -P5 \
          adb -s % "$@"
}
Run Code Online (Sandbox Code Playgroud)

并通过打开一个新的shell终端来应用它. ~/.bashrc,或source ~/.bashrc.

  1. 如果您只想在设备上运行(或仅在模拟器上运行),则可以(device|emulator)通过删除不需要的grep 来更改grep.上面写的这个命令将在所有连接的设备和模拟器上运行.
  2. -J%参数指定要xargs的更换的第一次出现%在从管道(标准输入)的左边的值的效用.
    注意:这适用于BSD(Darwin/Mac OS X)xargs.对于GNU/Linux xargs,选项是-I%.
  3. -t 将导致xargs在运行它之前立即打印它将要运行的命令.
  4. -n1意味着xargs应该只1在每次调用命令时使用最多的参数(而不是一些可以采用多个参数的实用程序,rm例如).
  5. -P5允许最多5并行进程同时运行.如果您希望按顺序运行命令,只需删除整个-P5参数即可.这也可以让你有命令的两种变化(adball以及adbseq,例如) -一个在平行运行中,其他顺序.

要证明它是并行的,您可以运行包含睡眠的shell命令,例如:

$ adball shell "getprop ro.serialno ; date ; sleep 1 ; date ; getprop ro.serialno"
Run Code Online (Sandbox Code Playgroud)

您可以使用它来运行adb您想要的任何命令(是的,甚至adball logcat可以工作!但它可能看起来有点奇怪,因为两个日志将并行流式传输到您的控制台,因此您将无法区分给定日志的设备线来自).


这种方法优于@dtmilano &方法的好处是,xargs只要至少有一个并行进程仍在运行,它将继续阻止shell:这意味着你可以通过简单地使用来打破这两个命令^C,就像你使用的那样去做.使用dtmilano的方法,如果你要运行adb+ logcat,那么两个logcat进程都将被后台化,因此你必须使用pskill或者自己手动终止logcat进程pkill.使用xargs使它看起来和感觉就像一个常规的阻塞命令行,如果你只有一个设备,那么它将完全像adb.


Rob*_*rdi 5

这是来自???的脚本的改进版本。原始版本与某些设备不匹配。

DEVICES=`adb devices | grep -v devices | grep device | cut -f 1`
for device in $DEVICES; do
    echo "$device $@ ..."
    adb -s $device $@
done
Run Code Online (Sandbox Code Playgroud)