あるマシンでcode/compile Androidアプリケーションを作成し、別のマシンで起動されたエミュレータでリモートでデバッグすることは可能ですか? 。
私は以前に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
—ローカルマシンで実行されているかのように使用できます。
これがWindowsでの解決方法です。私はクリストファーのリードにほとんど従っていましたが、編集することはできませんので、新しい答えが必要になります。
私が抱えていた問題は、ADBとエミュレーターが0.0.0.0ではなく、127.0.0.1でリッスンしているだけだったことです。そうでなければ、私は TCPMon を使用していたでしょう。これはWindowsで異なるか、SDKの最新バージョンで変更されていると思います。 (netstat -ban
で確認できます。)
エミュレータを実行するマシンに WinSSHD をインストールしました。 (freeSSHdでも動作するはずですが、そこでログインすることはできませんでした。)
Windowsファイアウォールでポート22(TCP)を開きました。 (WinSSHDはあなたのためにそれを行うことができるかもしれません。)
WinSSHD GUIで仮想アカウントを作成しました。
開発マシンからエミュレーターマシンへの新しいPuTTY接続を作成し、接続できることを確認しました。
次に、PuTTYでトンネリングを設定します。接続-> SSH->トンネル
Source port: 5554
Destination: localhost:5554
Type: Local/Auto
Source port: 5555
Destination: localhost:5555
Type: Local/Auto
(接続し、トンネルを維持するためにPuTTYを開いたままにします。)
ここで、リモートマシンでエミュレータを起動し、ADBがそこで実行されていないことを確認しました。
開発マシンでADBを再起動しました(adb kill-server
、次にadb start-server
)。
adb devices
とリモートエミュレーターはemulator-5554 device
として表示されました。これで、Eclipse/ADTからアプリを直接デプロイして実行できます。Eclipseは仮想デバイスの下にローカルエミュレーターのように表示されます。
私はこの質問が本当に古いことを知っていますが、私は問題をわずかに異なって解決しました。
私は通常、GUIが好きなのでフロントエンドとしてWindows7 PCまたはラップトップ(作業している場所によって異なります)を使用しますが、すべての編集/コンパイル/デバッグをヘッドレスUbuntuサーバーで実行することを好みます。それが提供するコマンドラインパワー。私の目標は、追加のサービス(sshdなど)やファイアウォールの穴を持たずに、各Windowsシステムをできるだけシンクライアントにすることです。
シナリオは次のとおりです。
前述の問題は、System-Aのエミュレータが外部イーサネットインターフェイスではなくlocalhostにバインドするため、System-BのadbがSystem-Aのエミュレータにアクセスできないことです。必要なのは、System-BへのSSH接続用にPuTTYでリモートポート転送を設定することだけです。秘Theは、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サーバー接続を転送できるため、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
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
htcはHttpトンネルクライアントを意味します。
これらのコマンドは、欠落しているハーフブリッジを作成します。ローカルポート5554および5555をリッスンし、これらのポートのI/Oを、作成したハーフブリッジHostEmulatorにリダイレクトします。
その後、引き続きHostEclipse、次の3つのコマンドを入力します:
adb kill-server
adb start-server
adb devices
そうしないと、リモートエミュレーターが検出されないため、adbが再起動します。起動時にスキャンを実行する必要があります。そして、チェックのためにデバイス(利用可能なエミュレーター)をリストします。
リモートエミュレータをローカルのように操作できます。両方のマシンでCygwinターミナルを開いたままにしておく必要があります。そうしないと、作成したハーフブリッジを強制終了します。
ここではマシン/マシンの交換にポート10000と10001を使用しましたが、他のポートがまだ使用されていない限り、もちろん使用できます。
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>
開発者の電話は、追加のコンピューターよりも安価であり、リモートでデバッグできます。これには、エミュレータがデフォルトで提供しないオプションのセンサーがすべてあるという追加の利点があります。
テスト用に開発者の電話を入手することを強くお勧めします。
提案されたソリューションはどれも私にとってはうまくいきませんでした。私は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/ 免責事項、私は著者です。
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」を実行しているマシンではない)を備えたマシンに表示されます。
SDKを提供する2番目のマシンはありませんが、エミュレータのリッスンポート(デフォルト5554、5555)は0.0.0.0
でリッスンしている、つまりリモートマシンから到達可能であり、adb --help
connect <Host>:<port>
コマンドを示します。 adb devices
に表示されると思いますので、adb
コマンドが動作します。 Eclipseの場合、「実行/構成の実行...」を試して、ターゲットを手動に設定します。これにより、adbが接続されている場合にリモートエミュレータが含まれると推測される「デバイスセレクタ」が提供されます。試すだけの価値があります。