Pertanyaan Melakukan debug jarak jauh dengan emulator Android


Apakah mungkin untuk menulis kode / mengkompilasi aplikasi Android pada satu mesin dan men-debugnya dari jarak jauh pada emulator yang diluncurkan pada yang lain? Saya sakit dan lelah dengan emulator yang terus-menerus memakan setengah dari CPU laptop saya.


76
2017-11-18 07:08


asal


Jawaban:


Sebelumnya saya 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 alat seperti DDMS. Jadi Anda mungkin bisa pergi dengan hanya meneruskan port 5555 (meskipun saya hanya mencobanya sejauh ini dengan keduanya). Setiap emulator berikutnya mengambil yang berikutnya yang tersedia bahkan tuple nomor port aneh (hingga sekitar 5580, saya pikir).

Untuk referensi, saya melakukan langkah-langkah berikut di mesin 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 startup; maka perlu untuk me-restart adb agar dapat memeriksa 5554+ port lokal.

Perhatikan bahwa localhost dalam perintah ssh mengacu pada antarmuka lokal terpencil mesin.

adb devices menunjukkan emulator baru - emulator-5554 - dan saya bisa menggunakannya seolah-olah berjalan di mesin lokal saya.


61
2017-12-19 01:30



Inilah cara saya memecahkannya di Windows. Saya cukup banyak mengikuti jejak Christopher, tetapi saya tidak dapat mengedit, jadi jawaban baru harus dilakukan.

Masalahnya saya adalah bahwa ADB dan emulator hanya mendengarkan pada 127.0.0.1, bukan 0.0.0.0, untuk saya. Kalau tidak, saya akan digunakan TCPMon. Saya rasa ini berbeda pada Windows, atau telah berubah dengan versi terbaru SDK. (Anda bisa memeriksanya netstat -ban.)

  1. Saya sudah menginstal WinSSHD pada mesin yang menjalankan emulator. (Saya percaya itu harus bekerja dengan freeSSHd juga, tapi saya tidak bisa login di sana.)

  2. Saya membuka port 22 (TCP) di Windows Firewall. (WinSSHD mungkin bisa melakukannya untuk Anda.)

  3. Saya membuat akun virtual di WinSSHD GUI.

  4. Saya membuat koneksi PuTTY baru dari mesin pengembangan ke mesin emulator dan memastikan saya dapat terhubung.

  5. Kemudian saya memasang tunneling di PuTTY: Connection -> SSH -> Tunnels

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

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

    (Sambungkan dan biarkan PuTTY terbuka, untuk mempertahankan terowongan.)

  6. Sekarang saya menyalakan emulator di mesin jarak jauh dan memastikan bahwa ADB tidak berjalan di sana.

  7. Saya memulai kembali ADB di mesin pengembangan (adb kill-server, kemudian adb start-server).

  8. adb devices dan emulator remote muncul sebagai emulator-5554 device. Saya sekarang bisa menyebarkan dan menjalankan aplikasi saya langsung dari Eclipse / ADT, di mana emulator muncul di bawah Perangkat Virtual seolah-olah itu adalah emulator lokal.


19
2018-05-08 00:15



Saya menyadari pertanyaan ini benar-benar sudah tua, tetapi saya memecahkan masalahnya sedikit berbeda, dan saya butuh waktu lama untuk mencari solusi yang sepele ini.

Saya biasanya menggunakan PC atau laptop Windows7 (tergantung di mana saya bekerja) sebagai front-end saya karena saya suka GUI, namun saya lebih suka melakukan semua edit / kompilasi / debug pada server Ubuntu tanpa kepala karena semua kekuatan baris perintah yang diberikannya. Tujuan saya adalah membuat setiap sistem windows sebagai thin client sebanyak mungkin tanpa layanan tambahan (seperti sshd) atau lubang firewall.

Jadi di sini adalah senario:

  • Sistem-A: Sistem Windows7 dengan menjalankan emulator android
  • System-B: Server Ubuntu dengan SDK terinstal

Masalah seperti yang dijelaskan sebelumnya adalah bahwa emulator pada Sistem-A mengikat ke localhost, bukan antarmuka ethernet eksternal, sehingga adb pada Sistem-B tidak dapat mengakses emulator pada Sistem-A. Yang perlu Anda lakukan adalah mengatur port forwarding jarak jauh di Putty untuk koneksi SSH Anda ke System-B. Caranya adalah dengan memeriksa tombol radio "Remote" ketika Anda membuat dua terowongan sehingga arah terowongan dibalik (tunneling dari server Anda masuk ke klien Anda masuk dari).

tunnel screenshot

Akhirnya, 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 sepele untuk beralih ke sistem Windows yang berbeda jika Anda ingin mengeluarkan laptop dan membeli kopi.

Selain itu, dengan juga tunneling port 5037 dengan cara yang sama Anda benar-benar dapat meneruskan koneksi server adb Anda sehingga Anda dapat menghubungkan perangkat android nyata melalui USB pada Sistem-A, dan mengunduh gambar ke sistem dari 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, jalankan server adb pada 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, bunuh server adb di System-B

System-B$ adb kill-server

Akhirnya, restart sesi ssh Anda ke System-B dan verifikasi

System-B$ adb devices
List of devices attached
3435F6E6035B00EC        device

16
2018-04-08 03:48



