いらないモノ、ひつようなモノ

書籍、音楽、そして若干のテクノロジー

apkを実機に転送ができない

androidアプリを作っている最中、実機でデバッグしていたら突然、「Failed to upload ○○○とかjava.net.ConnectException」と言い始めた。コマンドラインでadbを操作して復帰したときの方法。

ちなみにcygwin(など)を入れてgrepやkillが使える環境が前提。

C:\Users\a9a9>adb start-server
*1293020099* daemon not running. starting it now on port 5037 *
ADB server didn't ACK
*1293020100* failed to start daemon *

C:\Users\a9a9>set ADB_TRACE=all

C:\Users\a9a9>adb start-server
_adb_connect: host:version
socket_loopback_client: could not connect to tcp:5037
*1293020101* daemon not running. starting it now on port 5037 *
ADB server didn't ACK
*1293020102* failed to start daemon *

C:\Users\a9a9>netstat -ano | grep 5037
  TCP    127.0.0.1:5037         0.0.0.0:0              LISTENING       6072

C:\Users\a9a9>kill -f 6072

C:\Users\a9a9>kill -f 6072
kill: couldn't open pid 6072

C:\Users\a9a9>adb start-server
_adb_connect: host:version
socket_loopback_client: could not connect to tcp:5037
*1293020103* daemon not running. starting it now on port 5037 *
*1293020104* daemon started successfully *
  • 実際に何が起こっているかを知るためにログレベルを環境変数で変更
  • ポートを空けられないということなので該当ポートをつかんでいるプロセスを探す
  • 何も考えずに該当プロセスを強制終了
  • 再度adbサーバを起動(したら、たまたまうまくいった)

この後、USB経由で実機を再度PCに接続して実行させるとアップロードが成功し開発中のプログラムが実機で動く。