Copie texto del portapapeles a dispositivos Android a través de ADB


Hola ¿Has encontrado el deseo de copiar algo de texto en un dispositivo que se encuentra cerca? Me gustaría que fuera tan simple como copiar y pegar en el emulador: escribir con las manos es aburrido y no siempre es conveniente.


Y qué pasa con las teclas de acceso rápido: haga clic en él y el texto del portapapeles de la PC comienza a escribirse en la pantalla de su teléfono / tableta; suena bien, ¿verdad?


En este artículo hablaremos sobre el uso de adb como herramienta de copia de texto y cómo se puede hacer esto de manera conveniente.


Si eres un usuario experimentado de adb y tienes tu propio script de este tipo, te aconsejo que vayas a la implementación en sí y que compartas tus opiniones sobre esto en los comentarios.


Que y por que


Haremos un pequeño script que le permite escribir rápidamente el contenido del portapapeles en un dispositivo real:



Esto es útil si:


  • Verifique el trabajo con enlaces o ingrese una nueva ip para configurar el proxy en el dispositivo nuevamente:

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

  • Verifique la entrada de caracteres especiales o ingrese datos de prueba complicados:

 v3rY$ecUrEP@s$w0rD 

  • Solo tenía que ingresar una línea larga:

 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: 

  • O clave de prueba:

 BUexKeGHiERJ4YYbd2_Tk8XlDMVEurbKjWOWvrY 

Por supuesto, lo más probable es que no tenga que hacer esto regularmente. Pero de vez en cuando, tenía casos en los que era necesario ingresar manualmente algo que no era muy conveniente para esto en el dispositivo.


Al final, la mayoría de las veces eran datos de prueba o configuraciones de API, y aunque el script no ahorró 5 minutos, hizo el trabajo mucho mejor.


Como?


Esto se puede hacer usando ADB (Android Debug Bridge) . Probablemente, todos los desarrolladores y la mayoría del control de calidad están familiarizados con él, al menos debido a la capacidad de ver registros dentro de Android Studio o directamente, a través de adb logcat . Si no ha usado adb antes, puede ver un ejemplo de instalación en macOS aquí.


Estamos interesados ​​en el comando de adb shell input , que permite la entrada, como tap o swipe .


También le permite transferir texto: comenzará a imprimirse en el campo de entrada, que ahora está enfocado:


 adb shell input text <text> 

Si ingresa espacios, debe reemplazarlos con %s y caracteres especiales para escapar. De lo contrario, nada funcionará.


Vale la pena considerar que adb solo funciona con el alfabeto latino, números y caracteres especiales de la placa ASCII, y la entrada es algo limitada:


  1. No funciona con caracteres como ±§
  2. No funciona con el ajuste de línea (pero puede, por ejemplo, causar un adb shell input keyevent 66 línea por separado por otro adb con el adb shell input keyevent 66 (enter) o como se describe aquí )
  3. No funciona con cirílico

Hay una solución interesante para ingresar dichos caracteres, quizás sea posible sujetar el portapapeles y luego se imprimirá cualquier texto. Es cierto que el dispositivo deberá preinstalar .apk con un teclado.


Importante: en la forma descrita arriba y abajo, los comandos adb implican que un dispositivo está conectado. Si hay varios, puede hacer lo siguiente:


1) Llame al comando en un dispositivo específico. -S -s
Puede encontrar el número de dispositivo con el comando adb devices . Luego use el número cuando llame al comando:


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

2) Llame al comando en un solo dispositivo conectado a través de usb - opción -d :


 adb -d shell input text qwe 

3) Llame al comando en el único emulador activo: la opción -e :


 adb -e shell input text qwe 

Más detalles se pueden encontrar aquí .


Si trabaja con varios dispositivos y estos casos son sobre usted, corrija el comando adb en consecuencia.


Implementación


Echaremos un vistazo más de cerca a la solución para macOS, pero para otros sistemas también hay una manera:


  • GNU / Linux
  • MacOS
  • Ventanas

Solución Linux

En un momento, los chicos de KODE ( Dima Suzdalev y Dima Gaiduk ) hicieron una gran solución de Linux y la compartieron conmigo.


Funciona a través del búfer X11 (si tiene Wayland , lea a continuación): selecciona el texto para la apuesta y luego hace clic en la tecla de acceso rápido que llama al guión.


Es fácil agregar una tecla de acceso rápido:


1) Poner xclip


2) Agregar un archivo de script


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

3) Escriba la ruta al script en la configuración de Atajos para el teclado


