PC パソコン

ADB「cannot connect to daemon」の原因と解決方法

Android StudioやターミナルでADBコマンドを実行した際に、「cannot connect to daemon」というエラーが表示され、実機やAndroid Emulatorを認識できなくなることがあります。

adb: cannot connect to daemon at tcp:5037

このエラーは、主にADBクライアントがPC上で動作するADBサーバー(daemon)へ接続できない場合に発生します。

ADBサーバーが正常に起動していない、古いadbプロセスが残っている、ADBが使用するポート5037が別プロセスに占有されている、複数バージョンのADBが競合している、Platform Toolsが壊れている、といった原因が代表的です。

実機のUSBケーブルやUSBデバッグを確認する前に、まずPC側でADBサーバーが正常に起動できるかを確認するのがポイントです。

この記事では、ADB「cannot connect to daemon」の原因と、ADBサーバーの再起動、5037番ポートの確認、複数ADBの整理、Platform Toolsの再インストールなどの解決方法を順番に解説します。

  1. ADBの「daemon」とは
  2. 代表的なエラーメッセージ
  3. 主な原因
    1. 1.ADBサーバーが起動していない
    2. 2.古いadbプロセスが残っている
    3. 3.5037番ポートが別プロセスに使用されている
    4. 4.複数バージョンのADBが競合している
    5. 5.Android SDK Platform-Toolsが破損している
    6. 6.PATHが古いadbを参照している
    7. 7.セキュリティソフトやファイアウォール
    8. 8.権限の異なるADBが混在している
    9. 9.Android系エミュレータが独自ADBを起動している
  4. 確認手順1:adb versionを確認する
  5. 確認手順2:ADBサーバーを手動起動する
  6. 解決方法1:ADBサーバーを再起動する
  7. 解決方法2:残っているadbプロセスを確認する
  8. 解決方法3:5037番ポートを確認する
  9. 解決方法4:使用しているadbの場所を確認する
  10. 解決方法5:フルパスでadbを実行する
  11. 解決方法6:Android SDK Platform-Toolsを更新する
  12. 解決方法7:Platform-Toolsを再インストールする
  13. 解決方法8:Android Studioを終了してからADBを再起動する
  14. 解決方法9:Android系エミュレータを終了する
  15. 解決方法10:PATHから古いPlatform-Toolsを除外する
  16. 解決方法11:Windowsを再起動する
  17. 解決方法12:macOS・LinuxでADBを再起動する
  18. 解決方法13:セキュリティソフトを確認する
  19. 解決方法14:管理者権限の混在を避ける
  20. 「cannot connect to daemon」と「ADB server didn’t ACK」の違い
  21. 「cannot connect to daemon」と「device offline」の違い
  22. 「cannot connect to daemon」と「device unauthorized」の違い
  23. USBケーブルを交換すれば直る?
  24. Android StudioのConnection Assistantも確認する
  25. Windowsでおすすめの確認コマンド
  26. macOSでおすすめの確認コマンド
  27. Linuxでおすすめの確認コマンド
  28. 正常に直ったか確認する方法
  29. 何度も再発する場合
  30. それでも解決しない場合
  31. まとめ

ADBの「daemon」とは

ADB(Android Debug Bridge)は、単一のプログラムだけでAndroid端末と直接通信しているわけではありません。

大きく分けると、次の3つの要素で動作しています。

  • PCでコマンドを受け付けるADBクライアント
  • PC上でバックグラウンド動作するADBサーバー
  • Android端末側で動作するadbd

たとえば次のコマンドを実行すると、

adb devices

ADBクライアントはPC上のADBサーバーへ接続します。

ADBサーバーが起動していない場合は、通常は自動的に起動します。

* daemon not running; starting now at tcp:5037 * daemon started successfully *

その後、接続されている実機やEmulatorの一覧が表示されます。

しかし、ADBサーバーを正常に起動できなかったり、クライアントからサーバーへ接続できなかったりすると、次のようなエラーになります。

