Cette question est identique à Comment arrêter l'émulateur Android via la ligne de commande .
Cependant, après avoir essayé la solution suggérée à partir de la première réponse, adb emu kill
ne s'est pas avéré efficace.
J'automatise les tests unitaires pour une application Android. Mon script bash tourne sur une machine sans tête. Il crée un appareil Android à l'aide de Android create avd
et exécute emulator
avec l'attribut -no-window
. Il compile ensuite le projet de test, se connecte à l'émulateur à l'aide de adb
, installe le projet et exécute mes tests. Tout cela fonctionne bien.
Maintenant, je dois terminer le processus de l'émulateur, et comme le message référencé, je ne peux le faire qu'avec kill -9
.
Le didacticiel Google Gestion des AVD à partir de la ligne de commande indique uniquement comment arrêter les émulateurs dans un environnement graphique.
Toute aide est appréciée.
Peut-être essayez-vous d'utiliser adb kill-server
cela devrait-il fonctionner pour vous?
ou
adb -s emulator-5554 emu kill
, où emulator-5554
est le nom de l'émulateur.
Pour les utilisateurs Ubuntu, j'ai trouvé une bonne commande pour arrêter tous les émulateurs en cours d'exécution (Merci à @uwe )
adb devices | grep emulator | cut -f1 | while read line; do adb -s $line emu kill; done
Pour arrêter tous les émulateurs en cours d'exécution, nous utilisons cette commande:
adb devices | grep emulator | cut -f1 | while read line; do adb -s $line emu kill; done
L'autre réponse n'a pas fonctionné pour moi (sous Windows 7). Mais cela a fonctionné:
telnet localhost 5554
kill
Pourquoi ne pas simplement faire
adb reboot bootloader
Parfois la commande
adb -s emulator-5554 emu kill
n'a pas fonctionné sur mes serveurs ou bureaux CI, pour une raison inconnue Je pense que sous Windows, il est correct de tuer le processus de qemu, tout comme
Taskkill /IM qemu-system-x86_64.exe /F /T
Aucune des solutions n'a fonctionné pour moi. Je devais utiliser la méthode telnet, y compris l'authentification:
AUTH=$(cat "$HOME/.emulator_console_auth_token")
expect << EOF
spawn telnet localhost 5554
expect "OK"
send "auth $AUTH\r"
expect "OK"
send "kill\r"
expect "OK"
send "exit\r"
EOF
Le script complet peut être obtenu avec une licence gratuite de https://github.com/kullo/Android-emulator-tools
Mise à jour: semble que cela ne ferme toujours pas de manière fiable la console et les ports ADB (par exemple, 5554,5555)
J'utilise cette ligne, divisée en plusieurs lignes pour plus de lisibilité:
adb devices |
Perl -nle 'print $1 if /emulator-(\d+).device$/' |
xargs -t -l1 -i bash -c "
( echo auth $(cat $HOME/.emulator_console_auth_token) ;
echo kill ;
yes ) |
telnet localhost {}"
adb kill-server va tuer tous les émulateurs et redémarrer le serveur.
Pour automatiser cela, vous pouvez utiliser n'importe quel script ou application pouvant envoyer une chaîne à un socket. Personnellement, j'aime nc (netcat) sous cygwin. Comme je l'ai déjà dit, je l'utilise comme ceci:
$ echo kill | nc -w 2 localhost 5554
(Cela signifie envoyer la chaîne "kill" au port 5554 sur localhost et mettre fin à netcat après 2 secondes.)
Liste des périphériques connectés Emulator-5584 Host Emulator-5580 Host Emulator-5576 Host Emulator-5572 Host Emulator-5568 Host Emulator-5564 Host -5560 Host
C:\Utilisateurs\Administrateur> adb -s emulator-5584 emu kill Erreur: impossible de se connecter au port TCP 5584: impossible de se connecter à 127.0.0.1:5584: Aucune connexion n'a pu être établie car l'ordinateur cible activement refusé. (10061)
REMARQUE: l'interface graphique de l'émulateur n'est pas en cours d'exécution, mais elle est toujours affichée.
SOLUTION:
adb kill-server
démarrez l'émulateur en utilisant:
emulator.exe -netdelay none -netspeed full -avd Nexus_5X_API_19
J'espère que cela t'aidera!
Je peux le fermer avec:
adb Shell reboot -p