Gracias chicos y un gran respeto.


Importante: la solución anterior funciona para X11 (Xorg). Para Wayland, esta solución no es relevante. Todavía no pude encontrar una manera de obtener contenido del búfer en Wayland, a juzgar por mis búsquedas todavía no existe esa posibilidad. Correcto si no es correcto.


Si no sabe qué tipo de entorno tiene, mire aquí. Lo más probable es que tengas X11 y todo funcionará.


Solución para macOS

Para macOS linux, la solución no encajaba, así que intenté hacer un script similar que simplificara la llamada al adb shell input text <text> .


Debo decir de inmediato: trabajar con sed no es obvio para mí. Traté de unirme en un equipo y complementar ligeramente los diferentes clientes habituales de los reemplazos, lo que ayudaría a escapar correctamente de los caracteres especiales.
Si descubres cómo mejorar este script, ¡será genial!


Se ve así:


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

( source ~/.bash_profile agrega si adb funciona en la consola normal, pero a través de Automator (más sobre eso más adelante) adb no se reconoce, para esto primero debe abrir la ruta a adb, por ejemplo, escrito en ~/.bash_profile ).



Funciona como un adb shell input text <text> normal adb shell input text <text> , pero


  1. La fuente del texto es pbpaste , es decir, el portapapeles de macOS.
  2. sed procesa texto desde el portapapeles.
  3. Los caracteres _<>&$;()\" escapan: - & -> \&
  4. Los espacios se reemplazan con un carácter especial: ` -> % s`
  5. Con un signo de exclamación, todo es complicado, ¡si alguien me explica tal reemplazo ! en ! ayuda al equipo a no caerse, será genial.

Solución de Windows

Desafortunadamente ( o no ) en Windows, no he intentado hacer esto. La opción más obvia que se me ocurre es adaptar la solución e instalar Cygwin . Esto le permitirá tener a mano un conveniente terminal de Linux, lo que sin duda es útil.
Necesitará el paquete sed y sus dependencias y el paquete cygutils-extra (proporciona un comando para obtener el contenido del portapapeles - getclip para reemplazar pbpaste )


El resultado será muy similar a la solución para macOS:


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

Windows 10 también tiene la capacidad de sacar una terminal de Linux de la caja . No he probado esta opción, pero debería parecer una solución con Cygwin.



Guión en acción


Simplifica el trabajo


Puede copiar el script en la consola cada vez o escribir el adb shell input text <something> con las manos, pero esto no es muy conveniente. Es más fácil crear un alias o asignar una tecla de acceso rápido.


Sobre alias para consola

La dificultad aquí es que en el alias en sí mismo necesitarás escapar de todos los $ y " para que funcione. Todavía no he hecho esto, porque la tecla de acceso rápido es más conveniente para mí. Es cierto, usé esto antes - alias adp='adb shell input text' que ayudó a escribir una palabra como adp example . Si alguien hace un alias para sí mismo con un script, escriba - adjúntelo aquí.


Sobre la tecla de acceso rápido que ejecutará el script

Si hablamos de la solución de Linux, todo depende de la distribución, pero tampoco es difícil.


La solución de Windows en Cygwin es una manera fácil .


Inicialmente, el artículo era para uso interno, por lo que el método para macOS se describe con más detalle, puede verlo a continuación:


Método para macOS:

Hay muchas opciones sobre cómo hacer esto, pero Automator está instalado de forma predeterminada: puede crear rápidamente una tecla de acceso rápido con él.


Primero, ejecute Automator , seleccione el tipo de documento Service :



Luego configure el servicio:


  • para el service receives conjunto no input
  • dentro de la pestaña Actions , seleccione la acción Run shell script


Ahora puede asignar una tecla de acceso rápido al nuevo servicio:



Eso es todo, ahora copiar en el dispositivo debería funcionar mediante teclas de acceso rápido.


Es cierto que el servicio de teclas rápidas solo funcionará en aplicaciones donde la pestaña Services encuentra en el menú de la aplicación:



No existe dicha pestaña en la aplicación Zeplin para macOS, por lo que no funciona allí. Quizás otras aplicaciones para el uso de scripts pueden eludir esta limitación; por ahora, he tenido acceso a Automator.


También vale la pena considerar que una tecla de acceso rápido puede interceptar el mismo Google Chrome u otra aplicación y realizar su acción en lugar de un script.


Eso es todo


Espero que este artículo sea útil y lo ayude a simplificar la solución de tales problemas en su trabajo.

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


All Articles