J'ai 7 périphériques branchés sur ma machine de développement.
Normalement, je fais adb install <path to apk>
et je peux installer sur un seul périphérique.
Maintenant, j'aimerais installer mon apk sur chacun de mes 7 appareils connectés. Comment puis-je faire cela en une seule commande? Je voudrais peut-être exécuter un script.
Vous pouvez utiliser adb devices
pour obtenir une liste des périphériques connectés, puis exécutez adb -s DEVICE_SERIAL_NUM install...
pour chaque périphérique répertorié.
Quelque chose comme (bash):
adb devices | tail -n +3 | cut -sf 1 -d " " | xargs -iX adb -s X install ...
Les commentaires suggèrent que cela pourrait fonctionner mieux pour les nouvelles versions:
adb devices | tail -n +2 | cut -sf 1 | xargs -iX adb -s X install ...
Pour Mac OSX (non testé sur Linux):
adb devices | tail -n +2 | cut -sf 1 | xargs -I {} adb -s {} install ...
Les autres réponses étaient très utiles, mais ne répondaient pas exactement à mes besoins. Je pensais publier ma solution (un script Shell) au cas où cela apporterait plus de clarté aux autres lecteurs. Il installe plusieurs apks et tous les 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"
Merci pour toutes les autres réponses qui m'ont amené à ce point.
Voici une commande fonctionnelle d'une ligne adaptée à la réponse de kichik (merci!):
appareils adb | queue -n +2 | cut -sf 1 | xargs -iX adb -s X installer -r * .apk
Mais si vous utilisez Maven, c'est encore plus simple:
mVN Android: déployer
Solution généralisée de Dave Owens pour exécuter n'importe quelle commande sur tous les périphériques:
for SERIAL in $(adb devices | grep -v List | cut -f 1);
do echo adb -s $SERIAL $@;
done
Mettez-le dans un script comme "adb_all" et utilisez-le de la même manière que adb pour un seul périphérique.
Une autre bonne chose que j'ai trouvée est de créer des processus d'arrière-plan pour chaque commande et d'attendre qu'ils soient terminés:
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
Ensuite, vous pouvez facilement créer un script pour installer l'application et démarrer l'activité.
./adb_all_fork install myApp.apk
./adb_all_fork Shell am start -a Android.intent.action.MAIN -n my.package.app/.MainActivity
Une autre option courte ... Je suis tombé sur cette page pour apprendre que le -s $SERIAL
doit précéder la commande réelle adb! Merci stackoverflow!
for SERIAL in $(adb devices | grep -v List | cut -f 1);
do `adb -s $SERIAL install -r /path/to/product.apk`;
done
J'ai aimé le script de workingMatt mais pensais que cela pourrait être amélioré un peu, voici ma version modifiée:
#!/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
Ma version fait la même chose sauf:
Il y a plusieurs façons de l'améliorer, mais j'en suis assez content.
La commande suivante devrait fonctionner:
$ 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 renvoie la liste des périphériques. Utilisez tail -n +2 pour commencer à partir de la 2ème ligne et head -n -1 pour supprimer la dernière ligne vierge à la fin. Le passage par coupe avec le délimiteur de tabulation par défaut nous donne la première colonne qui sont les publications en série.
xargs est utilisé pour exécuter la commande adb pour chaque série. Supprimez l'option -r si vous ne réinstallez pas.
Si vous ne voulez pas utiliser les périphériques qui n'ont pas activé adb; utilisez ceci
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
Utilisez cet utilitaire de ligne de commande: adb-foreach
La clé est de lancer adb
dans un processus séparé (&).
J'ai développé le script suivant pour lancer simultanément l'installation sur tous les périphériques connectés et lancer l'application installée sur chacun d'entre eux:
#!/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"
Note 1: les commandes STDOUT et STDERR sont supprimées. Vous ne verrez aucun résultat de l'opération "adb install". Cela peut être amélioré, je suppose, si vous devez vraiment
Remarque 2: vous pouvez également améliorer le script en fournissant des arguments au lieu de noms de chemin et d'activité codés en dur.
De cette façon vous:
Solution 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)
}
}
Mettez ceci dans votre fichier de profil (notepad $PROFILE
), redémarrez votre Shell et vous pouvez appeler des installations avec:
adba install yourApp.apk
Cette commande fonctionne parfaitement adb devices | awk 'NR>1{print $1}' | xargs -n1 -I% adb -s % install foo.apk
bien c'est simple, vous pouvez créer un fichier installapk.bat qui peut faire le travail pour plusieurs apk sur plusieurs appareils connectés
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
Puisque je ne peux pas commenter la réponse de @Tom, cela a fonctionné pour moi sous OSX 10.13.
adb devices | tail -n +2 | cut -sf 1 | xargs -IX adb -s X install -r path/to/apk.apk
(Changer le petit je en un grand je)
Avec Android Debug Bridge version 1.0.29, essayez ce script 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
Pas sûr que cela fonctionne avec les versions précédentes.
Origine d'ici: Faire de la publication précédente un installateur APK de masse qui n'utilise pas ADB Install-Multi Syntax
@ echo off : boucle :: -------------------------- a l'argument? if ["% ~ 1"] == [""] ( écho effectué . goto end ) :: -------------------------- argument existe? sinon,% ~ s1 ( erreur echo "% ~ 1" n'existe pas dans le système de fichiers . ) sinon ( echo "% ~ 1" existe s'il existe% ~ s1\NUL ( Echo "% ~ 1" est un répertoire ) Sinon ( Echo "% ~ 1" est un fichier! - le temps d'installer: Appeler adb install% ~ s1 ) ) :: -------------------------- décalage goto loop : end pause ::: ###################### ################################################# ### ::: ## ## ::: ## 0. run: adb devices - pour démarrer le démon et répertorier votre périphérique ## ::: ## ## ::: ## 1. Faites glisser n’importe quelle quantité de fichiers (APK) sur ces fichiers batch, ## ::: ## ## ::: ## - il les installera un par un. ## ::: ## - il vérifie simplement si le fichier existe. ## ::: ## - il ne vérifie pas s'il s'agit d'un paquet APK valide ## ::: ## - il ne vérifie pas si le paquet déjà installé ## ::. : ## - en cas d'erreur, vous pouvez toujours appuyer sur les touches [CTRL] + [C] ## ::: ## pour arrêter le script et continuer à partir de la suivante, ## ::: ## une autre fois. ## ::: ## - le fichier est copié sous le nom de DOS 8.3 et #nom. #. : ## eux, il suffit de les glisser-déposer sur ce lot. ## ::: ## ## ::: ## Elad Karako 1/1/2016 ## ::: ## http://icompile.eladkarako.com ## ::: ############################################# #############################.