2010年7月31日土曜日

Windows版SDKのためには、cygwin1.5が必要らしい

こんばんは、hirokumaと申します。

最近、adb.exeがうまく動かないことがあり、困っていました。
> adb kill-server
> adb start-server
としても、start-serverがエラーになります。
「ADB server didn't ACK」などと言われるのです。

環境変数のADB_TRACEにallなどとしておくと、adbのトレースログが出てくるのですが、ポート5037番にbindできないとおっしゃる。
Created device thread
transport: client_socket_thread() starting

cannot bind 'tcp:5037'

ファイアウォールソフトなどが影響している、というような情報があったけれども、ではどうすればいいのかが未だによくわかりません。

ここまでは前置き。

ADB_TRACEでもう少しログを出したいので、adb.exeを自分でビルドできないのか?というのを調べていました。
どうやら、SDKのビルドでできるようです。
手順としては、
 1. MacやLinuxでSDKをビルド
 2. できたバイナリ(zip?)をcygwinで変換
というものらしいです。

ここで注意が!
cygwinは、1.5ではないとだめ」と書かれています。リンク先のL.44くらいに記載があります。
うちのPCはcygwin1.7にしているので、あきらめました。

adb.exeだけならcygwinだけでもビルドできそうな気がしますが、どうなんでしょうね。

3 件のコメント:

  1. 直接的な解決策ではないですが、adbでデバイスの接続に失敗するときは、

    ・eclipseが起動している時は終了させる
    (eclipseのAndroidプラグイン側でもadbの接続を勝手に行ってたりするので)
    ・タスクマネージャでadb.exeのプロセスを全てkillしてみる

    あたりで改善することがありますよ。

    返信削除
  2. こんばんは。

    どうもですね、この現象だけはそれらとは違うようなのです(私も体験するまでは、どこかで生きてるんじゃないの、と思ってました)。
    netstatで見るとCLOSE_WAITのままとなっていて、adbっぽい人が誰もいないのでどうしようもない、というところです。

    感触だけで言うと、スレッドの終了同期がうまくいっていないような気がしています。
    さらに何となくな話をすると、firewallソフトの影響が強いような気がしているのですが、まだ確認に至ってません。

    返信削除
  3. firewallソフトを別のものにすると、症状が出なくなりました。
    CLOSE_WAITについては、Windows VISTA以降ではどうのこうの、という記事もあったので、最近だと大丈夫なのかもしれません。

    返信削除