Ich habe 7 Geräte an meinen Entwicklungscomputer angeschlossen.
Normalerweise mache ich adb install <path to apk>
und kann nur ein einziges Gerät installieren.
Nun möchte ich meine apk auf allen 7 verbundenen Geräten installieren. Wie mache ich das in einem einzigen Befehl? Ich möchte vielleicht ein Skript ausführen.
Sie können adb devices
verwenden, um eine Liste der verbundenen Geräte abzurufen, und anschließend adb -s DEVICE_SERIAL_NUM install...
für jedes aufgelistete Gerät ausführen.
So etwas wie (bash):
adb devices | tail -n +3 | cut -sf 1 -d " " | xargs -iX adb -s X install ...
Kommentare deuten darauf hin, dass dies für neuere Versionen möglicherweise besser funktioniert:
adb devices | tail -n +2 | cut -sf 1 | xargs -iX adb -s X install ...
Für Mac OSX (nicht unter Linux getestet):
adb devices | tail -n +2 | cut -sf 1 | xargs -I {} adb -s {} install ...
Die anderen Antworten waren sehr nützlich, haben aber nicht ganz das gemacht, was ich brauchte. Ich dachte, ich würde meine Lösung (ein Shell-Skript) veröffentlichen, falls sie anderen Lesern mehr Klarheit verschafft. Es installiert mehrere apks und alle 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"
Vielen Dank für all die anderen Antworten, die mich an diesen Punkt gebracht haben.
Hier ist ein funktionaler einzeiliger Befehl, der auf die Antwort von kichik zugeschnitten ist (Danke!):
aDB-Geräte | Schwanz -n +2 | cut -sf 1 | xargs -iX adb -s X install -r * .apk
Wenn Sie jedoch Maven verwenden, ist es noch einfacher:
mvn Android: Bereitstellen
Generalisierte Lösung von Dave Owens zur Ausführung aller Befehle auf allen Geräten:
for SERIAL in $(adb devices | grep -v List | cut -f 1);
do echo adb -s $SERIAL [email protected];
done
Fügen Sie es in ein Skript wie "adb_all" ein und verwenden Sie es wie adb für ein einzelnes Gerät.
Eine weitere gute Sache, die ich gefunden habe, ist, Hintergrundprozesse für jeden Befehl zu formen und auf ihren Abschluss zu warten:
for SERIAL in $(adb devices | grep -v List | cut -f 1);
do adb -s $SERIAL [email protected] &
done
for job in `jobs -p`
do wait $job
done
Dann können Sie einfach ein Skript erstellen, um die App zu installieren und die Aktivität zu starten
./adb_all_fork install myApp.apk
./adb_all_fork Shell am start -a Android.intent.action.MAIN -n my.package.app/.MainActivity
Eine weitere kurze Option ... Ich stolperte auf dieser Seite, um zu erfahren, dass der -s $SERIAL
vor dem eigentlichen Adb-Befehl stehen muss! Danke, Stackoverflow!
for SERIAL in $(adb devices | grep -v List | cut -f 1);
do `adb -s $SERIAL install -r /path/to/product.apk`;
done
Ich mochte workingMatt's Skript , dachte aber, es könnte etwas verbessert werden, hier ist meine modifizierte Version:
#!/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
Meine Version macht dasselbe, außer:
Es gibt einige Möglichkeiten, wie es noch verbessert werden könnte, aber ich bin ziemlich zufrieden damit.
Der folgende Befehl sollte funktionieren:
$ 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 gibt die Liste der Geräte zurück. Beginnen Sie mit der Endung -n +2 von der 2. Zeile und vom Kopf -n -1, um die letzte Leerzeile am Ende zu entfernen. Beim Durchschneiden mit dem Standard-Tab-Trennzeichen wird die erste Spalte mit den Serien angezeigt.
xargs wird verwendet, um den adb-Befehl für jede Seriennummer auszuführen. Entfernen Sie die Option -r, wenn Sie nicht erneut installieren.
Wenn Sie keine Geräte verwenden möchten, für die adb nicht aktiviert ist; benutze das
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
Verwenden Sie dieses Befehlszeilenprogramm: adb-foreach
Der Schlüssel ist, adb
in einem separaten Prozess (&) zu starten.
Ich habe das folgende Skript entwickelt, um die Installation auf allen angeschlossenen Geräten gleichzeitig zu starten und die installierte Anwendung auf jedem von ihnen zu starten:
#!/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"
Hinweis 1: STDOUT und STDERR werden unterdrückt. Es werden keine "adb install" -Operationsergebnisse angezeigt. Ich denke, das kann verbessert werden, wenn Sie wirklich müssen
Hinweis 2: Sie können das Skript auch verbessern, indem Sie Argumente anstelle von fest codierten Pfad- und Aktivitätsnamen angeben.
Auf diese Weise:
PowerShell-Lösung
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)
}
}
Fügen Sie dies in Ihre Profildatei (notepad $PROFILE
) ein, starten Sie Ihre Shell neu und Sie können Installationen mit folgendem Befehl aufrufen:
adba install yourApp.apk
Dieser Befehl funktioniert einwandfrei adb devices | awk 'NR>1{print $1}' | xargs -n1 -I% adb -s % install foo.apk
nun, es ist einfach, Sie können eine installapk.bat -Datei erstellen, die den Job für mehrere apk auf mehreren verbundenen Geräten ausführen kann. Öffnen Sie installapk.bat mit notepad ++ und kopieren Sie diesen Code
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
Da ich die Antwort von @Tom nicht kommentieren kann, hat dies bei OSX 10.13 für mich funktioniert
adb devices | tail -n +2 | cut -sf 1 | xargs -IX adb -s X install -r path/to/apk.apk
(Ändere das kleine Ich in ein großes Ich)
Versuchen Sie mit der Android Debug Bridge Version 1.0.29 dieses bash-Skript :
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
Nicht sicher, ob es mit früheren Versionen funktioniert.
Entstanden von hier: Machen Sie den vorherigen Beitrag zu einem Massen-APK-Installationsprogramm, das ADB Install-Multi-Syntax nicht verwendet
@ echo aus : Schleife :: -------------------------- hat ein Argument? if ["% ~ 1"] == [""] ( echo done . goto end ) :: -------------------------- Argument existiert? wenn nicht vorhanden% ~ s1 ( echo-Fehler "% ~ 1" ist nicht im Dateisystem . vorhanden.) else ( echo "% ~ 1" ist vorhanden wenn vorhanden% ~ s1\NUL ( Echo "% ~ 1" ist ein Verzeichnis ) Else ( Echo "% ~ 1" ist eine Datei! - Installationszeit: Call adb install% ~ s1 ) ) :: -------------------------- Verschiebung goto loop : ende pause ::: ##################### ################################################ ### ::: ## ## ::: ## 0. run: adb devices - um den Deamon zu starten und Ihr Gerät aufzulisten ## ::: ## ## ::: ## 1. Ziehen Sie eine beliebige Anzahl von Dateien (APK) über diese Batchdateien. ## ::: ## ## ::: ## - es werden die Dateien einzeln installiert. ## ::: ## - es wird nur geprüft, ob eine Datei existiert. ## ::: ## - Es wird nicht geprüft, ob es sich um ein gültiges APK-Paket handelt. ## ::: ## - Es wird nicht geprüft, ob das Paket bereits installiert ist. ## ::. : ## - Wenn ein Fehler auftritt, können Sie jederzeit [STRG] + [C] ## ::: ## drücken, um das Skript zu stoppen, und mit dem nächsten fortfahren, ## ::: ## ein andermal. ## ::: ## - Die Datei wird als 8.3-Dateiname von DOS zu Ihnen kopiert. ## ::: ## Sie brauchen sich keine Sorgen zu machen, dass Dateinamen umbrochen oder ## :: umbenannt werden. : ## per Drag & Drop über diesen Stapel. ## ::: ## ## ::: ## Elad Karako 1/1/2016 ## ::: ## http://icompile.eladkarako.com ## ::: ########################################### ###########################