55 votes

Comment puis-je installer un apk sur plusieurs appareils connectés?

J'ai 7 appareils branchés sur ma machine de développement.

Normalement, je fais adb install <path to apk> et je peux installer sur un seul appareil.

Maintenant, je voudrais installer mon apk sur l'ensemble de mes 7 appareils connectés. Comment puis-je le faire en une seule commande ? J'aimerais peut-être lancer un script.

80voto

kichik Points 7249

Vous pouvez utiliser adb devices pour obtenir une liste des appareils connectés, puis exécuter adb -s DEVICE_SERIAL_NUM install... pour chaque appareil 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 mieux fonctionner pour les versions plus récentes :

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

Pour Mac OSX (non testé sous Linux) :

 adb devices | tail -n +2 | cut -sf 1 | xargs -I {} adb -s {} install ...

13voto

WorkingMatt Points 110

Les autres réponses étaient très utiles mais n'ont pas tout à fait fait ce dont j'avais besoin. J'ai pensé 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.

11voto

Tom Points 86

Voici une commande fonctionnelle d'une ligne adaptée à la réponse de kichik (merci !):

appareils adb | queue -n +2 | couper -sf 1 | xargs -iX adb -s X install -r *.apk

Mais si vous utilisez Maven, c'est encore plus simple :

mvn android:déployer

7voto

Dave Owens Points 41

Une autre option courte... Je suis tombé sur cette page pour apprendre que le -s $SERIAL doit venir avant la commande adb actuelle ! Merci stackoverflow !

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

6voto

iTake Points 1008

Solution généralisée de Dave Owens pour exécuter n'importe quelle commande sur tous les appareils :

 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 appareil.

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 leur achèvement :

 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X