Debug remoto con emulatore Android


Answers

Ecco come l'ho risolto su Windows. Ho praticamente seguito l'esempio di Christopher, ma non posso editare, quindi dovrò fare una nuova risposta.

Il problema che ho riscontrato è che ADB e l'emulatore stavano semplicemente ascoltando su 127.0.0.1, non 0.0.0.0, per me. Altrimenti avrei usato TCPMon . Immagino che sia diverso su Windows, o che sia cambiato con le ultime versioni dell'SDK. (Puoi verificare con netstat -ban .)

  1. Ho installato WinSSHD sulla macchina che esegue l'emulatore. (Credo che dovrebbe funzionare anche con FreeSSHd, ma non ho potuto ottenere un login che ci lavori.)

  2. Ho aperto la porta 22 (TCP) in Windows Firewall. (WinSSHD potrebbe essere in grado di farlo per te.)

  3. Ho creato un account virtuale nella GUI di WinSSHD.

  4. Ho creato una nuova connessione PuTTY dalla macchina di sviluppo alla macchina dell'emulatore e mi sono assicurato che potessi connettermi.

  5. Quindi ho impostato il tunneling in PuTTY: Connection -> SSH -> Tunnel

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

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

    (Collega e mantieni PuTTY aperto, per mantenere il tunnel.)

  6. Ora ho acceso l'emulatore sulla macchina remota e mi sono assicurato che ADB non fosse in esecuzione lì.

  7. Ho riavviato ADB sulla macchina di sviluppo ( adb kill-server , quindi adb start-server ).

  8. adb devices e l'emulatore remoto si sono mostrati come emulator-5554 device . Ora potrei distribuire ed eseguire la mia app direttamente da Eclipse / ADT, dove l'emulatore si presentava sotto Dispositivi virtuali come se fosse un emulatore locale.

Question

È possibile scrivere il codice / compilare un'applicazione Android su una macchina e eseguirne il debug in remoto sull'emulatore lanciato su un'altra macchina? Sono stufo dell'emulatore che mangia costantemente metà della CPU del mio portatile.




Nessuna delle soluzioni proposte ha funzionato per me. Ho iniziato dalla soluzione di Emirikol e l'ho perfezionata, poiché con la nuova API Android 21 l'emulatore appariva offline e dovevo andare alle impostazioni di Genymotion e lasciare vuoto il percorso dell'SDK di Android. E dalla riga di comando:

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

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

fonte: http://www.sarpex.co.uk/index.php/2016/10/02/connect-genymotion-emulator-remotely/ Disclaimer, sono l'autore.




La mia soluzione per Windows + AndroVM (che richiede un adattatore solo host) quando il mio servizio ssh non è stato avviato. quindi non richiede alcun software aggiuntivo.

adb connect <Andro VM IP>
adp tcpip 555

Sul prompt di cmd, esegui come amministratore:

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

aprire la porta TCP 5555 nel firewall di Windows.

Quindi, dal secondo PC eseguito:

adb connect <host ip>



Ho trovato un modo semplice per farlo se le tue due macchine si trovano nella stessa rete privata e quindi non è necessario utilizzare la crittografia SSH (che è il caso comune). Questo può essere d'aiuto in quanto un tunnel SSH può essere piuttosto lungo e difficile da installare. Ad esempio, l'installazione di un daemon SSH sotto Cygwin / Windows per la prima volta può portare a rinunciare (beh, ho rinunciato).

In Windows, quanto segue richiede l'installazione di Cygwin con il pacchetto httptunnel . Questo deve funzionare anche con Linux / httptunnel , ma non l'ho provato.

  • Esegui l'emulatore su una delle macchine (supponiamo che il suo nome host sia HostEmulator )

  • Avvia Eclipse sull'altra macchina (chiamiamola HostEclipse )

  • Aprire un terminale Cygwin su ciascuna macchina, quindi,

  • Su HostEmulator , inserisci i seguenti comandi cygwin :

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

hts significa Http Tunnel Server .

Questi due comandi creano due half-bridge che ascoltano le porte 10001 e 10001 e che reindirizzano l'I / O di queste porte alle porte locali 5554 e 5555, che sono le porte utilizzate dall'emulatore (in realtà, il primo emulatore lanciato - se ne stai eseguendo diversi useranno numeri di porte più alti come si vedono in altre risposte di questa pagina).

  • Su HostEclipse , inserisci questi :

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

htc significa Http Tunnel Client .

Questi comandi creano i semi-ponti mancanti. Ascoltano le porte locali 5554 e 5555 e reindirizzano l'I / O di queste porte ai semiponti che abbiamo creato su HostEmulator poco prima.

  • Quindi, sempre su HostEclipse , inserisci questi tre comandi :

    adb kill-server
    adb start-server
    adb devices

Questo riavvia adb in quanto altrimenti non rileva l'emulatore remoto. Deve fare un po 'di scansione all'avvio. E poi elenca i dispositivi (gli emulatori disponibili) solo per il controllo.

  • E tu ci vai.

Puoi lavorare con il tuo emulatore remoto come se fosse locale. Devi tenere i terminali Cygwin aperti su entrambe le macchine altrimenti ucciderei i mezzi ponti che hai creato.

Ho usato la porta 10000 e 10001 per gli scambi macchina / macchina qui, ma ovviamente è possibile utilizzare altre porte purché non siano già in uso.