100

あるマシンで Android アプリケーションのコードを記述/コンパイルし、別のマシンで起動したエミュレーターでリモートでデバッグすることは可能ですか? エミュレーターが常にラップトップの CPU の半分を消費することにうんざりしています。

4

10 に答える 10

79

cmb が言及したコマンドを以前に試したことはありません (または気づいたことさえありません)adb connectが、TCP ポートを自分で (SSH 経由などで) 転送することが正常に機能することを確認できます。

エミュレーターはインスタンスごとに 2 つの TCP ポートをリッスンします。5554 は telnet インターフェイス用で、5555 は DDMS などのツールとの制御通信用です。したがって、ポート 5555 のみを転送するだけで済む可能性があります (ただし、これまで両方で試しただけです)。後続の各エミュレーターは、次に使用可能な偶数 + 奇数のポート番号のタプル (最大で約 5580 だと思います) を使用します。

参考までに、ローカル マシンで次の手順を実行しました。

  • ssh -NL 5554:localhost:5554 -L 5555:localhost:5555 myuser@remote-server
  • killall adb; adb devices

エミュレーターは、起動時にローカルの adb サーバーに通知しようとしていると思います。したがって、ローカルの 5554+ ポートをプローブするために adb を再起動する必要があります。

ssh コマンドの は、リモートマシンlocalhostのローカル インターフェイスを指すことに注意してください。

adb devices新しいエミュレーターが表示されました — emulator-5554— そして、ローカル マシンで実行されているかのように使用できました。

于 2009-12-19T01:30:59.843 に答える
21

この質問は非常に古いものだと思いますが、問題を少し異なる方法で解決したため、この簡単な解決策を見つけるのに時間がかかりました。

GUI が好きなので、通常は Windows7 PC またはラップトップ (作業している場所によって異なります) をフロントエンドとして使用しますが、すべての編集/コンパイル/デバッグをヘッドレス Ubuntu サーバーで行うことを好みます。それが提供するコマンドラインの力。私の目標は、余分なサービス (sshd など) やファイアウォール ホールを使用せずに、各 Windows システムを可能な限りシン クライアントにすることです。

したがって、ここにシナリオがあります:

  • System-A: Android エミュレーターが動作する Windows7 システム
  • System-B: SDK がインストールされた Ubuntu サーバー

前述の問題は、System-A のエミュレーターが外部イーサネット インターフェイスではなく localhost にバインドされるため、System-B の adb が System-A のエミュレーターにアクセスできないことです。System-B への SSH 接続のために、PuTTY でリモート ポート フォワーディングを設定するだけです。トリックは、2 つのトンネルを作成するときに「リモート」ラジオ ボタンをオンにして、トンネルの方向が逆になるようにすることです (ログインしているサーバーからログインしているクライアントへのトンネリング)。

トンネルのスクリーンショット

最後に、SSH 接続を確立した後、adb を使用して System-B の「localhost」に接続します。

System-B$ adb connect localhost
connected to localhost:5555
System-B$ adb devices
List of devices attached
localhost:5555  device

これで、通常どおりイメージのダウンロード/デバッグができるようになりました。ラップトップを取り出してコーヒーを飲みたい場合は、別の Windows システムに切り替えるのは簡単なことです。

さらに、同じ方法でポート 5037 をトンネリングすることにより、実際に adb サーバー接続を転送して、実際の Android デバイスを System-A の USB 経由で接続し、System-B からイメージをダウンロードすることができます。これを機能させるには、SSH セッションを開始する前に、adb サーバーが System-B ではなく System-A で実行されていることを確認する必要があります。

まず、System-A で adb サーバーを起動します (コマンド プロンプト)。

C:\> adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
C:\> adb devices
List of devices attached
3435F6E6035B00EC        device

次に、System-B の adb サーバーを強制終了します。

System-B$ adb kill-server

最後に、System-B への ssh セッションを再起動して確認します

System-B$ adb devices
List of devices attached
3435F6E6035B00EC        device
于 2011-04-08T03:48:05.463 に答える
21

これが私がWindowsでそれを解決した方法です。私はクリストファーのリードにほぼ従いましたが、編集できないため、新しい回答が必要になります。

私が抱えていた問題は、ADB とエミュレーターが 0.0.0.0 ではなく 127.0.0.1 をリッスンしていたことです。そうでなければ、私はTCPMonを使用していたでしょう。これは、Windows では異なるか、SDK の最新バージョンで変更されていると思います。( で確認できますnetstat -ban。)

  1. エミュレーターを実行するマシンにWinSSHDをインストールしました。(freeSSHdでも動作するはずですが、ログインが機能しませんでした。)

  2. Windows ファイアウォールでポート 22 (TCP) を開きました。(WinSSHD でそれができる場合があります。)

  3. WinSSHD GUI で仮想アカウントを作成しました。

  4. 開発マシンからエミュレータ マシンへの新しい PuTTY 接続を作成し、接続できることを確認しました。

  5. 次に、PuTTY でトンネリングをセットアップします: Connection -> SSH -> Tunnels

    Source port: 5554
    Destination: localhost:5554
    Type: Local/Auto

    Source port: 5555
    Destination: localhost:5555
    Type: Local/Auto

    (トンネルを維持するために、PuTTY を接続して開いたままにします。)

  6. ここで、リモート マシンでエミュレータを起動し、そこで ADB が実行されていないことを確認しました。

  7. 開発マシンで ADB を再起動しました ( adb kill-server、その後adb start-server)。

  8. adb devicesリモートエミュレータは として表示されましたemulator-5554 device。これで、Eclipse/ADT から直接アプリをデプロイして実行できるようになりました。そこでは、エミュレーターがローカル エミュレーターであるかのように [仮想デバイス] の下に表示されました。