adb: cannot connect to daemon at tcp:5037

ポイント:ここでいうdaemonは、まずPC側のADBサーバーを指していると考えると原因を切り分けやすくなります。実機が接続されていなくても、ADBサーバー自体は正常に起動できます。

代表的なエラーメッセージ

環境によっては、次のようなメッセージが表示されます。

* daemon not running; starting now at tcp:5037 adb: cannot connect to daemon at tcp:5037

また、別のエラーと組み合わさる場合もあります。

ADB server didn't ACK adb: cannot connect to daemon at tcp:5037

あるいは、

cannot connect to daemon at tcp:5037: cannot connect to 127.0.0.1:5037

などと表示されることもあります。

いずれも最初にPC側のADBサーバーを確認します。

主な原因

1.ADBサーバーが起動していない

もっとも基本的な原因です。

通常はADBコマンド実行時に自動起動しますが、何らかの理由で起動に失敗している場合があります。

2.古いadbプロセスが残っている

Android StudioやADBが異常終了したあと、古いadbプロセスだけがバックグラウンドに残ることがあります。

新しいADBがそのプロセスと正常に通信できず、接続エラーになるケースです。

3.5037番ポートが別プロセスに使用されている

ADBサーバーは通常、PC上のローカルTCPポート5037を使用します。

別のADBやAndroidエミュレータ、その他のソフトウェアが5037番ポートを占有していると、新しいADBサーバーを正常に起動できない場合があります。

4.複数バージョンのADBが競合している

Android StudioのAndroid SDKとは別に、古いAndroid SDK、ゲーム用Androidエミュレータ、スマートフォン管理ソフトなどが独自のadbを持っていることがあります。

異なるバージョンのADBクライアントとADBサーバーが混在すると、正常に接続できなくなることがあります。

5.Android SDK Platform-Toolsが破損している

ADB本体はAndroid SDK Platform-Toolsに含まれています。

アップデート中の失敗やファイル破損などによって、ADBが正常に起動できなくなる可能性があります。

6.PATHが古いadbを参照している

Android Studioは新しいSDKを使っているのに、ターミナルではPATHに残った古いadbを実行しているケースがあります。

7.セキュリティソフトやファイアウォール

セキュリティソフトがadb.exeの実行やローカルTCP通信を制限すると、ADBサーバーへ接続できなくなる可能性があります。

8.権限の異なるADBが混在している

WindowsでADBを管理者権限で起動したあと、通常権限のAndroid Studioから別のADBを起動するなど、権限が異なるプロセスが混在するとトラブルになることがあります。

9.Android系エミュレータが独自ADBを起動している

ゲーム用Androidエミュレータなどには独自のadb.exeが付属している場合があります。

そのADBが5037番ポートを先に使用すると、Android Studio側のADBと競合することがあります。

確認手順1:adb versionを確認する

まずADBコマンド自体が実行できるか確認します。

adb version

正常なら、ADBのバージョンとインストール場所などが表示されます。

このコマンド自体が見つからない場合は、ADBサーバーの問題ではなく、PATHやAndroid SDK Platform-Toolsのインストール状態を先に確認します。

確認手順2:ADBサーバーを手動起動する

次のコマンドを実行します。

adb start-server

正常なら次のように表示されます。

* daemon not running; starting now at tcp:5037 * daemon started successfully *

ここで、

cannot connect to daemon at tcp:5037

となる場合は、PC側のADBサーバー環境を重点的に調査します。

解決方法1:ADBサーバーを再起動する

まずはADBサーバーを終了します。

adb kill-server

続けて再起動します。

adb start-server

さらに確認します。

adb devices

正常なら、実機やEmulatorがなくても次のように表示されます。

List of devices attached

最初に試す方法:それまで正常だったADBで突然「cannot connect to daemon」が発生した場合は、まずadb kill-serverとadb start-serverを試してください。

