2011-03-21 (月)
*[Android] 実機にネットワーク越しにadb接続
USBで接続していなくても,リモートデバッグしたいことがきっとあります.USBケーブルが見当たらない時とか,繋がってるPCと開発に使いたいPCが別の場合とか,Android端末が多すぎてUSBのポートが足りないときとか,役に立ちます.備えあれば憂い無しです.たぶん.
adbはネットワーク越しのデバッグに対応しています.ただ,どうやってやるのかとか,実機でも出来るのかとか知らなかったので調べてみる.実際にやったのは4日くらい前ですが.
http://hirokuma.typepad.jp/blog/2010/04/bbadb-ba25.html
この辺から辿るとだいたい分かる.
準備
root権限が必要かもしれません.
まず,AndroidのIPアドレスを確認しておきます.WiFiの設定画面で見るか,IPアドレスを確認できるアプリを入れておくと良いです.あと,デフォルトでPort5555を使うのでパケットフィルタやルータで何かしてる場合は設定しておく必要があります.
実機に端末エミュレータを入れておく.設定を間違ってPC側から接続できなくなった場合に必要になるかもしれません.
adbdの設定
Android側で,adbdが使うポート番号を指定します.adbでポート番号を省略したときに5555に接続を試みるようなので,とりあえず5555とします.
setprop service.adb.tcp.port 5555
とした後に,adbdを再起動します.killして立ち上げなおすか,Androidの設定でUSBデバッグを一度OFFにすれば設定が有効になります.
adbdを終了すると,adbも使えなくなるのでPCからadb経由でやってる場合は気をつけてください.
あと,setprop service.adb.tcp.portが指定されていると,USBデバッグ出来ないようです.
USB経由のデバッグとネットワーク越しのデバッグは両立できないっぽい.
adbで接続
あとはPC側で
adb connect [AndroidのIPアドレス]:5555
としてみます.
環境変数ADBHOSTにIPアドレスを設定してから,adbのサービスを再起動する方法もありますが,IPアドレス変わったりする場合はこっちの方が楽です.
% adb connect 192.168.0.11:5555 connected to 192.168.0.11:5555 % adb devices List of devices attached 192.168.0.11:5555 device
こんな感じになったらOKです.あとは,普通に adb shellや adb logcatしてください.
戻す
Android側で
setprop service.adb.tcp.port ""
としてポート番号を消してからadbdを再起動すれば元に戻ります.
気になるところ
USBデバッグと両立できない.
adbdを二つ動かせないか試したら,
cannot bind 'tcp:5037'
といわれてダメだった.port 5037はループバック用に使うっぽい.
セキュリティーとかも怖い.どこからでも認証無しで接続できてしまう.iptablesとかでパケットフィルタする必要があるかも.
adb -d shellでは接続できずに,adb -e logcatで接続できる.表示上は"device"と出ているのにエミュレータ扱いっぽいな.