100 votes

Débogage à distance avec l'émulateur Android

Est-il possible d'écrire le code / compiler l'application Android sur une machine et de la déboguer à distance sur l'émulateur lancé sur une autre? J'en ai marre que l'émulateur mange constamment la moitié du processeur de mon ordinateur portable.

79voto

Christopher Orr Points 58514

Je n'ai pas encore essayé (ou même remarqué) adb connect commande cmb mentionné, mais je peux confirmer que la redirection de ports TCP personnelles telles que SSH — fonctionne très bien.

L'émulateur est à l'écoute sur les deux ports TCP par exemple: 5554 pour l'interface telnet et 5555 pour le contrôle de la communication avec des outils comme DDMS. Donc, vous pourriez probablement vous en sortir avec seulement la redirection de port 5555 (même si je ne l'ai essayé jusqu'à présent avec les deux). Chaque émulateur prend la prochaine pair+impair numéro de port tuple (jusqu'à 5580, je pense).

Pour référence, j'ai fait les étapes suivantes sur ma machine locale:

  • ssh -NL 5556:localhost:5554 -L 5557:localhost:5555 myuser@remote-server
  • killall adb; adb devices

Je crois que l'émulateur essaie de notifier un local bad serveur au démarrage; d'où la nécessité d'un redémarrage de la bad pour la sonde de la locale 5554+ ports.

Notez que je courais un émulateur localement trop, donc j'ai dû utiliser 5556. Aussi, l' localhost à la commande ssh se réfère à l'interface locale de la distance de la machine.

adb devices ont montré un émulateur nouveau — emulator-5556 — et je pourrais l'utiliser comme si elle était en cours d'exécution sur ma machine locale.

21voto

hheimbuerger Points 3156

Voici comment je l'ai résolu sur Windows. J'ai à peu près suivi Christopher, mais je ne peux pas le modifier, donc une nouvelle réponse.

Le problème que j'avais était que de la BAD ainsi que l'émulateur viens d'écouter sur 127.0.0.1, pas 0.0.0.0, pour moi. Sinon, je l'aurais utilisé TCPMon. Je suppose que c'est soit différent sur Windows, ou qui a changé avec la dernière version du kit de développement. (Vous pouvez vérifier avec netstat -ban.)

  1. J'ai installé WinSSHD sur la machine qui exécute l'émulateur. (Je crois qu'il devrait travailler avec freeSSHd ainsi, mais je ne pouvais pas obtenir une connexion à y travailler.)

  2. J'ai ouvert le port 22 (TCP) dans le Pare-feu Windows. (WinSSHD pourriez être en mesure de le faire pour vous.)

  3. J'ai créé un compte virtuel dans le WinSSHD GUI.

  4. J'ai créé un nouveau Mastic de connexion de l'ordinateur de développement pour l'émulateur de machine et fait en sorte que je pourrais connecter.

  5. Puis-je définir des galeries dans PuTTY: Connexion -> SSH -> Tunnels

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

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

    (Se connecter et de garder le Mastic ouvert, afin de maintenir le tunnel.)

  6. Maintenant, j'ai tiré l'émulateur sur la machine distante et fait en sorte que la BAD n'est pas en cours d'exécution il.

  7. J'ai redémarré la BAD sur le développement de la machine (adb kill-server, alors adb start-server).

  8. adb devices et la distance de l'émulateur a montré qu' emulator-5554 device. Je pouvais maintenant de déployer et d'exécuter mon application directement depuis Eclipse/ADT, où l'émulateur a montré jusqu'en vertu de Périphériques Virtuels, comme s'il était local de l'émulateur.

21voto

Patrick McKinnon Points 218

Je me rends compte que cette question est vraiment vieux, mais j'ai résolu le problème un peu différemment, et il m'a fallu un certain temps à comprendre ce solution triviale.

J'ai l'habitude d'utiliser un Windows7 PC ou ordinateur portable (selon l'endroit où je travaille) que mon front-end parce que j'aime le GUI, mais je préfère faire de mon montage/compiler/debug sur une tête Ubuntu server en raison de l'ensemble de la ligne de commande de puissance qu'il fournit. Mon objectif est de faire de chaque système de windows comme beaucoup de clients légers que possible, sans services supplémentaires (tels que des disques hybrides ssd) ou un pare-feu trous.

Voici donc le senario:

  • Système: système Windows7 avec l'émulateur android de course
  • Système B: Ubuntu server avec le SDK installé

