Copie o texto da área de transferência para dispositivos Android via ADB


Oi Você encontrou o desejo de copiar algum texto em um dispositivo próximo? Eu gostaria que fosse tão simples quanto copiar e colar no emulador - digitar com as mãos é chato e nem sempre é conveniente.


E a tecla de atalho: pressione e o texto da área de transferência do PC começa a digitar na tela do seu telefone / tablet - parece bom, certo?


Neste artigo, falaremos sobre o uso do adb como uma ferramenta de cópia de texto e como isso pode ser feito convenientemente.


Se você é um usuário adb experiente e tem seu próprio script desse tipo, aconselho que você vá para a própria implementação e compartilhe suas opiniões sobre isso nos comentários.


O que e porque


Criaremos um pequeno script que permite digitar rapidamente o conteúdo da área de transferência em um dispositivo real:



Isso é útil se:


  • Verifique o trabalho com links ou insira um novo ip para configurar o proxy no dispositivo novamente:

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

  • Verifique a entrada de caracteres especiais ou insira dados de teste complicados:

 v3rY$ecUrEP@s$w0rD 

  • Só tinha que entrar em uma longa fila:

 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 chave de teste:

 BUexKeGHiERJ4YYbd2_Tk8XlDMVEurbKjWOWvrY 

Obviamente, você provavelmente não precisará fazer isso regularmente. Mas, de tempos em tempos, havia casos em que era necessário inserir manualmente algo não muito conveniente para isso no dispositivo.


No final, na maioria das vezes eram dados de teste ou configurações de API e, embora o script não economizasse 5 minutos, ele fazia o trabalho muito melhor.


Como


Isso pode ser feito usando o ADB (Android Debug Bridge) . Provavelmente, todos os desenvolvedores e a maioria do controle de qualidade estão familiarizados com isso, pelo menos devido à capacidade de visualizar logs no Android Studio ou diretamente, através do adb logcat . Se você nunca usou o adb antes, um exemplo de instalação no macOS pode ser visto aqui.


Estamos interessados ​​no comando adb shell input , que permite a entrada, como tap ou swipe .


Também permite transferir texto - ele começará a ser impresso no campo de entrada, que agora está em foco:


 adb shell input text <text> 

Se você inserir espaços, precisará substituí-los por %s , e caracteres especiais a serem escapados. Caso contrário, nada funcionará.


Vale a pena considerar que o adb só funciona com o alfabeto latino, números e caracteres especiais da placa ASCII, e a entrada é um pouco limitada:


  1. Não funciona com caracteres como ±§
  2. Não funciona com quebra de linha (mas você pode, por exemplo, causar quebra de linha separadamente por outro adb com o comando adb shell input keyevent 66 (enter) ou conforme descrito aqui )
  3. Não funciona com cirílico

Existe uma solução interessante para inserir esses caracteres; talvez seja possível fixar a área de transferência e qualquer texto seja impresso. É verdade que o dispositivo precisará pré-instalar o .apk com um teclado.


Importante: na forma descrita acima e abaixo, os comandos adb indicam que um dispositivo está conectado. Se houver vários, você pode fazer o seguinte:


1) Chame o comando em um dispositivo específico. -s -S
Você pode descobrir o número do dispositivo com o comando adb devices . Em seguida, use o número ao chamar o comando:


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

2) Chame o comando em um único dispositivo conectado via usb - opção -d :


 adb -d shell input text qwe 

3) Chame o comando no único emulador ativo - a opção -e :


 adb -e shell input text qwe 

Mais detalhes podem ser encontrados aqui .


Se você trabalha com vários dispositivos e esses casos são sobre você, corrija o comando adb de acordo.


Implementação


Examinaremos mais de perto a solução para o macOS, mas para outros sistemas também há uma maneira:


  • GNU / Linux
  • MacOS
  • Windows

Solução Linux

Ao mesmo tempo, os caras do KODE ( Dima Suzdalev e Dima Gaiduk ) criaram uma ótima solução Linux e a compartilharam comigo.


Funciona através do buffer X11 (se você tiver Wayland , leia abaixo) - selecione o texto da aposta e clique na tecla de atalho que chama o script.


É fácil adicionar uma tecla de atalho:


1) Coloque o xclip


2) Adicione um arquivo de script


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

3) Escreva o caminho para o script nas configurações de atalhos do teclado


Obrigado pessoal e muito respeito.


