経緯
接続中の複数のAndroidデバイスに、同一のapkを一括でインストールしたい際にStack Overflowの以下の記事の
java - How can I adb install an apk to multiple connected devices? - Stack Overflow
https://stackoverflow.com/questions/8610733/how-can-i-adb-install-an-apk-to-multiple-connected-devices
この回答のワンライナーで元気に暮らしていたのですが
https://stackoverflow.com/a/8610829/2227705
Android 11以降で adb pair
コマンドで接続したデバイスはSerial Numberが長いせいか(詳細不明)xargsまわりが正常に動作してくれなくなりました。
Wi-Fi 経由でデバイスに接続する(Android 11 以降)
https://developer.android.com/studio/command-line/adb?hl=ja#connect-to-a-device-over-wi-fi-android-11+
修正
そんなわけで、tmpなファイルにいったん出力して、それを読み込むように修正しました。
- xargsの文字列長制限あたりにひっかかったと思われるためtmpファイルに出力して読み出すように変更
- offlineやunauthorizedを除外するために、"device"でgrepして有効なデバイスに限定
-
~/.bash_profile
あたりに設定しておき、$ adb-devices
や$ adb-installs hoge.apk
のように使います - 妙に長くなってしまってイマイチ感はあります
# adb devicesからserial numberを抽出してmodel名を取得
function adb-devices() {
adb devices | tail -n +2 | grep "device" | cut -sf 1 > /tmp/serials
for SERIAL in `cat /tmp/serials`; do
echo -n "$SERIAL " && adb -s $SERIAL shell getprop ro.product.model
done
}
# adb devicesからserial numberを抽出してmodel名を取得しつつ引数1のapkをadb install
function adb-installs() {
adb devices | tail -n +2 | grep "device" | cut -sf 1 > /tmp/serials
for SERIAL in `cat /tmp/serials`; do
echo -n "$SERIAL " && adb -s $SERIAL shell getprop ro.product.model && adb -s $SERIAL install -r -d -t $1
done
}