7台のデバイスを開発マシンに接続しています。
通常はadb install <path to apk>
および単一のデバイスにのみインストールできます。
次に、7つの接続されたすべてのデバイスにapkをインストールしたいと思います。単一のコマンドでこれを行うにはどうすればよいですか?おそらくスクリプトを実行したいと思います。
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 ...
他の答えは非常に有用でしたが、私が必要とすることはまったくできませんでした。他の読者にとってより明確になるように、ソリューション(シェルスクリプト)を投稿すると思いました。複数のapkと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"
この点に私を導いた他のすべての答えをありがとう。
以下に、キチクの応答に合わせた機能的な1行のコマンドを示します(ありがとう!)。
adbデバイス|テール-n +2 | cut -sf 1 | xargs -iX adb -s X install -r * .apk
ただし、Mavenを使用している場合は、さらに簡単です。
mvn Android:deploy
別の短いオプション...私はこのページにつまずいて-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
すべてのデバイスで任意のコマンドを実行するためのDave Owensの一般的なソリューション:
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
その後、アプリをインストールしてアクティビティを開始するスクリプトを簡単に作成できます
./adb_all_fork install myApp.apk
./adb_all_fork Shell am start -a Android.intent.action.MAIN -n my.package.app/.MainActivity
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
私のバージョンは以下を除いて同じことをします:
まだ改善できる方法はいくつかありますが、私はとても満足しています。
次のコマンドが機能するはずです。
$ 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行目から開始し、head -n -1を使用して最後の最後の空白行を削除します。デフォルトのタブ区切り文字を使用してカットをパイピングすると、シリアルである最初の列が取得されます。
xargsは、シリアルごとにadbコマンドを実行するために使用されます。再インストールしない場合は、-rオプションを削除してください。
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
次のコマンドラインユーティリティを使用します。 adb-foreach
重要なのは、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:ハードコーディングされたパス名とアクティビティ名の代わりに引数を指定することで、スクリプトを改善することもできます。
そうすれば:
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
このコマンドは完璧に機能しますadb devices | awk 'NR>1{print $1}' | xargs -n1 -I% adb -s % install foo.apk
複数の接続されたデバイスに複数のapkを実行できるinstallapk.batファイルを作成して、notepad ++でinstallapk.batを開き、コピーしてこのコードを貼り付けることができます。
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
@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に変更)
Android Debug Bridgeバージョン1.0.29で、これを試してください bash script :
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
以前のバージョンで動作するかどうかはわかりません。
元の場所: 前の投稿をADB Install-Multi構文を使用しない大量のAPKインストーラーにする
@ echo off :loop :: ----------------------- ---引数があるか? if ["%〜1"] == [""]( echo done。 goto end ) :: --------------------------引数が存在しますか? 存在しない場合%〜s1( エコーエラー "%〜1"はファイルシステムに存在しません。 )else( エコー "%〜1"存在 if exist%〜s1\NUL( echo "%〜1"はディレクトリ )else( echo "%〜1"はファイルです!-インストールの時間: adb install%〜 s1 ) ) :: -------------------------- shift goto loop :end pause ::: ################################################## ######################## ::: ## ## ::: ## 0. run: adbデバイス-開始するデバイスのデーモンとリスト## ::: ## ## ::: ## 1.このバッチファイル## [.____。に任意の量のファイル(APK)をドラッグアンドドロップします。 ] ::: ## ## ::: ##-それらを一つずつインストールします。 ## ::: ##-ファイルが存在するかどうかを確認するだけです。 ## ::: ##-有効なAPKパッケージかどうかはチェックしません## ::: ##-パッケージが既にインストールされているかどうかはチェックしません## ::: ##-エラーが発生した場合、[CTRL] + [C] ## ::: ##を押してスクリプトを停止し、次のスクリプトから続行できます。 ## ::: ## いつか。 ## ::: ##-ファイルはDOSの8.3ネーミングとしてコピーされます。## ::: ##ファイル名の折り返しや## [の名前変更について心配する必要はありません。 .____。] ::: ##それらを、このバッチ上にドラッグ&ドロップします。 ## ::: ## ## ::: ## Elad Karako 1/1/2016 ## ::: ## http://icompile.eladkarako .com ## ::: ######################################## ####################################