解決方法2:残っているadbプロセスを確認する

adb kill-serverを実行しても問題が続く場合は、ADBプロセスが残っていないか確認します。

Windows:

tasklist | findstr adb

macOS・Linux:

ps aux | grep adb

不要なADBプロセスが残っている場合は終了します。

Windowsでは必要に応じて、

taskkill /F /IM adb.exe

でadb.exeを終了できます。

注意:強制終了はadb kill-serverで正常終了できない場合の対処です。開発中の他のAndroidツールもADBを利用している場合があります。

解決方法3:5037番ポートを確認する

ADBサーバーが使用する5037番ポートを、どのプロセスが使用しているか確認します。

Windows:

netstat -ano | findstr 5037

たとえば次のように表示されます。

TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 1234

最後の1234がPIDです。

どのプロセスか確認します。

tasklist /FI "PID eq 1234"

macOSでは、

lsof -iTCP:5037

Linuxでは、

ss -ltnp | grep 5037

などで確認できます。

adb以外の不要なアプリケーションが5037番ポートを使用している場合は、そのソフトを終了してからADBを起動します。

解決方法4:使用しているadbの場所を確認する

複数ADBの競合を調べます。

Windows:

where adb

macOS・Linux:

which adb

Windowsで複数表示される例:

C:\Android\old-sdk\platform-tools\adb.exe C:\Users\User\AppData\Local\Android\Sdk\platform-tools\adb.exe

この場合、古いADBがPATH上で優先されている可能性があります。

Android Studioが使用しているAndroid SDKのPlatform-Toolsを基準に環境を整理します。

解決方法5:フルパスでadbを実行する

PATHの競合かどうかを簡単に調べるには、Android Studioが使用しているSDK内のadbを直接実行します。

Windowsの例:

"C:\Users\User\AppData\Local\Android\Sdk\platform-tools\adb.exe" kill-server "C:\Users\User\AppData\Local\Android\Sdk\platform-tools\adb.exe" start-server

macOSの例:

~/Library/Android/sdk/platform-tools/adb kill-server ~/Library/Android/sdk/platform-tools/adb start-server

フルパスでは正常に動き、単純なadbでは失敗するなら、PATHに別のADBが存在する可能性が高くなります。

解決方法6:Android SDK Platform-Toolsを更新する

Android StudioでSDK Managerを開き、Android SDK Platform-Toolsを更新します。

更新後にADBを再起動します。

adb kill-server adb start-server adb devices

ADBはPlatform-Toolsに含まれているため、古いADBを長期間使用している場合は更新を確認してください。

解決方法7:Platform-Toolsを再インストールする

更新しても改善しない場合は、Platform-Toolsが破損している可能性を切り分けます。

Android StudioのSDK ManagerからAndroid SDK Platform-Toolsを一度削除し、再インストールします。

再インストール後に、

adb version adb start-server adb devices

を順番に実行してください。

解決方法8:Android Studioを終了してからADBを再起動する

Android Studio自体がADBを使用しているため、一度IDEを終了してからADB環境をリセットすると改善する場合があります。

おすすめの手順は次のとおりです。

  1. Android Studioを終了する
  2. adb kill-serverを実行する
  3. 残っているadbプロセスを確認する
  4. adb start-serverを実行する
  5. adb devicesで確認する
  6. Android Studioを起動する

解決方法9:Android系エミュレータを終了する

Android Studio以外のAndroidエミュレータを使用している場合は、一度すべて終了します。

一部のエミュレータや端末管理ソフトには独自のADBが含まれています。

それらを終了後、

adb kill-server adb start-server

を実行してください。

これで改善する場合は、別ソフトのADBとの競合が原因だった可能性があります。

解決方法10:PATHから古いPlatform-Toolsを除外する

複数のADBが存在する場合は、古いPlatform-ToolsのディレクトリをPATHから削除するか、現在使用するAndroid SDKを優先してください。

