Saya sebelumnya belum mencoba (atau bahkan memperhatikan) adb connect
perintah yang disebutkan cmb, tetapi saya dapat mengonfirmasi bahwa meneruskan port TCP sendiri - seperti melalui SSH - berfungsi dengan baik.
Emulator mendengarkan dua port TCP per instance: 5554 untuk antarmuka telnet dan 5555 untuk komunikasi kontrol dengan fitur seperti DDMS. Jadi Anda mungkin bisa lolos hanya dengan meneruskan port 5555 (meskipun saya baru mencobanya sejauh ini dengan keduanya). Setiap emulator berikutnya mengambil tuple nomor port genap + ganjil berikutnya yang tersedia (hingga sekitar 5580, saya kira).
Untuk referensi, saya melakukan langkah-langkah berikut di komputer lokal saya:
ssh -NL 5554:localhost:5554 -L 5555:localhost:5555 myuser@remote-server
killall adb; adb devices
Saya yakin emulator mencoba memberi tahu server adb lokal saat memulai; oleh karena itu adb harus direstart agar dapat memeriksa port 5554+ lokal.
Perhatikan bahwa perintah localhost
dalam ssh mengacu pada antarmuka lokal mesin jarak jauh .
adb devices
menunjukkan emulator baru - emulator-5554
- dan saya dapat menggunakannya seolah-olah berjalan di komputer lokal saya.
killall adb
di server, karena emulator tidak akan menerima banyak koneksi dan akanoffline
untuk mesin lokal.Inilah cara saya menyelesaikannya di Windows. Saya cukup banyak mengikuti petunjuk Christopher, tetapi saya tidak bisa mengedit, jadi jawaban baru harus dilakukan.
Masalah yang saya hadapi adalah ADB dan emulator hanya mendengarkan 127.0.0.1, bukan 0.0.0.0, untuk saya. Kalau tidak, saya akan menggunakan TCPMon . Saya kira ini berbeda di Windows, atau telah berubah dengan versi terbaru SDK. (Anda bisa mengeceknya
netstat -ban
.)Saya telah menginstal WinSSHD di mesin yang menjalankan emulator. (Saya yakin itu harus bekerja dengan freeSSHd juga, tapi saya tidak bisa login bekerja di sana.)
Saya membuka port 22 (TCP) di Windows Firewall. (WinSSHD mungkin bisa melakukannya untuk Anda.)
Saya membuat akun virtual di WinSSHD GUI.
Saya membuat koneksi PuTTY baru dari mesin pengembangan ke mesin emulator dan memastikan saya dapat terhubung.
Kemudian saya menyiapkan tunneling di PuTTY: Connection -> SSH -> Tunnels
Source port: 5554
Destination: localhost:5554
Type: Local/Auto
Source port: 5555
Destination: localhost:5555
Type: Local/Auto
(Hubungkan dan tetap buka PuTTY, untuk memelihara terowongan.)
Sekarang saya menjalankan emulator di mesin jarak jauh dan memastikan bahwa ADB tidak berjalan di sana.
Saya memulai ulang ADB di mesin pengembangan (
adb kill-server
, laluadb start-server
).adb devices
dan emulator jarak jauh muncul sebagaiemulator-5554 device
. Sekarang saya dapat menerapkan dan menjalankan aplikasi saya langsung dari Eclipse / ADT, tempat emulator muncul di Perangkat Virtual seolah-olah itu adalah emulator lokal.sumber
Saya menyadari pertanyaan ini benar-benar tua, tetapi saya menyelesaikan masalah dengan sedikit berbeda, dan saya butuh beberapa saat untuk menemukan solusi yang sepele ini.
Saya biasanya menggunakan PC Windows7 atau laptop (tergantung di mana saya bekerja) sebagai front-end saya karena saya suka GUI, namun saya lebih suka melakukan semua edit / kompilasi / debug saya pada server Ubuntu tanpa kepala karena semua kekuatan baris perintah yang diberikannya. Tujuan saya adalah membuat setiap sistem windows menjadi thin-client sebanyak mungkin tanpa layanan tambahan (seperti sshd) atau lubang firewall.
Jadi inilah senario tersebut:
Masalah seperti yang dijelaskan sebelumnya adalah emulator di System-A mengikat ke localhost, bukan antarmuka ethernet eksternal, sehingga adb di System-B tidak dapat mengakses emulator di System-A. Yang perlu Anda lakukan hanyalah mengatur penerusan port jarak jauh di PuTTY untuk koneksi SSH Anda ke System-B. Triknya adalah dengan memeriksa tombol radio "Remote" ketika Anda membuat dua terowongan sehingga arah terowongan dibalik (tunneling dari server tempat Anda masuk ke klien tempat Anda masuk).
Terakhir, hubungkan dengan adb ke "localhost" di System-B setelah membuat koneksi SSH:
System-B$ adb connect localhost connected to localhost:5555 System-B$ adb devices List of devices attached localhost:5555 device
Sekarang Anda dapat mengunduh gambar / debug seperti biasa, dan itu adalah masalah yang sepele untuk beralih ke sistem Windows yang berbeda jika Anda ingin mengeluarkan laptop Anda dan minum kopi.
Selain itu, dengan juga tunneling port 5037 dengan cara yang sama Anda sebenarnya dapat meneruskan koneksi server adb Anda sehingga Anda dapat menghubungkan perangkat android nyata melalui USB pada System-A, dan mendownload gambar dari System-B. Agar ini berfungsi, Anda perlu memastikan bahwa server adb berjalan di System-A, dan tidak berjalan di System-B sebelum memulai sesi SSH Anda:
Pertama, mulai server adb di System-A (command prompt)
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
Selanjutnya, matikan server adb di System-B
System-B$ adb kill-server
Terakhir, mulai ulang sesi ssh Anda ke System-B dan verifikasi
System-B$ adb devices List of devices attached 3435F6E6035B00EC device
sumber
Saya menemukan cara mudah untuk melakukan ini jika kedua mesin Anda berada di jaringan pribadi yang sama dan oleh karena itu tidak perlu menggunakan enkripsi SSH (yang merupakan kasus umum). Ini mungkin membantu karena terowongan SSH bisa sangat panjang dan sulit dipasang. Misalnya, menginstal daemon SSH di bawah Cygwin / Windows untuk pertama kalinya dapat menyebabkan menyerah (yah, saya menyerah).
Di bawah Windows, yang berikut mengharuskan Cygwin diinstal dengan paket httptunnel . Ini harus bekerja di Linux / httptunnel juga tetapi saya tidak mencoba.
Jalankan emulator di salah satu mesin (misalkan nama host-nya adalah HostEmulator )
Mulai Eclipse di komputer lain (sebut saja HostEclipse )
Buka terminal Cygwin di setiap mesin, dan kemudian,
Di HostEmulator , masukkan perintah cygwin berikut :
hts -F localhost:5554 10000 hts -F localhost:5555 10001
hts berarti Server Terowongan Http .
Kedua perintah ini membuat dua jembatan penghubung yang mendengarkan port 10001 dan 10001 dan yang mengalihkan I / O dari port ini ke port lokal 5554 dan 5555, yang merupakan port yang digunakan oleh emulator (sebenarnya, emulator pertama yang dibuka - jika Anda menjalankan beberapa dari mereka, mereka akan menggunakan nomor port yang lebih tinggi seperti yang terlihat di balasan lain halaman ini).
Di HostEclipse , masukkan yang berikut :
htc -F 5554 HostEmulator:10000 htc -F 5555 HostEmulator:10001
htc berarti Http Tunnel Client .
Perintah ini membuat setengah jembatan yang hilang. Mereka mendengarkan port lokal 5554 dan 5555 dan mengalihkan I / O dari port ini ke half-bridge yang telah kita buat di HostEmulator sebelumnya.
Kemudian, masih di HostEclipse , masukkan tiga perintah berikut :
adb kill-server adb start-server adb devices
Ini akan memulai ulang adb karena sebaliknya tidak mendeteksi emulator jarak jauh. Itu harus melakukan beberapa pemindaian saat startup. Dan kemudian daftar perangkat (emulator yang tersedia) hanya untuk diperiksa.
Anda dapat bekerja dengan emulator jarak jauh Anda seolah-olah itu lokal. Anda harus menjaga terminal Cygwin tetap terbuka di kedua mesin jika tidak, Anda akan mematikan setengah jembatan yang Anda buat.
Saya menggunakan port 10000 dan 10001 untuk mesin / mesin pertukaran di sini, tetapi tentu saja Anda dapat menggunakan port lain selama mereka belum digunakan.
sumber
Solusi saya untuk windows + AndroVM (yang membutuhkan adaptor khusus host) ketika layanan ssh saya gagal dimulai. jadi tidak memerlukan perangkat lunak tambahan.
adb connect <Andro VM IP> adp tcpip 555
Pada prompt cmd, jalankan sebagai admin:
netsh interface portproxy add v4tov4 listenport=5555 listenaddress=<host ip> connectport=5555 connectaddress=<Andro VM IP>
buka port TCP 5555 di firewall windows.
Kemudian, dari PC kedua jalankan:
adb connect <host ip>
sumber
Tidak ada solusi yang diusulkan yang berhasil untuk saya. Saya telah mulai dari solusi Emirikol dan menyempurnakannya, karena dengan Android API> 21 yang baru emulator muncul secara offline dan saya harus pergi ke pengaturan Genymotion dan membiarkan jalur Android SDK kosong. Dan dari baris perintah:
netsh interface portproxy add v4tov4 listenport=5555 connectport=5555 connectaddress=<emulatorIP> netsh interface portproxy add v4tov4 listenport=5554 connectport=5554 connectaddress=<emulatorIP>
sumber: http://www.sarpex.co.uk/index.php/2016/10/02/connect-genymotion-emulator-remotely/ Disclaimer, saya penulisnya.
sumber
Saat Anda menjalankan adb, ini memulai salinan server itu sendiri jika belum berjalan. Anda dapat memulai penyalinan itu sendiri di mesin dengan perangkat dan sejak sdk 4.3 Anda dapat memberinya opsi -a untuk memberi tahu server itu untuk mendengarkan mesin jarak jauh. Lakukan itu dengan perintah berikut yang tidak keluar:
adb -a -P 5037 server nodaemon
Pada mesin tempat Anda ingin menggunakan perangkat, setel ADB_SERVER_SOCKET ke tcp: xxxx: 5037 dalam variabel lingkungan (atau berikan nilai yang sama untuk setiap pemanggilan adb dengan opsi -L), di mana xxxx adalah alamat IP atau nama host dari mesin dengan perangkat, dan 5037 cocok dengan port yang Anda berikan pada perintah di atas.
Kami menggunakan ini untuk memberikan akses ke sekitar 100 emulator yang tersebar di 3 mesin ke mesin yang menjalankan pengujian ujung ke ujung secara paralel, dan untuk pengembang yang ingin berbagi perangkat nyata dari jarak jauh.
Anda dapat meneruskan port ke dan dari emulator dengan adb forward dan adb reverse, dan port tersebut akan muncul di komputer dengan perangkatnya (bukan mesin tempat Anda menjalankan 'adb forward').
sumber
adb -L tcp:remotehost:1234 devices
Jika ya, maka Anda perlu mencari tahu apakah Android Studio mendukung ADB jarak jauh atau tidak - saya tidak akan terkejut jika tetap menggunakan perangkat lokal.Saya tidak memiliki mesin kedua yang memiliki SDK, tetapi saya perhatikan bahwa port mendengarkan emulator (default 5554, 5555) sedang mendengarkan
0.0.0.0
, yaitu dapat dijangkau dari mesin jarak jauh, dan ituadb --help
menunjukkanconnect <host>:<port>
perintah. Saya berasumsi itu akan membuatnya munculadb devices
sehinggaadb
perintah bekerja di atasnya. Untuk Eclipse, coba "Run / Run Configurations ..." dan setel Target ke Manual. Itu memberi Anda "pemilih perangkat" yang menurut saya akan menyertakan emulator jarak jauh jika adb terhubung dengannya. Patut dicoba.sumber