Copiez le texte du presse-papiers sur les appareils Android via ADB


Salut Avez-vous rencontré le désir de copier du texte sur un appareil à proximité? Je voudrais que ce soit aussi simple que copier-coller sur l'émulateur - taper avec vos mains est ennuyeux et pas toujours pratique.


Et qu'en est-il des raccourcis clavier: cliquez dessus et le texte du presse-papiers du PC commence à taper sur l'écran de votre téléphone / tablette - ça sonne bien, non?


Dans cet article, nous parlerons de l'utilisation d'Adb en tant qu'outil de copie de texte et de la manière de le faire facilement


Si vous êtes un utilisateur adb expérimenté et que vous avez votre propre script de ce type - je vous conseille d'aller à l'implémentation elle-même et de partager vos réflexions à ce sujet dans les commentaires.


Quoi et pourquoi


Nous allons faire un petit script qui vous permet de taper rapidement le contenu du presse-papiers sur un vrai appareil:



Ceci est utile si:


  • Vérifiez le travail avec des liens ou entrez une nouvelle adresse IP pour configurer à nouveau le proxy sur l'appareil:

http://example.com:8080/foo 192.168.1.100 

  • Vérifiez la saisie de caractères spéciaux ou entrez des données de test délicates:

 v3rY$ecUrEP@s$w0rD 

  • Juste eu à entrer une longue file:

 Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute: 

  • Ou clé de test:

 BUexKeGHiERJ4YYbd2_Tk8XlDMVEurbKjWOWvrY 

Bien sûr, vous n'aurez probablement pas à le faire régulièrement. Mais de temps en temps, j'avais des cas où il était nécessaire d'entrer manuellement quelque chose de pas très pratique pour cela sur l'appareil.


En fin de compte, il s'agissait le plus souvent de données de test ou de paramètres d'api, et bien que le script n'ait pas enregistré 5 minutes, il a fait le travail beaucoup mieux.


Comment?


Cela peut être fait en utilisant ADB (Android Debug Bridge) . Tous les développeurs et la plupart des AQ le connaissent probablement, du moins en raison de la possibilité d'afficher les journaux dans Android Studio ou directement, via adb logcat . Si vous n'avez jamais utilisé adb auparavant, un exemple d'installation sur macOS peut être vu ici.


Nous sommes intéressés par la commande d' adb shell input , qui permet une entrée, telle que tap ou swipe .


Il vous permet également de transférer du texte - il commencera à être imprimé dans le champ de saisie, qui est maintenant au point:


 adb shell input text <text> 

Si vous entrez des espaces, vous devez les remplacer par %s et les caractères spéciaux à échapper. Sinon, rien ne fonctionnera.


Il convient de noter que adb ne fonctionne qu'avec l'alphabet latin, les chiffres et les caractères spéciaux de la plaque ASCII, et la saisie est quelque peu limitée:


  1. Ne fonctionne pas avec des caractères comme ±§
  2. Ne fonctionne pas avec l'habillage de ligne (mais vous pouvez, par exemple, provoquer séparément l'habillage de ligne par un autre adb avec la adb shell input keyevent 66 (enter) ou comme décrit ici )
  3. Ne fonctionne pas avec cyrillique

Il existe une solution de contournement intéressante pour saisir de tels caractères, il sera peut-être possible d'y attacher le presse-papiers et ensuite tout texte sera imprimé. Certes, l'appareil devra préinstaller .apk avec un clavier.


Important: sous la forme décrite ci-dessus et ci-dessous, les commandes adb impliquent qu'un périphérique est connecté. S'il y en a plusieurs, vous pouvez effectuer les opérations suivantes:


1) Appelez la commande sur un appareil spécifique. -s -S
Vous pouvez trouver le numéro d'appareil avec la commande adb devices . Utilisez ensuite le numéro lors de l'appel de la commande:


 $ adb devices List of devices attached 023db62er9dd7d2b device $ adb -s 023db62er9dd7d2b shell input text qwe 

2) Appelez la commande sur un seul appareil connecté via USB - option -d :


 adb -d shell input text qwe 

3) Appelez la commande sur le seul émulateur actif - l'option -e :


 adb -e shell input text qwe 

Plus de détails peuvent être trouvés ici .


Si vous travaillez avec plusieurs appareils et que ces cas vous concernent, corrigez la commande adb en conséquence.


Implémentation


Nous allons examiner de plus près la solution pour macOS, mais pour d'autres systèmes, il existe également un moyen:


  • GNU / Linux
  • MacOS
  • Windows

Solution Linux

À un moment donné, les gars de KODE ( Dima Suzdalev et Dima Gaiduk ) ont fait une excellente solution Linux et l'ont partagée avec moi.


Il fonctionne via le tampon X11 (si vous avez Wayland , lisez ci-dessous) - vous sélectionnez le texte du pari, puis cliquez sur le raccourci clavier qui appelle le script.


Il est facile d'ajouter un tel raccourci clavier:


1) Mettez xclip


2) Ajouter un fichier script


 #!/bin/bash adb shell input text `xclip -o` 

3) Écrivez le chemin du script dans les paramètres de raccourcis du clavier


Merci les gars et grand respect.