WindowsではAndroid Studio標準構成の場合、たとえば次のようなディレクトリにPlatform-Toolsがあります。

%LOCALAPPDATA%\Android\Sdk\platform-tools

macOSでは一般的に、

~/Library/Android/sdk/platform-tools

などです。

ただし実際のAndroid SDK Locationは環境によって異なるので、Android Studioの設定画面で確認してください。

解決方法11:Windowsを再起動する

Windowsではadb.exeやポート5037を使用しているプロセスがうまく終了できないことがあります。

原因プロセスを特定できない場合は、一度PCを再起動します。

再起動後、他のAndroidエミュレータを起動する前に次を実行してください。

adb start-server adb devices

これで正常なら、以前残っていたADBプロセスや他ソフトとの競合が原因だった可能性があります。

解決方法12:macOS・LinuxでADBを再起動する

macOSまたはLinuxでも基本的な対処は同じです。

adb kill-server adb start-server

残存プロセスを確認します。

ps aux | grep adb

5037番ポートを確認します。

macOS:

lsof -iTCP:5037

Linux:

ss -ltnp | grep 5037

解決方法13:セキュリティソフトを確認する

ファイアウォールやセキュリティソフトがadb.exeをブロックしている可能性があります。

ただし、セキュリティ機能そのものを恒久的に無効化するのはおすすめできません。

まず次の点を確認してください。

  • 実行しているadbが公式Android SDK Platform-Toolsのものか
  • adb.exeがセキュリティソフトで隔離されていないか
  • ローカル通信がブロックされていないか
  • 別のadb.exeが例外登録されていないか

注意:出所不明のadb.exeをファイアウォールやセキュリティソフトの例外に追加しないでください。

解決方法14:管理者権限の混在を避ける

WindowsでAndroid Studioを通常権限で実行している場合は、ADBだけを常に管理者権限で起動するような構成は避けます。

一度すべてのadb.exeを終了し、同じ権限レベルの環境からADBを起動し直してください。

「cannot connect to daemon」と「ADB server didn’t ACK」の違い

次の2つが一緒に表示されることがあります。

ADB server didn't ACK adb: cannot connect to daemon at tcp:5037

「ADB server didn’t ACK」は、ADBクライアントとサーバー間の初期応答が正常に成立しなかったことを示すメッセージです。

「cannot connect to daemon」は、結果としてADBサーバーへ接続できていない状態を示します。

どちらもまず、

adb kill-server adb start-server

を実行し、改善しなければ5037番ポートや複数ADBを確認します。

「cannot connect to daemon」と「device offline」の違い

次のような状態なら、

ABC123456789 offline

PC側ADBサーバーはすでに動作しており、Android端末の存在も認識されています。

一方、

adb: cannot connect to daemon at tcp:5037

では、ADBクライアントがPC側ADBサーバーに接続する段階で問題が発生しています。

そのため、USBケーブル交換より先にPC側ADBサーバーを確認します。

「cannot connect to daemon」と「device unauthorized」の違い

次の表示なら、

ABC123456789 unauthorized

ADBサーバーは正常に動作しています。

端末側でUSBデバッグのRSA認証が完了していないだけです。

「cannot connect to daemon」では、それ以前のADBサーバー自体を正常化する必要があります。

USBケーブルを交換すれば直る?

「cannot connect to daemon at tcp:5037」だけが表示される場合、USBケーブルが直接の原因である可能性は高くありません。

実機を1台も接続していなくてもADBサーバーは起動できるためです。

まず次のコマンドだけで正常に動くか確認します。

adb start-server adb devices

ここでdaemonエラーが出るなら、PC側の問題です。

ADBサーバーが正常になったあと、実機だけ認識されないのであればUSBケーブルやUSBデバッグを確認します。

切り分け:
daemonへ接続できない → PC側ADB環境を確認
daemonは正常だが端末が出ない → USB接続・ドライバ・USBデバッグを確認