于 2010-05-08T00:15:14.617 に答える
6

2 台のマシンが同じプライベート ネットワークにあり、SSH 暗号化を使用する必要がない場合 (これは一般的なケースです)、これを行う簡単な方法を見つけました。SSH トンネルは非常に長く、インストールが難しい場合があるため、これが役立つ場合があります。例えば、Cygwin/Windowsに初めてSSHデーモンをインストールするのは諦めに繋がるかもしれません(まあ諦めました)。

Windows では、次の手順を実行するには、Cygwin をパッケージhttptunnelと共にインストールする必要があります。これは Linux / httptunnelでも動作するはずですが、試していません。

  • いずれかのマシンでエミュレーターを実行します (ホスト名がHostEmulatorであるとしましょう)

  • 他のマシンで Eclipse を開始します (これをHostEclipseと呼びましょう)

  • 各マシンで Cygwin ターミナルを開き、次に、

  • HostEmulator、次の cygwin コマンドを入力します

    hts -F localhost:5554 10000
    hts -F localhost:5555 10001
    

htsHTTP トンネル サーバーを意味します。

これらの 2 つのコマンドは、ポート 10001 と 10001 をリッスンし、これらのポートの I/O をローカル ポート 5554 と 5555 にリダイレクトする 2 つのハーフ ブリッジを作成します。それらのいくつかを実行している場合は、このページの他の返信に見られるように、より高いポート番号を使用します)。

  • HostEclipseで、のものを入力します

    htc -F 5554 HostEmulator:10000
    htc -F 5555 HostEmulator:10001
    

htcHTTP トンネル クライアントを意味します。

これらのコマンドは、不足しているハーフ ブリッジを作成します。これらはローカル ポート 5554 および 5555 をリッスンし、これらのポートの I/O を、先ほど HostEmulatorで作成したハーフブリッジにリダイレクトします。

  • 次に、引き続きHostEclipseで、次の 3 つのコマンドを入力します

    adb kill-server
    adb start-server
    adb devices
    

そうしないとリモートエミュレーターが検出されないため、これにより adb が再起動されます。起動時に何らかのスキャンを実行している必要があります。次に、確認用にデバイス (使用可能なエミュレーター) を一覧表示します。

  • そして、そこに行きます。

リモート エミュレーターをローカルであるかのように操作できます。両方のマシンで Cygwin ターミナルを開いたままにしておく必要があります。そうしないと、作成したハーフブリッジが強制終了されます。

ここではマシン間の交換にポート 10000 と 10001 を使用しましたが、もちろん、まだ使用されていない限り、他のポートを使用できます。

于 2011-08-24T22:04:58.987 に答える
2

ssh サービスの開始に失敗したときの Windows + AndroVM (ホストオンリー アダプターが必要) のソリューション。そのため、追加のソフトウェアは必要ありません。

adb connect <Andro VM IP>
adp tcpip 555

コマンド プロンプトで、管理者として実行します。

netsh interface portproxy add v4tov4 listenport=5555 listenaddress=<host ip> connectport=5555 connectaddress=<Andro VM IP>

Windows ファイアウォールで TCP ポート 5555 を開きます。

次に、2 番目の PC から次を実行します。

adb connect <host ip>
于 2013-06-05T08:50:17.573 に答える
0

Android エミュレーターはデフォルトでローカル ポート 5555 をリッスンするため、リモート エミュレーターに接続する 1 つの方法は、ポート転送ツールを使用してすべての LAN パケットをローカル 5555 ポートに転送することです。

そのような優れたツールの 1 つがTrivial Port Forwardです。

コマンドは次のとおりです。

trivial_portforward.exe 1234 127.0.0.1 5555

ここで 1234 は、開発用コンピューターが接続するポート番号です。127.0.0.1 はループバック アドレスで、5555 はエミュレータのポートです。

より詳細な例については、ブログ投稿 を参照してください。

于 2021-02-09T13:11:28.873 に答える
-1

SDKを備えた2台目のマシンがありませんが、エミュレータのリッスンポート(デフォルトは5554、5555)がリッスンしている0.0.0.0、つまりリモートマシンから到達可能でありadb --help、コマンドが表示されていることに注意してくださいconnect <host>:<port>。コマンドが機能するadb devicesように表示されると思います。adbEclipseの場合は、「実行/構成の実行...」を試して、ターゲットを手動に設定します。これにより、「デバイスチューザー」が提供されます。これには、adbが接続されている場合にリモートエミュレーターが含まれると思います。試すだけの価値があります。

于 2009-11-18T14:38:28.383 に答える