web-dev-qa-db-ja.com

Android emulatorを使用したリモートデバッグ

あるマシンでcode/compile Androidアプリケーションを作成し、別のマシンで起動されたエミュレータでリモートでデバッグすることは可能ですか? 。

86
zakovyrya

私は以前にadb connectコマンドはcmbが言及しましたが、TCPポートを自分で(SSHなどを介して)転送することは正常に機能することを確認できます。

エミュレータは、インスタンスごとに2つのTCPポート:telnetインターフェース用に5554、DDMSなどのツールとの制御通信用に5555をリッスンします。後続の各エミュレータは、次に利用可能な偶数+奇数のポート番号Tuple(最大で約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 —ローカルマシンで実行されているかのように使用できます。

66
Christopher Orr

これが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でトンネリングを設定します。接続-> SSH->トンネル

    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からアプリを直接デプロイして実行できます。Eclipseは仮想デバイスの下にローカルエミュレーターのように表示されます。

20

私はこの質問が本当に古いことを知っていますが、私は問題をわずかに異なって解決しました。

私は通常、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でリモートポート転送を設定することだけです。秘Theは、2つのトンネルを作成するときに「リモート」ラジオボタンをチェックして、トンネルの方向が逆になるようにすることです(ログインするサーバーからログインするクライアントへのトンネリング)。

tunnel screenshot

最後に、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サーバー接続を転送できるため、System-A上のUSBを介して実際のAndroidデバイスを接続し、そこに画像をダウンロードできますSystem-Bからこれを機能させるには、SSHセッションを開始する前に、adbサーバーがSystem-Aで実行され、System-Bで実行されていないことを確認する必要があります。

まず、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
18

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

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

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

  • 他のマシンでEclipseを起動します(HostEclipseと呼びましょう)

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

  • OnHostEmulator、次のcygwinコマンドを入力

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

htsは、Http Tunnel Serverを意味します。

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

  • OnHostEclipse、これらを入力

    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を使用しましたが、他のポートがまだ使用されていない限り、もちろん使用できます。

5
Shlublu

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

adb connect <Andro VM IP>
adp tcpip 555

Cmdプロンプトで管理者として実行:

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

open TCP Windowsファイアウォールのポート5555。

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

adb connect <Host ip>
2
Emirikol

開発者の電話は、追加のコンピューターよりも安価であり、リモートでデバッグできます。これには、エミュレータがデフォルトで提供しないオプションのセンサーがすべてあるという追加の利点があります。

テスト用に開発者の電話を入手することを強くお勧めします。

2
Kevin Williams

提案されたソリューションはどれも私にとってはうまくいきませんでした。私はEmirikolのソリューションから始めて改良しました。新しいAndroid API> 21のように、エミュレーターがオフラインで表示され、Genymotion設定に移動してAndroid SDKパスが空ですコマンドラインから:

netsh interface portproxy add v4tov4 listenport=5555 connectport=5555 connectaddress=<emulatorIP>

netsh interface portproxy add v4tov4 listenport=5554 connectport=5554 connectaddress=<emulatorIP>

source: http://www.sarpex.co.uk/index.php/2016/10/02/connect-genymotion-emulator-remotely/ 免責事項、私は著者です。

1
Sarpe

Adbを実行すると、それがまだ実行されていない場合、サーバーコピーが開始されます。そのコピーをデバイスのあるマシン上で開始することができます。sdk4.3以降では、サーバーにリモートマシンをリッスンするように指示する-aオプションを与えることができます。終了しない次のコマンドでそれを行います。

adb -a -P 5037サーバーnodaemon

デバイスを使用するマシンで、環境変数でADB_SERVER_SOCKETをtcp:xxxx:5037に設定します(または-Lオプションを使用して各adb呼び出しに同じ値を指定します)。ここで、xxxxはIPアドレスまたはマシンとデバイス、および5037は上記のコマンドで指定したポートと一致します。

これを使用して、3台のマシンにまたがる約100のエミュレーターにエンドツーエンドのテストを並行して実行しているマシン、および実際のデバイスをリモートで共有したい開発者にアクセスできるようにします。

Adb forwardおよびadb reverseを使用して、エミュレータとの間でポートを転送できます。これらのポートは、デバイス(「adb forward」を実行しているマシンではない)を備えたマシンに表示されます。

1
android.weasel

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

0
Chris Boyle