Saya menemukan cara mudah untuk melakukan ini jika dua mesin Anda berada di jaringan pribadi yang sama dan oleh karena itu tidak perlu menggunakan enkripsi SSH (yang merupakan kasus umum). Ini dapat membantu karena terowongan SSH bisa sangat panjang dan sulit dipasang. Sebagai contoh, menginstal daemon SSH di bawah Cygwin / Windows untuk pertama kalinya dapat menyebabkan menyerah (baik, saya menyerah).

Di bawah Windows, yang berikut ini membutuhkan Cygwin yang diinstal dengan paket httptunnel. Ini harus bekerja di Linux / httptunnel juga tapi saya tidak mencoba.

  • Jalankan emulator di salah satu mesin (misalkan nama host-nya adalah HostEmulator)

  • Mulai Eclipse pada mesin lain (sebut saja HostEclipse)

  • Buka terminal Cygwin di setiap mesin, lalu,

  • Di HostEmulator, masukkan perintah cygwin berikut:

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

hts cara Http Tunnel Server.

Kedua perintah ini membuat dua setengah jembatan yang mendengarkan port 10001 dan 10001 dan mengarahkan redirect I / O dari port ini ke port lokal 5554 dan 5555, yang merupakan port yang digunakan oleh emulator (sebenarnya, emoer emoer pertama - jika Anda beberapa dari mereka berlari mereka akan menggunakan nomor port yang lebih tinggi seperti yang terlihat pada balasan lain dari halaman ini).

  • Di HostEclipse, masukkan yang ini:

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

htc cara Http Tunnel Client.

Perintah-perintah ini menciptakan setengah jembatan yang hilang. Mereka mendengarkan port lokal 5554 dan 5555 dan mengarahkan ulang I / O dari port ini ke setengah jembatan yang telah kita buat di HostEmulatorsebelum.

  • Kemudian, masih hidup HostEclipse, masukkan tiga perintah ini:

    adb kill-server
    adb start-server
    adb devices
    

Ini restart adb karena tidak mendeteksi emulator jauh sebaliknya. Itu harus melakukan beberapa pemindaian saat startup. Dan kemudian daftar perangkat (emulator yang tersedia) hanya untuk memeriksa.

  • Dan begitulah. 

Anda dapat bekerja dengan emulator jarak jauh Anda seolah-olah itu bersifat lokal. Anda harus menjaga terminal Cygwin terbuka pada kedua mesin jika tidak, Anda akan membunuh setengah jembatan yang Anda buat.

Saya menggunakan port 10000 dan 10001 untuk pertukaran mesin / mesin di sini, tetapi tentu saja Anda dapat menggunakan port lain selama mereka belum digunakan.


4
2017-08-24 22:04



Telepon pengembang lebih murah daripada komputer tambahan dan dapat di-debug dari jarak jauh. Ini memiliki manfaat tambahan karena memiliki semua sensor opsional yang emulator tidak hadir secara default.

Saya sangat merekomendasikan mendapatkan ponsel pengembang untuk pengujian.


2
2017-11-21 15:55



Solusi saya untuk windows + AndroVM (yang memerlukan adaptor host-saja) ketika layanan ssh saya gagal dijalankan. jadi tidak memerlukan perangkat lunak tambahan.

adb connect <Andro VM IP>
adp tcpip 555

Pada cmd prompt dijalankan sebagai admin:

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

buka port TCP 5555 di windows firewall.

Kemudian, dari PC kedua jalankan:

adb connect <host ip>

2
2018-06-05 08:50



Saya tidak memiliki mesin kedua dengan SDK ke tangan, tetapi saya perhatikan bahwa port pendengar emulator (default 5554, 5555) sedang mendengarkan 0.0.0.0, dapat dijangkau dari mesin jarak jauh, dan itu adb --help menunjukkan a connect <host>:<port> perintah. Saya berasumsi bahwa itu akan membuatnya muncul adb devices begitu adb perintah bekerja padanya. Untuk Eclipse, coba "Run / Run Configurations ..." dan atur Target ke Manual. Itu memberi Anda "pemilih perangkat" yang saya duga akan menyertakan emulator jarak jauh jika adb terhubung dengannya. Patut dicoba.


0
2017-11-18 14:38



Tak satu pun dari solusi yang diusulkan berhasil bagi saya. Saya telah mulai dari solusi Emirikol dan menyempurnakannya, seperti halnya dengan Android API> 21 emulator itu muncul secara offline dan saya harus pergi ke pengaturan Genymotion dan meninggalkan jalur SDK Android 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.


0
2017-10-02 17:25



Ketika Anda menjalankan adb, ia memulai salinan server itu sendiri jika belum dijalankan. Anda dapat mulai menyalin sendiri pada mesin dengan perangkat dan sejak SDK 4.3 Anda dapat memberikan opsi -a untuk memberi tahu server tersebut untuk mendengarkan mesin jarak jauh. Lakukan dengan perintah berikut yang tidak keluar:

adb -a -P 5037 server nodaemon

Pada mesin yang Anda ingin menggunakan perangkat dari, set ADB_SERVER_SOCKET ke tcp: xxxx: 5037 dalam variabel lingkungan (atau berikan nilai yang sama untuk setiap adb doa 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 ujung ke ujung tes secara paralel, dan untuk pengembang yang ingin berbagi perangkat nyata dari jarak jauh.

Anda dapat meneruskan port ke dan dari emulator dengan adb maju dan adb reverse, dan mereka akan muncul di mesin dengan perangkat.


0
2018-06-21 05:41