実機やエミュレータを複数繋いだ状態で、adb install
やadb shell
などを実行したいことがあると思います。
これを簡単に実現する方法です。
方法
結論からいうと、簡単なツールを使って実現します。
adbs
という小さなツールを作りました。
adbs
※drone.ioのバッジがキャッシュされているようで、赤く表示されているかもしれませんが、ちゃんと動きます。
元々シェルスクリプトで2年前位に作り、個人的に使っていましたが、golangで書き直しWindowsでも動くようにしました。
使い方
上記から最新バイナリをダウンロードし、PATHの通った場所に配置します。
もしくは、golangが使える環境なら下記でもOKです。
$ go get github.com/ksoichiro/adbs
あとは、ターミナルやコマンドプロンプトからadb
のかわりにadbs
を使うだけです。
複数端末が繋がっていれば、候補から選ぶように尋ねてきます。
$ adbs shell
[1] 304D19E0D41F543F
[2] 275501700028393
Device to execute command: 1
Specified: 304D19E0D41F543F
shell@android:/ $
シリアル番号の先頭の何文字かが分かっていれば、以下のようにパラメータで指定すると前方一致でマッチする端末を選んでくれます。
$ adbs -s 3 shell
端末が一つしかない場合は、普通のadbと同じように動きます。
そもそもの問題
adbでは、複数端末が接続されていると対象端末が決定できないためにエラーを出してしまいます。
$ adb shell
error: more than one device and emulator
これを回避するには対象端末のシリアル番号を調べ
$ adb devices
List of devices attached
304D19E0D41F543F device
275501700028393 device
表示されたシリアル番号をコピーしておいた上で、以下のように実行する必要があります。
$ adb -s 304D19E0D41F543F shell
一度や二度なら良いですが、APIレベルやdpiによるリソースの使い分けを調整するために何度も複数端末へインストールを繰り返したりしていると、さすがに面倒です。
これがきっかけでした。
・・・というわけで、gradleなど開発環境周りが色々充実してきた今、こういう作業をする人がいるかは分かりませんが、誰かのお役に立てば幸いです。