Important: la solution ci-dessus fonctionne pour X11 (Xorg). Pour Wayland, cette solution n'est pas pertinente. Je ne pouvais toujours pas trouver un moyen d'obtenir du contenu à partir du tampon dans Wayland, à en juger par mes recherches, il n'y a pas encore une telle possibilité. Correct sinon pas juste.


Si vous ne savez pas quel type d’environnement vous avez, regardez ici. Très probablement, vous avez X11 et tout fonctionnera.


Solution pour macOS

Pour macOS linux, la solution ne convenait pas, j'ai donc essayé de créer un script similaire qui simplifierait l'appel au adb shell input text <text> .


Je dois dire tout de suite - travailler avec sed n'est pas évident pour moi. J'ai essayé de rassembler en une seule équipe et de compléter légèrement les différents habitués des remplacements, ce qui aiderait à échapper correctement les caractères spéciaux.
Si vous découvrez comment améliorer ce script, ce sera très cool!


Cela ressemble à ceci:


 source ~/.bash_profile adb shell input text $(pbpaste | sed -e 's/[_<>|&$;()\"]/\\&/g' -e 's/ /\%s/g' -e 's/!+/!/g') 

( source ~/.bash_profile ajouté si adb fonctionne dans la console standard, mais via Automator (plus de détails plus tard) adb n'est pas reconnu, pour cela, vous devez d'abord remonter le chemin vers adb - par exemple, écrit en ~/.bash_profile .)



Fonctionne comme un adb shell input text <text> normal adb shell input text <text> , mais


  1. La source du texte est pbpaste - c'est-à-dire le presse-papiers macOS.
  2. sed traite le texte du presse-papiers.
  3. Les caractères _<>&$;()\" échappés: - & -> \&
  4. Les espaces sont remplacés par un caractère spécial: ` -> % s`
  5. Avec un point d'exclamation, tout est compliqué - si quelqu'un m'explique un tel remplacement ! on ! aide l'équipe à ne pas tomber - ce sera cool.

Solution Windows

Malheureusement ( ou pas ) sous Windows, je n'ai pas essayé de le faire. L'option la plus évidente qui me vient à l'esprit est d'adapter la solution et d'installer Cygwin . Cela vous permettra d'avoir un terminal Linux pratique à portée de main, ce qui est certainement utile.
Vous aurez besoin du paquet sed et de ses dépendances et du cygutils-extra (fournit une commande pour obtenir le contenu du presse-papiers - getclip pour remplacer pbpaste )


Le résultat sera très similaire à la solution pour macOS:


 adb shell input text $(getclip | sed -e 's/[_<>|&$;()\"]/\\&/g' -e 's/ /\%s/g' -e 's/!+/!/g') 

Windows 10 a également la possibilité de sortir un terminal Linux de la boîte . Je n'ai pas essayé cette option, mais elle devrait ressembler à une solution avec Cygwin.



Script en action


Simplifiez le travail


Vous pouvez copier le script sur la console à chaque fois ou taper du adb shell input text <something> avec vos mains, mais ce n'est pas très pratique. Il est plus facile de créer un alias ou d'attribuer un raccourci clavier.


À propos de l'alias pour la console

La difficulté ici est que dans l'alias lui-même, vous devrez toujours échapper tous les $ et " pour que cela fonctionne. Je ne l'ai pas encore fait, car le raccourci clavier est plus pratique pour moi. Vrai, j'ai utilisé celui-ci auparavant - alias adp='adb shell input text' qui aidé à taper un mot comme adp example . Si quelqu'un se fait un alias avec un script, écrivez - attachez-le ici.


À propos du raccourci clavier qui exécutera le script

Si nous parlons de solution Linux - tout dépend de la distribution, mais ce n'est pas non plus difficile.


La solution Windows sur Cygwin est un moyen simple.


Initialement, l'article était à usage interne, donc la méthode pour macOS est décrite plus en détail, vous pouvez le voir ci-dessous:


Méthode pour macOS:

Il existe de nombreuses options pour ce faire, mais Automator est installé par défaut - vous pouvez rapidement créer un raccourci clavier en l'utilisant.


Tout d'abord, exécutez Automator , sélectionnez le type de document Service :



Configurez ensuite le service:


  • pour le service receives définir no input
  • dans l'onglet Actions , sélectionnez l'action Run shell script


Vous pouvez maintenant attribuer un raccourci clavier au nouveau service:



Voilà, maintenant la copie sur l'appareil devrait fonctionner par raccourci clavier.


Certes, le service de raccourci ne fonctionne que dans les applications où l'onglet Services trouve dans le menu des applications:



Il n'y a pas un tel onglet dans l'application Zeplin pour macOS, donc cela ne fonctionne pas. Peut-être que d'autres applications pour utiliser des scripts peuvent contourner cette limitation; pour l'instant, j'ai eu un moyen de passer par Automator.


Il convient également de considérer qu'un raccourci clavier peut intercepter le même Google Chrome ou une autre application et effectuer son action au lieu d'un script.


C'est tout


J'espère que cet article vous sera utile et vous aidera à simplifier la solution de ces problèmes dans votre travail.

Source: https://habr.com/ru/post/fr412551/


All Articles