有没有办法在所有连接的设备上运行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)
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.
(device|emulator)通过删除不需要的grep 来更改grep.上面写的这个命令将在所有连接的设备和模拟器上运行.-J%参数指定要xargs的更换的第一次出现%在从管道(标准输入)的左边的值的效用.xargs.对于GNU/Linux xargs,选项是-I%.-t 将导致xargs在运行它之前立即打印它将要运行的命令.-n1意味着xargs应该只1在每次调用命令时使用最多的参数(而不是一些可以采用多个参数的实用程序,rm例如).-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进程都将被后台化,因此你必须使用ps和kill或者自己手动终止logcat进程pkill.使用xargs使它看起来和感觉就像一个常规的阻塞命令行,如果你只有一个设备,那么它将完全像adb.
这是来自???的脚本的改进版本。原始版本与某些设备不匹配。
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)
| 归档时间: |
|
| 查看次数: |
9336 次 |
| 最近记录: |