Estoy interesado en aprender a escribir (y si es posible, leer desde) el portapapeles de un dispositivo Android rooteado.
Espero hacerlo usando ADB a través de USB y no estoy interesado en instalar ninguna aplicación para ayudarme a hacer esto, ya que esto es algo que planeo hacer raramente.
Cualquier sugerencia o ayuda para guiarme en la dirección correcta sería muy apreciada
adb
system
copy-paste
earthmeLon
fuente
fuente
Respuestas:
Sí, en realidad puedes hacer esto. Es un poco turbio cuando inspeccionas el portapapeles, pero funciona bien.
En primer lugar, puede inspeccionar el contenido actual del portapapeles
service call clipboard 1
desde un shell adb (o, sin bombardear primeroadb shell service call clipboard 1
). Puede comenzar inicialmente en blanco después de un reinicio, por ejemplo:Puede poner texto en el portapapeles utilizando
service call clipboard 2
, que básicamente toma 3 parámetros: dos entradas y la cadena que desea poner en el portapapeles:Para ser sincero, no estoy seguro de cuáles son los dos primeros parámetros. Una respuesta en Stack Overflow ha sugerido que el primer int es "número de elementos en la parcela" (uno en este caso) y que el segundo es la longitud de la cadena. Sin embargo, he usado 0 para el segundo parámetro y funciona bien, y no puedo encontrar ninguna documentación que coincida con esta función en particular ... así que tómalo por lo que vale.
En cualquier caso, básicamente se trata de crear un objeto Parcel con 3 campos y luego pasarlo al portapapeles. Luego, el portapapeles desempaqueta la parcela y establece el valor de cadena que se pasa como contenido del portapapeles. Puede ver esto cuando vaya a recuperar el valor después:
Del mismo modo, si presiona prolongadamente en un campo de entrada de texto y presiona "Pegar" después de hacer esto, obtendrá el texto que se configuró a través de la
call service clipboard 2
línea anterior (y se verá completamente normal).(Los ejemplos anteriores provienen de mi HTC EVO, que ejecuta CyanogenMod 7)
fuente
'........U.n.k.n.' 'o.w.n. .p.a.c.k.' 'a.g.e. ..... ')
al hacercall service clipboard 2
Utilicé esta metodología, y funcionó bien en 4.x, pero falló en lollipop. Mientras buscaba una solución alternativa, encontré esto: /programming/3391160/paste-text-on-android-emulator
no es exactamente como lo quería, pero para mí, la mayoría de las veces que quiero copiar texto al portapapeles es porque quiero pegarlo en el campo de contraseña.
Como un bono adicional, aquí está mi script ( editado el 24/04/2015 para permitir espacios en el texto ):
fuente
echo "$TEXT" | adb shell xargs -0 input text
que debe manejar cualquier texto, excepto los caracteres \ 0 (NUL). Desafortunadamente, las versiones anteriores de adb no reenvían stdin a un comando especificado en la línea de comandos de adb. Esto se soluciona en las nuevas versiones de adb, pero necesita Android N para funcionar .input
comando en el dispositivo Android, no para el shell utilizado poradb shell
. Además, solo es necesario para SDK versión 22 e inferior (Lollipop e inferior, creo) de acuerdo con esta respuesta .Aquí hay una versión mejorada del guión de los galets anteriores. Al igual que con ese script, no escribe en el portapapeles, sino que envía información al campo de entrada actualmente enfocado, que a menudo es lo que desea de todos modos.
Este script se ha mejorado para escapar de caracteres especiales para evitar confundir el shell de Android con ellos. Esto debería permitir que cualquier cadena se envíe sin cambios. Para evitar que el
read
comando interprete una barra diagonal inversa (final), agregué -r allí.Esto se probó utilizando la siguiente lista de caracteres especiales:
Aquí está el guión:
fuente
Lo intenté y busqué en Google un poco y parece que el enfoque del portapapeles call-service dejó de funcionar en los androides más nuevos, me falló en una versión 4.4.4 de Android. Es decir, necesitará una aplicación para obtener acceso al portapapeles (lectura y escritura) desde adb-shell. Yo uso clipper de majido en github . El apk también está alojado, por lo que no es necesario compilarlo usted mismo. Una vez instalado, puede comunicarse con él mediante comandos de difusión (la aplicación le indicará los comandos exactos). La aplicación no requiere root.
fuente
adb shell input
Puede encontrar otro script que utiliza para enviar caracteres aquí: https://github.com/gcb/AdbPasteEste es un script de Python que se puede clonar desde github, o también se puede descargar y ejecutar directamente:
fuente