web-dev-qa-db-ja.com

ADBおよびGenymotionエラー:「adbサーバーが古くなっています。強制終了しています... 'tcp:5037'をバインドできませんADBサーバーはACKしませんでした」

Genymotionエミュレータを起動した後、ターミナルからadb Shellを使用しようとすると、次のエラーが発生します。

adb server is out of date.  killing...
cannot bind 'tcp:5037'
ADB server didn't ACK
* failed to start daemon *
error:

私は stackoverflowのこの回答 を読んでこのコマンドを実行しますkillall -9 adbso実行したので、genymotion設定を変更してカスタムAndroid SDKツールを以下:

enter image description here

上記のスクリーンショットでわかるように、それも行いましたが、同じエラーメッセージが引き続き表示されます。

私のAndroid Studio ADBログは、adb Shellを実行しようとするたびに次のメッセージを出力します。

 DeviceMonitor: Adb connection Error:EOF
 DeviceMonitor: Connection attempts: 1

私は新しい仮想デバイスを作成し、それを使用してみても成功しませんでした。

23
CommonSenseCode

1.0.31以下の場合、adbを1.0.32に更新します

adb version
Android Debug Bridge version 1.0.31
wget -O - https://skia.googlesource.com/skia/+archive/cd048d18e0b81338c1a04b9749a00444597df394/platform_tools/Android/bin/linux.tar.gz | tar -zxvf - adb
Sudo mv adb /usr/bin/adb
Sudo chmod +x /usr/bin/adb
adb version
Android Debug Bridge version 1.0.32
28
spawyn

これらの解決策はどちらも私にとってはうまくいきませんでした。

私のエラーを解決した解決策は、不足している/ Android/Sdk/toolsと/ Android/Sdk/platform-toolsの両方のディレクトリを環境PATH変数に追加することでした。これは、次のコマンドで実行できます。

export PATH=/home/{username}/Android/Sdk/tools:/home/{username}/Android/Sdk/platform-tools:$PATH

必ず独自のユーザー名をコマンドに挿入し、{username}をオペレーティングシステムのユーザー名に置き換えてください。

これを実行すると、コマンドラインで環境変数のPATH変数を検索して、adb実行可能ファイルの適切な場所を検索します。この環境変数を設定しないと、システムは正しい実行可能ファイルを探す場所がわかりません。

21
Matt G

この問題の根本的な原因は、異なるバージョンのadbを実行しようとすることです。 PC(ホスト)側のadbは、adbとadb serverの2つの部分で構成されています。

adb <----> adb server <-------- USB -------> adbd(device)

adbとadbサーバーは実際には同じバイナリですが、最初にadbコマンドを発行したとき、adbサーバーはバックグラウンドで実行されています。その後、adbコマンドは、adbを実行するたびにどのadbサーバーに接続するかを確認します。まず、実行中のadbサーバーのバージョンを確認します。バージョンが一致しない場合は、「adbサーバーが最新ではありません。殺して...」これが唯一の理由です。

int adb_connect(const std::string& service, std::string* error) {
    // first query the adb server's version
    int fd = _adb_connect("Host:version", error);
...
        if (version != ADB_SERVER_VERSION) {
            printf("adb server is out of date.  killing...\n");
            fd = _adb_connect("Host:kill", error);
            adb_close(fd);

            /* XXX can we better detect its death? */
            adb_sleep_ms(2000);
            goto start_server;
        }

この問題を解決するには、異なるバージョンのadbを実行する必要がないことを確認する必要があります。

  1. タスクマネージャーツールを使用して、実行中のadbサーバーのバイナリパスを見つけ、「adb」を検索します。コマンドを使用してバージョンを確認する

[adbサーバーへのパス]/adbバージョン

このような出力:

Android Debug Bridge version 1.0.35
Revision 68de85bda98d-Android

「1.0.35」はバージョン番号です。

  1. 問題の原因となっているadbのバージョンを確認してください。入力するだけ

adbバージョン

  1. バージョン番号を比較し、それらが一致する必要があります。

一致しない場合は、次のことができます。

  • 1つのadbのみを保持し、他のadbを削除します。
  • または、エラーを無視できます。常に表示されている場合は、別のadbツールを実行しているユーザーを見つけて停止します。たとえば、一部の電話アシスタントプログラム。
5
Changbin Du