Estou interessado em aprender a escrever (e, se possível, ler a partir de) a área de transferência de um dispositivo Android com raiz.
Espero fazer isso usando o ADB sobre USB e não estou interessado em instalar nenhum aplicativo para me ajudar a fazer isso, pois isso é algo que planejo raramente fazer.
Qualquer sugestão ou ajuda que me guie na direção certa seria muito apreciada.
adb
system
copy-paste
earthmeLon
fonte
fonte
Respostas:
Sim, você realmente pode fazer isso. É meio esquisito quando você inspeciona a área de transferência, mas funciona muito bem.
Primeiro, você pode inspecionar o conteúdo atual da área de transferência a
service call clipboard 1
partir de um shell adb (ou, sem casca antesadb shell service call clipboard 1
). Pode começar inicialmente em branco após uma reinicialização, por exemplo:Você pode colocar texto na área de transferência usando
service call clipboard 2
, o que basicamente leva três parâmetros - duas polegadas e a string que você deseja colocar na área de transferência:Para ser sincero, não sei ao certo quais são os dois primeiros parâmetros. Uma resposta no Stack Overflow sugeriu que o primeiro int é "número de itens no pacote" (um neste caso) e que o segundo é o comprimento da string. No entanto, usei 0 para o segundo parâmetro e ele funciona bem, e não consigo encontrar nenhuma documentação que corresponda a essa função específica ...
De qualquer forma, é basicamente criar um objeto Parcel com 3 campos e passá-lo para a área de transferência. A área de transferência descompacta o pacote e define o valor da sequência passada como o conteúdo da área de transferência. Você pode ver isso quando recuperar o valor posteriormente:
Da mesma forma, se você pressionar longamente um campo de entrada de texto e pressionar "Colar" depois de fazer isso, receberá o texto que foi definido através da
call service clipboard 2
linha acima (e parecerá completamente normal).(Os exemplos acima são do meu HTC EVO, executando o CyanogenMod 7)
fonte
'........U.n.k.n.' 'o.w.n. .p.a.c.k.' 'a.g.e. ..... ')
ao fazercall service clipboard 2
Eu usei essa metodologia e funcionou bem no 4.x, mas falhou para mim no pirulito. Enquanto procurava por uma solução alternativa, encontrei o seguinte: /programming/3391160/paste-text-on-android-emulator
não é exatamente como você queria, mas para mim, na maioria das vezes, quero copiar texto para a área de transferência é porque quero colá-lo no campo de senha.
como um bônus adicional, aqui está o meu script ( editado em 24-04-2015 para permitir espaços no texto ):
fonte
echo "$TEXT" | adb shell xargs -0 input text
Qual deve lidar com qualquer texto, exceto caracteres \ 0 (NUL). Infelizmente, versões mais antigas do adb não encaminham stdin para um comando especificado na linha de comando do adb. Isso foi corrigido nas versões adb mais recentes, mas ele precisa do Android N para funcionar .input
comando no dispositivo Android, não para o shell usado peloadb shell
. Além disso, é necessário apenas para a versão 22 do SDK e abaixo (pirulito e abaixo, acredito) de acordo com esta resposta .Aqui está uma versão aprimorada do script por galets acima. Assim como o script, ele não grava na área de transferência, mas envia entrada para o campo de entrada atualmente focado, que geralmente é o que você deseja.
Este script foi aprimorado para escapar de caracteres especiais para evitar confundir o shell do Android com eles. Isso deve permitir que qualquer sequência seja enviada inalterada. Para impedir que o
read
comando interprete uma barra invertida (à direita), adicionei -r lá.Isso foi testado usando a seguinte lista de caracteres especiais:
Aqui está o script:
fonte
Eu tentei e pesquisei um pouco no Google e parece que a abordagem de chamada-serviço-área de transferência parou de funcionar em androids mais novos, mas falhou para mim em uma versão 4.4.4 do Android. Ou seja, você precisará de um aplicativo para obter acesso à área de transferência (leitura e gravação) no adb-shell. Eu uso o clipper do majido no github . O apk também está hospedado, portanto, não é necessário compilá-lo. Quando instalado, você pode se comunicar usando comandos de transmissão (o aplicativo informará os comandos exatos). O aplicativo não requer raiz.
fonte
Outro script usado
adb shell input
para enviar caracteres pode ser encontrado aqui: https://github.com/gcb/AdbPasteEste é um script Python que pode ser clonado no github ou também baixado e executado diretamente:
fonte