2011-02 << 2011-03 >> 2011-04

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"と出ているのにエミュレータ扱いっぽいな.