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

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

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

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

Ответы [ 18 ]

0 голосов
/ 29 июня 2017

- Получить все apk, хранящиеся в папке .apk

-Установите и замените приложение на устройствах

getBuild() {
    for entry in .apk/*
    do
        echo "$entry"
    done
    return "$entry"
}

newBuild="$(getBuild)"

adb devices | while read line
do
  if [! "$line" = ""] && ['echo $line | awk "{print $2}"' = "device"]
  then
      device='echo $line | awk "{print $1}"'
      echo "adb -s $device install -r $newbuild"
      adb -s $device install -r $newbuild
  fi
done
0 голосов
/ 14 апреля 2017

Эта команда отлично работает adb devices | awk 'NR>1{print $1}' | xargs -n1 -I% adb -s % install foo.apk

0 голосов
/ 01 января 2016

Создано здесь: Сделать предыдущее сообщение массовым установщиком APK, в котором не используется синтаксис ADB Install-Multi

@echo off

:loop
      ::-------------------------- has argument ?
      if ["%~1"]==[""] (
        echo done.
        goto end
      )
      ::-------------------------- argument exist ?
      if not exist %~s1 (
        echo error "%~1" does not exist in file-system.
      ) else (
        echo "%~1" exist
        if exist %~s1\NUL (
          echo "%~1" is a directory
        ) else (
          echo "%~1" is a file! - time to install:
          call adb install %~s1
        )
      )
      ::--------------------------
      shift
      goto loop


:end

pause

::: ##########################################################################
::: ##                                                                      ##
::: ##  0. run:   adb devices   - to start the deamon and list your device  ##
::: ##                                                                      ##
::: ##  1. drag&drop ANY amount of files (APK) over this batch files,       ##
::: ##                                                                      ##
::: ##       - it will install them one by one.                             ##
::: ##       - it just checks if file exists.                               ##
::: ##       - it does not checks if it is a valid APK package              ##
::: ##       - it does not checks if package-already-installed              ##
::: ##       - if there is an error you can always press [CTRL]+[C]         ##
::: ##           to stop the script, and continue from the next one,        ##
::: ##           some other time.                                           ##
::: ##       - the file is copied as DOS's 8.3 naming to you                ##
::: ##           don't need to worry about wrapping file names or renaming  ##
::: ##           them, just drag&drop them over this batch.                 ##
::: ##                                                                      ##
::: ##                                   Elad Karako 1/1/2016               ##
::: ##                                   http://icompile.eladkarako.com     ##
::: ##########################################################################

0 голосов
/ 04 февраля 2015

Ключ должен запускать adb в отдельном процессе (&).

Я придумал следующий скрипт для одновременного запуска установки на всех моих подключенных устройствах и, наконец, запуска на каждом из них установленного приложения:

#!/bin/sh

function install_job { 

    adb -s ${x[0]} install -r PATH_TO_YOUR_APK
    adb -s ${x[0]} shell am start -n "com.example.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER

}


#iterate over devices IP-addresses or serial numbers and start a job 

while read LINE
do
    eval x=($LINE)
    install_job ${x[0]} > /dev/null 2>&1 &
done <<< "`adb devices |  cut -sf 1`"

echo "WATING FOR INSTALLATION PROCESSES TO COMPLETE"
wait

echo "DONE INSTALLING"

Примечание1: STDOUT и STDERR подавляются.Вы не увидите никаких результатов операции "adb install".Думаю, это можно улучшить, если вам действительно нужно

Примечание 2: , вы также можете улучшить сценарий, указав аргументы вместо жестко закодированных путей и имен действий.Таким образом, вы:

  1. Не нужно вручную выполнять установку на каждом устройстве
  2. Не нужно ждать окончания одной установки, чтобы выполнить другую (задачи adb)запускаются параллельно)
0 голосов
/ 20 января 2012

В Android Debug Bridge версии 1.0.29 попробуйте этот bash-скрипт :

APK=$1

if [ ! -f `which adb` ]; then
    echo 'You need to install the Android SDK before running this script.';
    exit;
fi

if [ ! $APK ]; then
    echo 'Please provide an .apk file to install.'
else
    for d in `adb devices | ack -o '^\S+\t'`; do
        adb -s $d install $APK;
    done
fi

Не уверен, работает ли он с более ранними версиями.

0 голосов
/ 28 августа 2018

Поскольку я не могу прокомментировать ответ @Tom, это работает для меня в OSX 10.13

adb devices | tail -n +2 | cut -sf 1 | xargs -IX adb -s X install -r path/to/apk.apk

(Измените маленькое i на большое I)

0 голосов
/ 11 февраля 2019

ну, это просто, вы можете создать файл installapk.bat, который может выполнять работу для нескольких apk для нескольких подключенных устройств, открыть installapk.bat с помощью notepad ++ и скопировать вставить этот код

FOR /F "skip=1"  %%x IN ('adb devices') DO start adb -s %%x install -r Facebook.apk
FOR /F "skip=1"  %%x IN ('adb devices') DO start adb -s %%x install -r Instagram.apk
FOR /F "skip=1"  %%x IN ('adb devices') DO start adb -s %%x install -r Messenger.apk
FOR /F "skip=1"  %%x IN ('adb devices') DO start adb -s %%x install -r Outlook.apk
FOR /F "skip=1"  %%x IN ('adb devices') DO start adb -s %%x install -r Viber.apk
FOR /F "skip=1"  %%x IN ('adb devices') DO start adb -s %%x install -r WhatsApp.apk
0 голосов
/ 23 октября 2014

Решение PowerShell

function global:adba() {
    $deviceIds = iex "adb devices" | select -skip 1 |  %{$_.Split([char]0x9)[0].Trim() } | where {$_ -ne "" }
    foreach ($deviceId in $deviceIds) {
        Echo ("--Executing on device " + $deviceId + ":---")
        iex ("adb -s $deviceId " + $args)
    }
}

Поместите это в файл своего профиля (notepad $PROFILE), перезапустите вашу оболочку, и вы можете запустить установку с помощью:

adba install yourApp.apk
...