Le problème que décrit plus haut, c'est que l'émulateur sur le Système-se lie à localhost, pas externe interface ethernet, donc de la bad sur le Système-B ne peut pas accéder à l'émulateur sur le Système A. Tout ce que vous devez faire est de configurer à distance de la redirection de port dans PuTTY SSH pour votre raccordement à l'installation-B. Le truc, c'est de cocher la case "Distance" bouton radio lorsque vous créez deux tunnels de sorte que le tunnel en direction est inversée (tunnel à partir du serveur de vous connecter au client que vous êtes connecté à partir d').

tunnel screenshot

Enfin, connectez-vous avec la bad à "localhost" sur le Système B, après l'établissement de la connexion SSH:

System-B$ adb connect localhost
connected to localhost:5555
System-B$ adb devices
List of devices attached
localhost:5555  device

Maintenant, vous pouvez télécharger des images/debug comme d'habitude, et c'est une mince affaire pour passer à un autre système de Windows si vous voulez prendre votre ordinateur portable et de prendre un peu de café.

En outre, en tunneling port 5037 de la même manière, vous pouvez faire suivre votre bad connexion au serveur de sorte que vous pouvez connecter une véritable appareil android via USB sur le Système, et de télécharger des images à partir du Système B. Dans l'ordre pour que cela fonctionne, vous devez vous assurer que la bad serveur est en cours d'exécution sur le Système, et non pas en cours d'exécution sur le Système B avant de commencer votre session SSH:

Tout d'abord, commencer la bad server sur le Système-Un (invite de commande)

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

Ensuite, kill the bad server sur le Système B

System-B$ adb kill-server

Enfin, redémarrez votre session ssh pour le Système B et vérifier

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

6voto

Shlublu Points 6199

J'ai trouvé un moyen facile de le faire si vos deux machines sont dans le même réseau privé et n'ont donc pas besoin d'utiliser le chiffrement SSH (ce qui est le cas le plus courant). Cela peut aider un tunnel SSH peut être assez long et difficile à installer. Par exemple, l'installation d'un serveur SSH sous Cygwin / Windows pour la première fois peut conduire à renoncer (et bien, j'ai abandonné).

Sous Windows, ce qui suit nécessite d'avoir Cygwin installé avec le package httptunnel. Cela doit fonctionner sous Linux / httptunnel ainsi, mais je n'ai pas essayé.

  • Exécuter l'émulateur sur une des machines (disons son nom d'hôte est HostEmulator)

  • Début de l'Éclipse sur l'autre machine (nous allons l'appeler HostEclipse)

  • Ouvrir un terminal Cygwin sur chaque machine, et puis,

  • Sur HostEmulator, entrez les informations suivantes cygwin commandes:

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

hts signifie Tunnel Http, Serveur.

Ces deux commandes permettant de créer deux demi-pont écouter les ports et 10001 10001 et rediriger les e/S de ces ports, les ports locaux 5554 et 5555, qui sont les ports utilisés par l'émulateur (en fait, la première vient de lancer l'émulateur si vous êtes plusieurs d'entre eux fonctionnent ils utilisent des numéros de port dans les autres réponses de cette page).

  • Sur HostEclipse, entrez ceux-ci:

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

htc signifie Tunnel Http, Client.

Ces commandes créent l'absence d'un demi-ponts. Ils écoutent les ports locaux 5554 et 5555 et redirige les I/O de ces ports pour les demi-ponts que nous avons créé sur HostEmulator juste avant.

  • Ensuite, toujours sur HostEclipse, entrez ces trois commandes:

    adb kill-server
    adb start-server
    adb devices
    

Ce redémarrage de la bad qu'il ne détecte pas la distance émulateur autrement. Il doit faire une numérisation de démarrage. Et puis, il répertorie les périphériques (les émulateurs) juste pour vérification.

  • Et là vous allez.

Vous pouvez travailler avec votre télécommande émulateur comme s'il était local. Vous devez garder la Cygwin bornes ouvertes sur les deux machine sinon, vous devez tuer les demi-ponts que vous avez créé.

J'ai utilisé le port 10000 et 10001 pour la machine/machine échanges ici, mais vous pouvez bien sûr utiliser d'autres ports, tant qu'ils ne sont pas déjà en cours d'utilisation.

2voto

Kevin Williams Points 1300

Un téléphone de développeur coûte moins cher qu'un ordinateur supplémentaire et peut être débogué à distance. Il présente l’avantage supplémentaire de disposer de tous les capteurs optionnels que l’émulateur ne présente pas par défaut.

Je recommande fortement d'obtenir un téléphone de développeur pour les tests.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X