🔻

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
  1. 実機のIPアドレス設定
# ifconfig eth0 10.61.1.x netmask 255.255.0.0
  1. 確認
# 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
  1. 共有linuxサーバからターゲットに接続する

  2. 【準備】共有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
  1. 確認
$ which adb
/usr/local/tools/adb
$ adb version
Android Debug Bridge version 1.0.26
  1. adb-serverにターゲットへの接続情報を登録
$ adb connect 10.61.1.x:5555  <--5555はselialコンソールから、netstatで確認したport-no
connected to 10.61.1.x:5555
  1. 接続情報の確認
$ 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"
  1. 自分のシリアル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

Discussion