web-dev-qa-db-fra.com

Débogage USB Android dans VirtualBox

J'essaie de faire fonctionner mono pour Android (alias monodroid) au sein d'une machine virtuelle Windows 7 sur virtualbox, mais j'ai des problèmes avec la connexion adb à mon téléphone. Lorsque je lance "adb devices" pour répertorier les périphériques présents, aucun problème ne se présente, mais lorsque j'essaie d'exécuter "adb install", logcat ou Push it se bloque. Actuellement, il y a un bogue dans virtualbox qui s'applique à cela, mais j'espérais qu'une personne plus informée que moi aurait une solution de contournement.

https://www.virtualbox.org/ticket/6620

Bien sûr, cela poserait un problème si Xamarin publiait un port Linux de son produit ou si je connaissais Java, mais je suppose que ce sont des problèmes légèrement différents.

12
Brian

Brian, une solution de contournement que vous pourriez envisager consiste à faire de votre VM hôte également un hôte ADB. Ensuite, vous pouvez simplement connecter votre client VM à ce dernier via TCP/IP. Voici l’idée générale pour cette configuration:

  1. Installez le SDK Android sur la machine hôte. Vous ne devriez avoir besoin que du paquet platform-tools contenant adb.
  2. N'autorisez pas votre client VM à s'approprier le périphérique Android. Désactivez donc toutes les règles de filtrage VirtualBox USB que vous possédez. De plus, il ne serait pas dommageable de détacher puis de rattacher le périphérique.
  3. Depuis votre client VM, exécutez adb kill-server. Faites-en un tskill adb pour plus de certitude. Si vous avez des instances en cours d'exécution d'Eclipse, vous devrez les fermer d'abord car cela lancera adb en arrière-plan. Ne sautez pas cette étape.
  4. Depuis l'hôte, exécutez adb devices. Si tout se passe bien (et il le devrait), votre appareil sera répertorié. Cela devrait ressembler à quelque chose comme ça (notez le numéro de port et désolé pour le brassage):

    * daemon not running. starting it now on port 5037 *
    * daemon started successfully *
    List of devices attached
    015d2994ed200409    device
    

À ce stade, votre hôte doit disposer d'un serveur ADB fonctionnant sur le port 5037. Vous pouvez le vérifier à partir du client VM en exécutant telnet 10.0.2.2 5037, où 10.0.2.2 est l'adresse IP par défaut des hôtes VirtualBox et 5037 est le port ADB par défaut. Noté ci-dessus.

  1. Maintenant, vous devez soit transférer les ports de votre hôte vers votre client VM, soit connecter ADB directement à votre hôte IP: port. Si vous êtes comme moi, vous constaterez que les variables ADBHOST et Android_ADB_SERVER_PORT sont mal documentées et faciles à gâcher. Pour cette raison, envisagez le transfert de port simple au-dessus de ssh (peut-être via Cygwin) de la même manière à partir du client VM:

    autossh -nNL5037:localhost:5037 -oExitOnForwardFailure=yes 10.0.2.2
    
  2. Enfin, exécutez adb devices à partir de votre client VM. Si vous voyez "le démon ne fonctionne pas", cela signifie que votre fowarding de port est foutu. Sinon, vous devriez voir votre appareil et pouvoir vous connecter toute la journée. Il convient de noter qu’un démon adb ne sera pas exécuté sur votre client VM, sauf lorsque vous utilisez réellement le pont de débogage.

J'ai utilisé un mécanisme similaire pour le débogage de périphériques connectés au réseau sur des ordinateurs distants et cela a bien fonctionné.

29
Stephen Niedzielski

Vous ne savez pas ce qui a changé dans VirtualBox depuis que la question a été posée, mais la sélection du périphérique USB dans le menu Périphériques de VirtualBox/- Périphériques -> USB -> Nom du périphérique s'est déroulée de manière transparente. Je travaille sur VirtualBox 5.1.2 r108956.

8
FUD

