5 votes

Comment faire ADB sur 'wifi' (en fait dans le même PC) pour un dispositif émulé ?

J'essaie d'utiliser adb sur 'wifi' pour mon appareil émulé. Je suis en train d'émuler un appareil sur mon ordinateur et je voulais utiliser Android Studio pour lui envoyer un APK, mais via les prises réseau, et non via l'USB émulé. Je sais qu'avec Android Studio, tout fonctionne, mais j'ai besoin de le faire de cette manière.

Je suis ce tutoriel : https://developer.Android.com/studio/command-line/adb.html#wireless

Je commence par

~/Android/Sdk/emulator$ ./emulator -avd Pixel_XL_API_27

Ensuite, je vois que le débogage USB est activé. Je fais alors

./adb tcpip 5555
restarting in TCP mode port: 5555

Notez que . /adb tcpip 5555 est arbitraire. Je n'ai même pas spécifié quel appareil devait redémarrer et se connecter à 5555. Et si j'avais 2 émulateurs en marche ?

Je devrais débrancher maintenant pour un périphérique USB normal, mais je vais dans les options du développeur dans mon téléphone émulé et je désactive le débogage USB.

Je vois également que l'adresse IP dans les paramètres du système téléphonique émulé est 192.168.232.2

alors je me retrouve avec :

./adb connect 192.168.232.2
unable to connect to 192.168.232.2:5555: Connection timed out

J'ai aussi fait ça :

./adb devices 
List of devices attached
emulator-5554   device

./adb connect 192.168.232.2:5554
unable to connect to 192.168.232.2:5554: Connection timed out

UPDATE :

Selon Tutoriel Android sur ADB Sur mon ordinateur, un serveur fonctionne sur le port 5037. L'appareil Android (mon émulateur dans ce cas) exécute un démon et mon script adb dans Sdk/platform-tools est un client. Si je veux exécuter un client dans ma machine virtuelle, je dois avoir un serveur qui tourne dessus. Mais à la place, je peux simplement transférer le port TCP 5037 de la VM vers le port TCP 5037 de la machine hôte. Je l'ai fait avec tcptunnel en procédant comme suit :

./tcptunnel --local-port=5037 --remote-host=192.168.122.1 --remote-port=5037 --stay-alive

alors si je lance adb sur ma VM, il va se connecter au démon adb sur ma machine hôte qui va parler avec le serveur adb de mon émulateur. Quand je lance adb devices dans la VM sans le forward tcp, il essaie de démarrer un nouveau serveur. Si je tue ce serveur et ouvre le tcpforwarded et recommence, il n'essaie pas de créer un nouveau serveur. C'est un bon signal. Cependant, tcptunnel me donne ceci :

build_tunnel: connect(): Connection refused

Quelque chose bloque la connexion

UPDATE 2 :

Il s'avère que tcptunnel n'est pas nécessaire, parce que adb a le H qui me permet de spécifier l'IP où le serveur fonctionne. Cependant, je ne sais pas s'il est possible de la spécifier dans Android Studio. Quoi qu'il en soit :

./adb -H 192.168.122.1 devices
List of devices attached
* cannot start server on remote host
error: cannot connect to daemon at tcp:192.168.122.1:5037: Connection refused

3voto

Guerlando OCs Points 125

J'ai oublié que le démon adb se lie à localhost et j'ai essayé d'accéder à partir de 192.168.122.x .

Avec socat J'ai pu rediriger le client ADB de ma VM vers le démon ADB de ma machine hôte qui a établi la connexion avec le serveur ADB (mon téléphone émulé).

Ma machine hôte était joignable à l'adresse 192.168.122.1 de la machine virtuelle, mais le adb daemon était lié à 127.0.0.1 o localhost . Je viens de le faire :

#on host machine:
socat tcp-listen:5037,bind=192.168.122.1,reuseaddr,fork tcp:localhost:5037

#on virtual machine:
socat tcp-listen:5037,bind=localhost,reuseaddr,fork tcp:192.168.122.1:5037

Assurez-vous que vous avez tué le serveur adb sur la machine virtuelle en faisant /path/to/android/sdk/platform-tools/adb kill-server . Le serveur ADB essaie toujours de se lier sur 5037 s'il n'y a rien, donc si socat est déjà lancé des deux côtés et que la adb server est en cours d'exécution sur le host machie, lorsque vous lancez Android studio sur la VM, il se connectera automatiquement au serveur adb extérieur, qui se connectera à votre téléphone émulé.

Vous n'avez pas besoin d'Android Studio sur la machine virtuelle pour effectuer des tests. Vous pouvez simplement faire /path/to/android/sdk/platform-tools/adb devices sur la machine virtuelle pour voir si socat le redirigera vers le démon adb sur l'hôte, qui listera le téléphone émulé.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X