Importante: a solução acima funciona para o X11 (Xorg). Para Wayland, esta solução não é relevante. Ainda não consegui encontrar uma maneira de obter conteúdo do buffer em Wayland, a julgar pelas minhas pesquisas ainda não existe essa possibilidade. Corrija se não estiver certo.


Se você não sabe que tipo de ambiente você tem, veja aqui. Provavelmente, você tem o X11 e tudo funcionará.


Solução para macOS

Para o macOS linux, a solução não se encaixava, então tentei criar um script semelhante que simplificasse a chamada para adb shell input text <text> .


Devo dizer imediatamente - trabalhar com sed não é óbvio para mim. Tentei montar em uma equipe e suplementar levemente os diferentes regulares de substituições, o que ajudaria a escapar corretamente de caracteres especiais.
Se você descobrir como melhorar esse script, será muito legal!


É assim:


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

(o source ~/.bash_profile adicionado se o adb funcionar no console comum, mas, através do Automator (mais sobre isso mais tarde), o adb não é reconhecido. Para isso, é necessário primeiro abrir o caminho do adb - por exemplo, escrito em ~/.bash_profile .



Funciona como um adb shell input text <text> comum do adb shell input text <text> , mas


  1. A fonte do texto é pbpaste - ou seja, a área de transferência do macOS.
  2. sed processa o texto da área de transferência.
  3. Os caracteres _<>&$;()\" escapados: - & -> \&
  4. Os espaços são substituídos por um caractere especial: ` -> % s`
  5. Com um ponto de exclamação, tudo fica complicado - se alguém me explicar uma substituição semelhante ! em ! ajuda a equipe a não cair - será legal.

Solução Windows

Infelizmente ( ou não ) no Windows, não tentei fazer isso. A opção mais óbvia que me vem à mente é adaptar a solução e instalar o Cygwin . Isso permitirá que você tenha um conveniente terminal Linux à mão, o que certamente é útil.
Você precisará do pacote sed e suas dependências e do pacote cygutils-extra (fornece um comando para obter o conteúdo da área de transferência - getclip para substituir o pbpaste )


O resultado será muito semelhante à solução para o macOS:


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

O Windows 10 também tem a capacidade de obter um terminal Linux pronto para uso . Eu não tentei essa opção, mas ela deve parecer uma solução com o Cygwin.



Script em ação


Simplifique o trabalho


Você pode copiar o script para o console toda vez ou digitar o adb shell input text <something> com as mãos, mas isso não é muito conveniente. É mais fácil criar um alias ou atribuir uma tecla de atalho.


Sobre o alias para console

A dificuldade aqui é que, no próprio apelido, você ainda precisará escapar de todos os $ e " para que funcione. Ainda não o fiz, porque a tecla de atalho é mais conveniente para mim. É verdade, eu já usei esse antes - alias adp='adb shell input text' que ajudou a digitar uma palavra como adp example alguém criar um apelido para si mesmo com um script, escreva - anexe-o aqui.


Sobre a tecla de atalho que executará o script

Se falamos sobre a solução Linux - tudo depende da distribuição, mas também não é difícil.


A solução do Windows no Cygwin é uma maneira fácil .


Inicialmente, o artigo era para uso interno; portanto, o método para o macOS é descrito em mais detalhes, você pode vê-lo abaixo:


Método para o macOS:

Existem muitas opções de como fazer isso, mas o Automator é instalado por padrão - você pode criar rapidamente uma tecla de atalho usando-o.


Primeiro, execute o Automator , selecione o tipo de documento Service :



Em seguida, configure o serviço:


  • para o service receives definido no input
  • dentro da guia Actions , selecione a ação Run shell script


Agora você pode atribuir uma tecla de atalho ao novo serviço:



É isso, agora a cópia para o dispositivo deve funcionar por tecla de atalho.


É verdade que o serviço de teclas de atalho funcionará apenas em aplicativos em que a guia Services esteja no menu de aplicativos:



Não existe essa guia no aplicativo Zeplin para macOS, por isso não funciona lá. Talvez outros aplicativos para o uso de scripts possam contornar essa limitação; por enquanto, eu tive um caminho através do Automator.


Também vale a pena considerar que uma tecla de atalho pode interceptar o mesmo Google Chrome ou outro aplicativo e executar sua ação em vez de um script.


Isso é tudo


Espero que este artigo seja útil e ajude você a simplificar a solução desses problemas em seu trabalho.

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


All Articles