如何adb将apk安装到多个连接的设备上?

She*_*lam 49 java eclipse android adt adb

我有7台设备插入我的开发机器.

通常情况下,我adb install <path to apk>只能安装到一台设备上.

现在我想在我所有的7个连接设备上安装我的apk.我怎样才能在一个命令中执行此操作?我想也许要运行一个脚本.

kic*_*hik 74

您可以使用adb devices获取已连接设备的列表,然后adb -s DEVICE_SERIAL_NUM install...针对列出的每个设备运行.

像(bash)这样的东西:

adb devices | tail -n +3 | cut -sf 1 -d " " | xargs -iX adb -s X install ...
Run Code Online (Sandbox Code Playgroud)

评论表明,对于较新版本,这可能会更好:

adb devices | tail -n +2 | cut -sf 1 | xargs -iX adb -s X install ...
Run Code Online (Sandbox Code Playgroud)

对于Mac OSX(未在Linux上测试):

adb devices | tail -n +2 | cut -sf 1 | xargs -I {} adb -s {} install ...
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!不幸的是我无法让脚本运行.我不是shell脚本的专家.我得到错误:`xargs:非法选项 - 我用法:xargs [-0opt] [-E eofstr] [-I replstr [-R replacements]] [-J replstr] [-L number] [-n number [ -x]] [-P maxprocs] [-s size] [utility [argument ...]]` (2认同)
  • 尝试用`-IX`替换`-iX` (2认同)

Wor*_*att 12

其他答案非常有用,但并没有完全按照我的需要做.我想我会发布我的解决方案(一个shell脚本),以防它为其他读者提供更多的清晰度.它安装了多个apks和任何mp4

echo "Installatron"

for SERIAL in $(adb devices | tail -n +2 | cut -sf 1);
do 
  for APKLIST in $(ls *.apk);
  do
  echo "Installatroning $APKLIST on $SERIAL"
  adb -s $SERIAL install $APKLIST
  done

  for MP4LIST in $(ls *.mp4);
  do
  echo "Installatroning $MP4LIST to $SERIAL"
  adb -s $SERIAL push $MP4LIST sdcard/
  done
done

echo "Installatron has left the building"
Run Code Online (Sandbox Code Playgroud)

感谢所有其他答案让我达到这一点.


Tom*_*Tom 10

这是一个根据kichik的回应量身定制的功能性单行命令(谢谢!):

adb设备| 尾巴-n +2 | cut -sf 1 | xargs -iX adb -s X install -r*.apk

但如果您碰巧使用Maven,它甚至更简单:

mvn android:deploy


小智 7

另一个简短的选择......我在这个页面上偶然发现了-s $SERIAL必须在实际的adb命令之前来了!谢谢stackoverflow!

for SERIAL in $(adb devices | grep -v List | cut -f 1);
do `adb -s $SERIAL install -r /path/to/product.apk`;
done
Run Code Online (Sandbox Code Playgroud)


iTa*_*ake 6

Dave Owens的通用解决方案在所有设备上运行任何命令:

for SERIAL in $(adb devices | grep -v List | cut -f 1);
do echo adb -s $SERIAL $@;
done
Run Code Online (Sandbox Code Playgroud)

把它放在像"adb_all"这样的脚本中,并使用与单个设备的adb相同的方式.

我发现的另一件好事是为每个命令分叉后台进程,并等待它们完成:

for SERIAL in $(adb devices | grep -v List | cut -f 1);
do adb -s $SERIAL $@ &
done

for job in `jobs -p`
do wait $job
done
Run Code Online (Sandbox Code Playgroud)

然后,您可以轻松创建脚本来安装应用程序并启动活动

./adb_all_fork install myApp.apk
./adb_all_fork shell am start -a android.intent.action.MAIN -n my.package.app/.MainActivity
Run Code Online (Sandbox Code Playgroud)