Android StudioのConnection Assistantも確認する

ADBサーバーが正常に起動したあとも実機が表示されない場合は、Android StudioのConnection Assistantを利用できます。

Tools → Troubleshoot Device Connections

ここからUSB接続、USBデバッグ、ADBサーバーなどを順番に確認できます。

Windowsでおすすめの確認コマンド

Windowsでは、次の順番で確認すると原因を切り分けやすくなります。

where adb adb version tasklist | findstr adb netstat -ano | findstr 5037

その後、必要に応じて、

adb kill-server taskkill /F /IM adb.exe adb start-server adb devices

と進めます。

macOSでおすすめの確認コマンド

which adb adb version ps aux | grep adb lsof -iTCP:5037 adb kill-server adb start-server adb devices

Android Studio以外の方法でもPlatform-Toolsをインストールしている場合は、どのadbが実行されているか特に確認してください。

Linuxでおすすめの確認コマンド

which adb adb version ps aux | grep adb ss -ltnp | grep 5037 adb kill-server adb start-server adb devices

正常に直ったか確認する方法

最終的には次を実行します。

adb kill-server adb start-server adb devices

正常なら、

* daemon not running; starting now at tcp:5037 * daemon started successfully * List of devices attached

となります。

実機が正常に接続されていれば、さらに、

ABC123456789 device

のように表示されます。

何度も再発する場合

毎回adb kill-serverで一時的に直るものの、すぐに再発する場合は根本原因が残っています。

特に次を確認してください。

  • where adbまたはwhich adbで複数ADBが表示されないか
  • 古いAndroid SDKがPATHに残っていないか
  • ゲーム用Androidエミュレータを同時起動していないか
  • 5037番ポートを他のソフトが使用していないか
  • Platform-Toolsが古くないか
  • 管理者権限と通常権限のADBが混在していないか

再発する環境では、単純にADBを毎回再起動するよりも、複数ADBやポート競合を解消したほうが根本的な解決になります。

それでも解決しない場合

ADB「cannot connect to daemon」が続く場合は、次の項目を順番に確認してください。

  • adb kill-serverとadb start-serverを実行したか
  • 古いadbプロセスが残っていないか
  • TCPポート5037を別プロセスが使用していないか
  • where adbまたはwhich adbで複数ADBが存在しないか
  • Android Studioとターミナルで同じADBを使用しているか
  • Platform-Toolsを更新したか
  • 必要ならPlatform-Toolsを再インストールしたか
  • Android系エミュレータや端末管理ソフトを終了したか
  • Android Studioを再起動したか
  • PCを再起動したか
  • セキュリティソフトがADBをブロックしていないか

まとめ

ADB「cannot connect to daemon」は、主にADBクライアントがPC上のADBサーバーへ正常に接続できない場合に発生します。

まず次の3つを実行してください。

adb kill-server adb start-server adb devices

これで直らない場合は、5037番ポートと複数ADBの存在を確認します。

Windowsなら、

where adb netstat -ano | findstr 5037

macOS・Linuxなら、

which adb lsof -iTCP:5037

などで切り分けます。

基本的な解決順序は次のとおりです。

  1. ADBサーバーを再起動する
  2. 残っているadbプロセスを終了する
  3. 5037番ポートを使用しているプロセスを確認する
  4. 複数バージョンのADBを整理する
  5. Android SDK Platform-Toolsを更新する
  6. 必要ならPlatform-Toolsを再インストールする
  7. 他のAndroidエミュレータや管理ソフトを終了する
  8. Android StudioまたはPCを再起動する

特に、where adbやwhich adbで複数のADBが見つかる場合や、5037番ポートをAndroid Studio以外のソフトウェアが使用している場合は、単純なADB再起動だけでは再発する可能性があります。

ADBサーバーが正常に起動してadb devicesがエラーなく実行できる状態まで戻してから、実機のUSB接続やEmulatorの状態を確認するのが効率的な解決手順です。