Как я могу установить apk на несколько подключенных устройств? - PullRequest
47 голосов
/ 23 декабря 2011

У меня есть 7 устройств, подключенных к моей машине разработки.

Обычно я делаю adb install <path to apk> и могу установить только на одно устройство.

Теперь я хотел бы установить свой apk на всеиз моих 7 подключенных устройств.Как я могу сделать это в одной команде?Я хотел бы запустить сценарий, возможно.

Ответы [ 18 ]

73 голосов
/ 23 декабря 2011

Вы можете использовать adb devices, чтобы получить список подключенных устройств, а затем запустить adb -s DEVICE_SERIAL_NUM install... для каждого устройства в списке.

Что-то вроде (bash):

adb devices | tail -n +3 | cut -sf 1 -d " " | xargs -iX adb -s X install ...

Комментарии предлагаютэто может работать лучше для новых версий:

adb devices | tail -n +2 | cut -sf 1 | xargs -iX adb -s X install ...

Для Mac OSX (не тестируется в Linux):

adb devices | tail -n +2 | cut -sf 1 | xargs -I {} adb -s {} install ...
12 голосов
/ 12 февраля 2013

Остальные ответы были очень полезны, но не совсем то, что мне нужно. Я думал, что опубликую свое решение (сценарий оболочки) на тот случай, если оно даст больше ясности другим читателям. Он устанавливает несколько apks и любые mp4s

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"

Спасибо за все остальные ответы, которые привели меня к этому вопросу.

10 голосов
/ 22 сентября 2012

Вот функциональная однострочная команда с учетом ответа Кичика (спасибо!):

adb devices |tail -n +2 |cut -sf 1 |xargs -iX adb -s X install -r * .apk

Но если вы используете Maven, это еще проще:

mvn android: deploy

7 голосов
/ 14 ноября 2012

Еще один короткий вариант ... Я наткнулся на эту страницу, чтобы узнать, что -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
6 голосов
/ 19 июня 2013

Обобщенное решение от Дейва Оуэнса для запуска любой команды на всех устройствах:

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

Поместите его в какой-нибудь скрипт, например "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

Затем вы можете легко создать скрипт для установки приложения и запустить действие

* 1010.*
3 голосов
/ 24 апреля 2015

Мне понравился скрипт workingMatt , но я подумал, что его можно немного улучшить, вот моя модифицированная версия:

#!/bin/bash

install_to_device(){
local prettyName=$(adb -s $1 shell getprop ro.product.model)
echo "Starting Installatroning on $prettyName"
for APKLIST in $(find . -name "*.apk" -not -name "*unaligned*");
  do
  echo "Installatroning $APKLIST on $prettyName"
  adb -s $1 install -r $APKLIST
  adb -s $1 shell am start -n com.foo.barr/.FirstActivity;
  adb -s $1 shell input keyevent KEYCODE_WAKEUP
  done
  echo "Finished Installatroning on $prettyName"
}

echo "Installatron"
gradlew assembleProdDebug

for SERIAL in $(adb devices | tail -n +2 | cut -sf 1);
do 
  install_to_device $SERIAL&
done

Моя версия делает то же самое, кроме:

  • находит apks из корня проекта
  • устанавливается на каждое устройство одновременно
  • исключает "не выровненные" версии apks (так или иначе, они просто устанавливались выровненными версиями
  • отображает читаемые имена телефонов вместо идентификаторов их устройств

Есть несколько способов улучшить его, но я очень доволен.

2 голосов
/ 11 мая 2016

Если вы не хотите использовать устройства, на которых не включен adb; используйте это

Mac / Linux

adb devices | grep device | grep -v devices | awk '{print$1}' | xargs -I {} adb -s {} install path/to/yourApp.apk 

adb devices | grep device | grep -v devices | cut -sf 1 | xargs -I {} adb -s {} install path/to/yourApp.apk
2 голосов
/ 31 мая 2013

С помощью этого скрипта вы можете просто сделать:

adb+ install <path to apk>

Чисто, просто.

2 голосов
/ 31 января 2012

Должна работать следующая команда:

$ adb devices | tail -n +2 | head -n -1 | cut -f 1 | xargs -I X adb -s X install -r path/to/your/package.apk

adb devices возвращает список устройств.Используйте tail -n +2, чтобы начать со 2-й строки, и введите -n -1, чтобы удалить последнюю пустую строку в конце.Передача через cut с разделителем табуляции по умолчанию дает нам первый столбец, который является сериалом.

xargs используется для запуска команды adb для каждого сериалаУдалите опцию -r, если вы не переустанавливаете.

1 голос
/ 30 сентября 2014

Используйте эту утилиту командной строки: adb-foreach

...