J'ai eu le même problème et cela m'a fait chercher pendant environ 2 heures. J'ai essayé plusieurs approches incluant toutes les solutions ci-dessus mais aucune d'entre elles n'a fonctionné.

Ma situation

Mon hôte était archlinux et l'invité était Windows 8.1. J'exécutais Flash Builder dans Windows, mais le débogage USB ne fonctionnait pas et mon appareil connecté était Nexus 5. J'ai donc suivi ces étapes.

  1. Activer le contrôleur USB depuis le menu de la virtualbox Ordinateur -> Paramètres -> USB Activer le contrôleur USB et activer le contrôleur USB 2.0 (EHCI) puis ajoutez votre périphérique (cliquez sur le bouton + à droite) puis démarrez votre machine virtuelle.
  2. Maintenant, vous devriez télécharger les derniers pilotes usb de google à partir de ici et les extraire
  3. Allez dans le panneau de configuration du gestionnaire de périphériques, cliquez avec le bouton droit de la souris sur votre périphérique, cliquez sur Pilote, puis sur Mettre à jour le pilote. Il devrait y avoir deux options: une recherche automatique ... sous-dossiers) après cela, votre appareil devrait être reconnu par Windows et il y aurait un message dans votre appareil Android pour permettre l'accès à votre appareil

Dans mon cas, je devrais copier les pilotes sur le chemin des pilotes Android de flashbuilder mais peut-être que dans votre cas, cela n'est pas nécessaire.

1
zoli

J'ai eu le même problème avec VirtualBox 5.0.14 et la solution fournie par Stephen Niedzielski ne fonctionnait pas pour moi. Si quelqu'un est toujours intéressé, vous pouvez essayer cette solution.

Mon environnement est:

  • OS hôte: Mac OS 10.11
  • OS invité dans VirtualBox: Ubuntu 14.04
  • Appareil: Galaxy S5 sous Cyanomodgen 12.1

Démarrez un point d'accès wifi dans l'hôte OS et connectez-y le périphérique Android, ou connectez les deux à l'aide d'un routeur. Dans virtualbox, définissez le mode réseau pour le système d'exploitation invité sur «Adaptateur ponté», puis sélectionnez le nom de l'adaptateur Wifi. De cette manière, l'OS hôte et le périphérique Android sont sur le même réseau.

Ensuite, dans l'appareil Android, activez le "Mode développeur" et activez "ADB sur le réseau", fourni par Cyanomodgen. (Pour les appareils dotés de la version d'origine d'Android, utilisez Google si possible sur ADV via le réseau.) Dans l'hôte OS, exécutez 'adb kill-server' et assurez-vous qu'aucune instance d'ADB n'est en cours d'exécution. Ensuite, exécutez la commande 'adb connect 192.168.2.12', ip du périphérique Android. 

Félicitations :) Maintenant, vous êtes en mesure d'utiliser ADB avec un appareil Android pour prendre des fichiers logcat ou pull et push.

1
Enis

J'avais aussi des problèmes avec ADB sur VM. J'avais un hôte Windows 10 et un client Ubuntu 14.04. La méthode autossh n'a pas fonctionné pour moi. J'ai trouvé une solution plus facile à partir d'une autre question StackOverflow . Cela nécessite que votre PC et votre appareil soient sur le même réseau WiFi.

  1. Sur votre VM client, exécutez la commande suivante: adb tcpip 5555

    Le périphérique se déconnectera de la VM car ADB est maintenant en mode TCP Au lieu du mode USB. 

  2. Pour la partie suivante, vous avez besoin de l'adresse IP de Votre appareil. Pour le trouver, lancez simplement adb Shell ip -f inet addr show wlan0

  3. Vous pouvez maintenant vous connecter à votre appareil. Sur votre client VM, exécutez:

    adb connect <Device IP>:5555

À partir de là, toutes mes sessions adb Shell, logcat et singe se sont déroulées sans interruption!

0
Nebel22