Android: "adb server is out of date. killing..."


初稿2010/7

はじめに

adbはserverとclientのversionが食い違っていると、
"adb server is out of date. killing..."を出力して、serverを再起動してしまいます。
同一LAN上に複数のターゲットと1台の共有Linuxサーバがぶら下がっていてみんなで開発したりする場合、共有linuxサーバ上でみんなが起動するadb-clientのversionを合わせるように気をつける必要があります。
このような場合、adbは以下のプロセス構成で動いていて、serverはadb-client起動時に(既に起動していなければ)自動的に起動されます。

[ターゲット]              [共有linuxサーバ]          [共有linuxサーバ]
adb-daemon1 -----------¥                 /----------- adb-client1
adb-daemon2 --------------- adb-server -------------- adb-client2
adb-daemon3 -----------/                 ¥----------- adb-client3

この対策は単純に(各々localにインストールしたadbではなく)全員が同じadb (例えば/usr/local/toolsにインストールしたadb)を使うように強制すればOKです。

共有linuxサーバからみんなで使うには

1) ターゲットにselialコンソールで接続してIPアドレスを設定する

速度:115200

2) 実機のIPアドレス設定

# ifconfig eth0 10.61.1.x netmask 255.255.0.0

3) 確認

# ifconfig eth0
eth0: ip 10.61.1.x mask 255.255.0.0 flags [up broadcast running multicast]
# netstat
Proto Recv-Q Send-Q Local Address          Foreign Address        State
tcp        0      0 127.0.0.1:5037         0.0.0.0:*              LISTEN
tcp        0      0 0.0.0.0:5555           0.0.0.0:*              LISTEN

4) 共有linuxサーバからターゲットに接続する

5) 【準備】共有linuxサーバにログインし、.cshrcにpathを追加する

$ vi ~/.cshrc
  set path = (. /usr/bin /bin /etc /usr/etc /usr/local/bin /usr/local/tools)

上記のようにpath設定に「/usr/local/tools」を追加

$ source  ~/.cshrc

6) 確認

$ which adb
/usr/local/tools/adb
$ adb version
Android Debug Bridge version 1.0.26

7) adb-serverにターゲットへの接続情報を登録

$ adb connect 10.61.1.x:5555  <--5555はselialコンソールから、netstatで確認したport-no
connected to 10.61.1.x:5555

8) 接続情報の確認

$ adb devices
"List of devices attached"
"10.61.1.11:5555 device"
"10.61.1.x:5555 device"  <--- "10.61.1.x:5555"がシリアルNo
"10.61.1.6:5555  device"

9) 自分のシリアルNoを指定してloginする

$ adb -s 10.61.1.x:5555  shell

** シリアルNoは環境変数"ANDROID_SERIAL"に設定して使うのが楽かも

$ setenv ANDROID_SERIAL 10.61.1.x:5555
$ adb shell

参考

adbのマニュアル http://www.muo.jp/android16/?developing/tools/adb.html