Android
shell adb
Buscar..
Introducción
adb shell
abre un shell de Linux en un dispositivo o emulador de destino. Es la forma más potente y versátil de controlar un dispositivo Android a través de adb
.
Este tema se dividió de ADB (Android Debug Bridge) debido a que llegó al límite de ejemplos, muchos de los cuales involucraban el comando adb shell
.
Sintaxis
- shell adb [-e escape] [-n] [-tt] [-x] [comando]
Parámetros
Parámetro | Detalles |
---|---|
-mi | elegir el carácter de escape, o "ninguno"; por defecto '~' |
-norte | no leer de stdin |
-T | deshabilitar la asignación de PTY |
-t | forzar la asignación de PTY |
-X | deshabilitar códigos de salida remotos y separación stdout / stderr |
Envíe texto, tecla presionada y eventos táctiles al dispositivo Android a través de ADB
ejecute el siguiente comando para insertar el texto en una vista con un enfoque (si es compatible con la entrada de texto)
Enviar texto en SDK 23+
adb shell "input keyboard text 'Paste text on Android Device'"
Si ya está conectado a su dispositivo a través de adb
:
input text 'Paste text on Android Device'
Enviar texto antes del SDK 23
adb shell "input keyboard text 'Paste%stext%son%sAndroid%sDevice'"
No se aceptan espacios como entrada, reemplácelos con% s.
Enviar eventos
Para simular pulsando la tecla de encendido del hardware.
adb shell input keyevent 26
o alternativamente
adb shell input keyevent POWER
Incluso si no tiene una clave de hardware, puede utilizar un keyevent
para realizar la acción equivalente
adb shell input keyevent CAMERA
Enviar evento táctil como entrada
adb shell input tap Xpoint Ypoint
Enviar evento swipe como entrada
adb shell input swipe Xpoint1 Ypoint1 Xpoint2 Ypoint2 [DURATION*]
* DURACIÓN es opcional, por defecto = 300ms. fuente
Obtenga puntos X e Y habilitando la ubicación del puntero en la opción de desarrollador.
ADB shell script de ejemplo
Para ejecutar un script en Ubuntu, Create script.sh haga clic con el botón derecho en el archivo, agregue permiso de lectura / escritura y marque el permiso para ejecutar el archivo como programa .
Abra el emulador de terminal y ejecute el comando ./script.sh
Script.sh
for (( c=1; c<=5; c++ ))
do
adb shell input tap X Y
echo "Clicked $c times"
sleep 5s
done
Para una lista completa de números de eventos
- lista corta de varios eventos interesantes ADB Shell Input Events
- documentación de referencia https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_POWER .
Listar paquetes
Imprime todos los paquetes, opcionalmente solo aquellos cuyo nombre de paquete contiene el texto en <FILTER>.
adb shell pm list packages [options] <FILTER>
All <FILTER>
adb shell pm list packages
Atributos:
-f
para ver su archivo asociado.
-i
Ver el instalador para los paquetes.
-u
para incluir también paquetes desinstalados.
-u
También incluye paquetes desinstalados.
Atributos que filtran:
-d
para paquetes deshabilitados.
-e
para paquetes habilitados.
-s
para paquetes del sistema.
-3
para paquetes de terceros.
--user <USER_ID>
para un espacio de usuario específico para consultar.
Otorgar y revocar permisos API 23+
Una línea única que ayuda a otorgar o revocar permisos vulnerables.
otorgamiento
adb shell pm grant <sample.package.id> android.permission.<PERMISSION_NAME>
revocando
adb shell pm revoke <sample.package.id> android.permission.<PERMISSION_NAME>
Concesión de todos los permisos de tiempo de ejecución a la vez en la instalación (-g)
adb install -g /path/to/sample_package.apk
Imprimir datos de la aplicación
Este comando imprime todos los datos relevantes de la aplicación:
- código de versión
- nombre de la versión
- permisos concedidos (Android API 23+)
- etc.
adb shell dumpsys package <your.package.id>
Grabando la pantalla
Grabación de la pantalla de dispositivos con Android 4.4 (nivel de API 19) y superior:
adb shell screenrecord [options] <filename>
adb shell screenrecord /sdcard/demo.mp4
(presiona Ctrl-C para detener la grabación)
Descarga el archivo desde el dispositivo:
adb pull /sdcard/demo.mp4
Nota: detenga la grabación de la pantalla presionando Ctrl-C, de lo contrario, la grabación se detiene automáticamente a los tres minutos o el límite de tiempo establecido por -
--time-limit
.
adb shell screenrecord --size <WIDTHxHEIGHT>
Establece el tamaño del video: 1280x720. El valor predeterminado es la resolución de pantalla nativa del dispositivo (si es compatible), 1280x720 si no es así. Para obtener los mejores resultados, use un tamaño compatible con el codificador de codificación avanzada de video (AVC) de su dispositivo.
adb shell screenrecord --bit-rate <RATE>
Establece la tasa de bits de video para el video, en megabits por segundo. El valor predeterminado es 4Mbps. Puede aumentar la velocidad de bits para mejorar la calidad del video, pero al hacerlo se obtienen archivos de películas más grandes. El siguiente ejemplo establece la tasa de bits de grabación a 5Mbps:
adb shell screenrecord --bit-rate 5000000 /sdcard/demo.mp4
adb shell screenrecord --time-limit <TIME>
Establece el tiempo máximo de grabación, en segundos. El valor predeterminado y máximo es 180 (3 minutos).
adb shell screenrecord --rotate
Gira la salida 90 grados. Esta característica es experimental.
adb shell screenrecord --verbose
Muestra información de registro en la pantalla de línea de comandos. Si no configura esta opción, la utilidad no muestra ninguna información mientras se ejecuta.
Nota: Esto podría no funcionar en algunos dispositivos.
El comando de grabación de pantalla no es compatible con las versiones de Android anteriores a 4.4.
El comando screenrecord es una utilidad de shell para grabar la pantalla de dispositivos con Android 4.4 (nivel de API 19) y superior. La utilidad registra la actividad de la pantalla en un archivo MPEG-4.
Cambio de permisos de archivos usando el comando chmod
Tenga en cuenta que para poder cambiar los envíos de archivos, su dispositivo debe estar rooteado, ¡ su
binario no viene con los dispositivos de fábrica!
Convención:
adb shell su -c "chmod <numeric-permisson> <file>"
Permisos numéricos construidos a partir de secciones de usuario, grupo y mundo.
Por ejemplo, si desea que todos puedan cambiar el archivo para que todos puedan leerlo, escribirlo y ejecutarlo, este será su comando:
adb shell su -c "chmod 777 <file-path>"
O
adb shell su -c "chmod 000 <file-path>"
Si intenta denegar cualquier permiso para ello.
1er dígito: especifica el permiso del usuario, 2º dígito : especifica el permiso de grupo, 3º dígito : especifica el permiso del mundo (otros).
Permisos de acceso:
--- : binary value: 000, octal value: 0 (none)
--x : binary value: 001, octal value: 1 (execute)
-w- : binary value: 010, octal value: 2 (write)
-wx : binary value: 011, octal value: 3 (write, execute)
r-- : binary value: 100, octal value: 4 (read)
r-x : binary value: 101, octal value: 5 (read, execute)
rw- : binary value: 110, octal value: 6 (read, write)
rwx : binary value: 111, octal value: 7 (read, write, execute)
Establecer fecha / hora a través de adb
El formato SET predeterminado es MMDDhhmm[[CC]YY][.ss]
, eso es (2 dígitos cada uno)
Por ejemplo, para configurar el 17 de julio a las 10:10 am, sin cambiar el año actual, escriba:
adb shell 'date 07171010.00'
Consejo 1: el cambio de fecha no se reflejará de inmediato, y se producirá un cambio notable solo después de que el reloj del sistema avance al minuto siguiente.
Puede forzar una actualización adjuntando una TIME_SET
intento TIME_SET
a su llamada, de esta manera:
adb shell 'date 07171010.00 ; am broadcast -a android.intent.action.TIME_SET'
Consejo 2: para sincronizar el reloj de Android con su máquina local:
Linux:
adb shell date `date +%m%d%H%M%G.%S`
Windows (PowerShell):
$currentDate = Get-Date -Format "MMddHHmmyyyy.ss" # Android's preferred format
adb shell "date $currentDate"
Ambos consejos juntos:
adb shell 'date `date +%m%d%H%M%G.%S` ; am broadcast -a android.intent.action.TIME_SET'
El formato SET predeterminado es 'YYYYMMDD.HHmmss'
adb shell 'date -s 20160117.095930'
Consejo: para sincronizar el reloj de Android con su máquina local (basada en Linux):
adb shell date -s `date +%G%m%d.%H%M%S`
Opciones de desarrollador abierto
adb shell am start -n com.android.settings/.DevelopmentSettings
Navegará tu dispositivo / emulador a la sección Developer Options
.
Generando una transmisión "Boot Complete"
Esto es relevante para las aplicaciones que implementan un BootListener
. Prueba tu aplicación matando tu aplicación y luego prueba con:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -c android.intent.category.HOME -n your.app/your.app.BootListener
(Reemplace your.package/your.app.BootListener
con los valores adecuados).
Ver contenido de almacenamiento externo / secundario
Ver contenido:
adb shell ls \$EXTERNAL_STORAGE
adb shell ls \$SECONDARY_STORAGE
Ver ruta:
adb shell echo \$EXTERNAL_STORAGE
adb shell echo \$SECONDARY_STORAGE
matar un proceso dentro de un dispositivo Android
A veces, el logcat de Android se ejecuta infinitamente con errores provenientes de algún proceso que usted no posee, agotando la batería o dificultando la depuración de su código.
Una forma conveniente de solucionar el problema sin reiniciar el dispositivo es localizar y detener el proceso que causa el problema.
Desde logcat
03-10 11:41:40.010 1550-1627/? E/SomeProcess: ....
Observe el número de proceso: 1550
Ahora podemos abrir una cáscara y matar el proceso. Tenga en cuenta que no podemos matar el proceso de la root
.
adb shell
Dentro de la cáscara podemos verificar más sobre el proceso usando
ps -x | grep 1550
Y mátalo si queremos:
kill -9 1550