Android Debug Bridge (adb) es una herramienta de línea de comandos versátil que te permite comunicarte con un dispositivo. El comando adb facilita una variedad de acciones en dispositivos, como instalar y depurar apps. adb proporciona acceso a un shell Unix que puedes usar para ejecutar una variedad de comandos en un dispositivo. Es un programa cliente-servidor que incluye tres componentes:
- Un cliente, que envía comandos. El cliente se ejecuta en tu máquina de desarrollo. Puedes invocar un cliente desde un terminal de línea de comandos emitiendo un comando
adb. - Un daemon (adbd), que ejecuta comandos en un dispositivo. El daemon se ejecuta como un proceso en segundo plano en cada dispositivo.
- Un servidor, que administra la comunicación entre el cliente y el daemon. El servidor se ejecuta en tu máquina de desarrollo como un proceso en segundo plano.
adb se incluye en el paquete de herramientas de la plataforma del SDK de Android. Descarga este paquete con SDK Manager, que lo instala en android_sdk/platform-tools/. Si quieres el paquete independiente de herramientas de la plataforma del SDK de Android, descárgalo aquí.
Para obtener información sobre cómo conectar un dispositivo para usar por medio de adb y cómo usar el asistente de conexión con el objetivo de solucionar problemas comunes, consulta Cómo ejecutar apps en un dispositivo de hardware.
Cómo funciona adb
Cuando inicias un cliente de adb, el cliente primero comprueba si hay un proceso del servidor de adb en ejecución. Si no lo hay, inicia el proceso del servidor.
Cuando se inicia el servidor, este se vincula al puerto TCP 5037 local y escucha los comandos enviados desde los clientes de adb.
Nota: Todos los clientes de adb usan el puerto 5037 para comunicarse con el servidor de adb.
Luego, el servidor establece conexiones con todos los dispositivos en ejecución.
Localiza los emuladores escaneando puertos con números impares en el rango de 5555 a 5585, que es el que usan los primeros 16 emuladores. Cuando el servidor encuentra un daemon de adb (adbd), establece una conexión con ese puerto.
Cada emulador usa un par de puertos secuenciales, un puerto con número par para las conexiones de la consola y uno con número impar para las conexiones adb. Por ejemplo:
Emulador 1, consola: 5554
Emulador 1, adb: 5555
Emulador 2, consola: 5556
Emulador 2, adb: 5557
y así sucesivamente.
Como se muestra, el emulador conectado a adb en el puerto 5555 es el mismo que el emulador cuya consola se encarga de la recepción en el puerto 5554.
Una vez que el servidor establece conexiones con todos los dispositivos, puedes usar comandos de adb para acceder a esos dispositivos. Dado que el servidor administra las conexiones con los dispositivos y maneja comandos de diferentes clientes de adb, puedes controlar cualquier dispositivo desde cualquier cliente o desde una secuencia de comandos.
Cómo habilitar la depuración de adb en tu dispositivo
A fin de usar adb con un dispositivo conectado a través de USB, debes habilitar Depuración por USB en la configuración del sistema del dispositivo, que se encuentra en Opciones para desarrolladores. En Android 4.2 (nivel de API 17) y versiones posteriores, la pantalla Opciones para desarrolladores está oculta de forma predeterminada. Para que sea visible, habilita las Opciones para desarrolladores.
Ahora puedes conectar tu dispositivo con USB. Para ello, ejecuta adb devices desde el directorio android_sdk/platform-tools/. Si está conectado, verás que el nombre del dispositivo se enumera como "device" (dispositivo).
Nota: Cuando conectas un dispositivo con Android 4.2.2 (nivel de API 17) o una versión posterior, en el sistema se muestra un diálogo en el que se solicita aceptar una clave RSA para realizar la depuración a través de esta computadora. Este mecanismo de seguridad protege los dispositivos del usuario porque garantiza que la depuración a través de USB y otros comandos ADB no puedan ejecutarse a menos que puedas desbloquear el dispositivo y aceptar el contenido del diálogo.
Para obtener más información acerca de cómo establecer una conexión con un dispositivo mediante conexiones USB, lee Cómo ejecutar apps en un dispositivo de hardware.
Cómo conectarse a un dispositivo a través de Wi-Fi
Nota: Las siguientes instrucciones no se aplican a los dispositivos para Wear que ejecutan Android 11 (nivel de API 30). Si quieres obtener más información, consulta la guía en la que se indica la depuración de una app para Wear OS.
Android 11 (nivel de API 30) y las versiones posteriores admiten la implementación y la depuración de tu app de forma inalámbrica desde tu estación de trabajo con Android Debug Bridge (adb). Por ejemplo, puedes implementar tu app depurable en varios dispositivos remotos sin necesidad de conectar físicamente tu dispositivo a través de USB. Esto elimina la necesidad de resolver problemas comunes de conexión USB, como la instalación de controladores.
Android 17, junto con adb 37.0.0, presenta adb Wi-Fi 2.0, que resuelve muchos de los problemas de usabilidad de la versión anterior. En particular, el dispositivo se conectará automáticamente a la estación de trabajo cuando se conecte a una red de confianza para la depuración inalámbrica.
Antes de comenzar a usar la depuración inalámbrica, haz lo siguiente:
-
Asegúrate de que tu estación de trabajo y dispositivo estén conectados a la misma red inalámbrica.
-
Asegúrate de que tu dispositivo ejecute Android 11 (nivel de API 30) o una versión posterior si es un teléfono, o bien Android 13 (nivel de API 33) o una versión posterior si es una TV o un Wear OS. Para obtener más información, lee Cómo consultar y actualizar tu versión de Android.
-
En tu estación de trabajo, actualiza a la versión más reciente de las Herramientas de la plataforma del SDK.
Para usar la depuración inalámbrica, debes sincronizar tu dispositivo con tu estación de trabajo mediante un código QR o un código de vinculación. Ambos elementos deben estar conectados a la misma red inalámbrica. Para vincular tu dispositivo, sigue estos pasos:
Nota: Solo debes vincular tu dispositivo a la estación de trabajo una vez. El dispositivo permanecerá vinculado a tu estación de trabajo hasta que lo olvides de forma explícita o revoques las autorizaciones de depuración de adb en tu dispositivo. El dispositivo y la estación de trabajo se conectarán automáticamente cuando estén en la misma red.
-
Habilita Opciones para desarrolladores en tu dispositivo.
-
En tu dispositivo, presiona Depuración inalámbrica:
Figura 1: El mensaje de depuración inalámbrica en un teléfono Google Pixel. -
Permite la depuración inalámbrica en tu red. Ten en cuenta que, si haces clic en la casilla de verificación Permitir siempre en esta red, la red se convertirá en una red de depuración inalámbrica de confianza. Tu dispositivo siempre permitirá la depuración inalámbrica en esta red en cuanto se conecte a ella.
-
En el dispositivo, selecciona Pair using pairing code y toma nota de la dirección IP, el número de puerto y el código de vinculación que se muestran en el dispositivo.
-
En tu estación de trabajo, abre una ventana de terminal y navega hasta
android_sdk/platform-tools. -
Ejecuta
adb pair ipaddr:porten la terminal de tu estación de trabajo. Usa la dirección IP y el número de puerto que se mencionan arriba. -
Cuando se te solicite, ingresa el código de vinculación, como se muestra a continuación.
Figura 3: Debería aparecer un mensaje que indique que se vinculó correctamente tu dispositivo. -
Después de vincular el dispositivo, verifica que esté conectado. Ahora puedes usar el dispositivo de forma inalámbrica, de manera similar a como lo harías con una conexión USB.
Para desvincular tu estación de trabajo, navega a Depuración inalámbrica en tu dispositivo. Presiona el nombre de tu estación de trabajo en Dispositivos vinculados y selecciona Olvidar. Como alternativa, puedes hacer clic en Revoke adb debugging authorizations en la página Configuración de tu dispositivo para desvincular tu estación de trabajo y todas las demás estaciones de trabajo vinculadas anteriormente.
-
Si quieres activar y desactivar rápidamente la depuración inalámbrica, usa los azulejos de configuración rápida para desarrolladores de la Depuración inalámbrica, que se encuentra en Opciones para desarrolladores > Azulejos de configuración rápida para desarrolladores.
Figura 4: La opción Azulejos de configuración rápida para desarrolladores te permite activar y desactivar la depuración inalámbrica con rapidez.
Nota: Los usuarios de Android Studio pueden vincular su dispositivo con un código QR. Para ello, deben seleccionar Vincular dispositivo con un código QR y escanear el código QR que se obtiene del diálogo Vincular dispositivos por Wi-Fi en Android Studio.
Cómo resolver problemas de conexión inalámbrica
Si tienes problemas para conectarte al dispositivo de forma inalámbrica, puedes probar los siguientes pasos para solucionarlos.
Cómo comprobar si la estación de trabajo y el dispositivo cumplen con los requisitos previos
Verifica que la estación de trabajo y el dispositivo cumplan con los requisitos previos que se mencionan al comienzo de esta sección.
Verifica si la configuración de adb en tu estación de trabajo es correcta
Para verificar que la configuración de ADB en tu estación de trabajo sea correcta, abre una terminal en ella y escribe adb server-status. Verifica que el resultado muestre lo siguiente:
-
version: "37.0.0"o versiones posteriores: Si no es así, descarga la versión más reciente de las herramientas de la plataforma del SDK. -
mdns_enabled: true: Si se establece enfalse, adb no podrá descubrir automáticamente dispositivos en tu red. Para resolver este problema, debes establecer la variable de entornoADB_MDNSen1y, luego, reiniciar el servidor de adb ejecutandoadb kill-servery, luego,adb start-server. -
mdns_backend: LIBADBMDNS: Si no es así, adb usa una biblioteca obsoleta para descubrir automáticamente dispositivos en tu red. Para resolver este problema, debes establecer la variable de entornoADB_MDNS_OPENSCREENen0y, luego, reiniciar el servidor de adb ejecutandoadb kill-servery, luego,adb start-server.
Verifica si tu red admite mDNS
adb depende de mDNS para descubrir automáticamente los dispositivos vinculados y conectarse a ellos. Para verificar si tu red admite mDNS, haz lo siguiente:
-
En tu dispositivo, habilita la depuración inalámbrica como se describe en la sección Cómo conectarse a un dispositivo a través de Wi-Fi.
-
En tu estación de trabajo, abre una terminal y, luego, ingresa
adb mdns track-services --proto-text. -
Verifica que el resultado no esté vacío y que contenga un servicio tls con la dirección IP y el número de puerto de tu dispositivo. Si el resultado está vacío, tu red no admite mDNS. Resultado de ejemplo:
tls { service { instance: "adb-35121FDJH000R8-xyMD0H" service: "_adb-tls-connect._tcp" ipv4: "192.168.84.23" ipv6: "fe80:0:0:0:fc7a:299d:8d38:6c1c" port: 37895 product_model: "Pixel 8" build_version_sdk_full: "37.0" given_name: "sherifeid Pixel" serial: "35121FDJH000R8" mdns_service_version: "2.0" hostname: "Android_CXUKYJY1.local" } }
Comprueba si tu dispositivo es compatible con ADB Wi-Fi 2.0
Nota: ADB Wi-Fi 2.0 es compatible con Android 17 y versiones posteriores.
Para verificar si tu dispositivo admite ADB Wi-Fi 2.0, haz lo siguiente:
-
En tu dispositivo, habilita la depuración inalámbrica como se describe en la sección Cómo conectarse a un dispositivo a través de Wi-Fi.
-
En tu estación de trabajo, abre una terminal y, luego, ingresa
adb mdns track-services --proto-text. -
Verifica que el resultado contenga
mdns_service_version: "2.0"o una versión posterior. Si no es así, tu dispositivo no ejecuta Android 17 o una versión posterior, y no admite ADB Wi-Fi 2.0. Para actualizar a Android 17 o versiones posteriores, verifica si tu dispositivo tiene actualizaciones del sistema pendientes. Cómo consultar y actualizar tu versión de Android
Informa un nuevo problema
Si aún tienes problemas para conectarte al dispositivo de forma inalámbrica, puedes informar un problema nuevo. Asegúrate de proporcionar la siguiente información en tu informe:
- Los registros de tu dispositivo: Reproduce el problema y adjunta los registros del dispositivo.
- Los registros de adb en tu estación de trabajo:
- Establece la variable de entorno
ADB_TRACE=all. - Reinicia el servidor de adb ejecutando
adb kill-servery, luego,adb start-server. - Reproduce el problema.
- Ubica los archivos de registro: Ejecuta
adb server-statusy adjunta el archivo de registro al que se hace referencia en el resultadolog_absolute_path.
- Establece la variable de entorno
Conéctate de forma inalámbrica a un dispositivo después de una conexión USB inicial (única opción disponible en Android 10 y versiones anteriores)
Nota: Este flujo de trabajo también se aplica a Android 11 (y versiones posteriores), con la advertencia de que también implica una conexión *inicial* a través de USB físico.
Nota: Las siguientes instrucciones no se aplican a los dispositivos para Wear que ejecutan Android 10 (nivel de API 29) o versiones anteriores. Si quieres obtener más información, consulta la guía en la que se indica la depuración de una app para Wear OS.
adb normalmente se comunica con el dispositivo a través de USB, pero también puedes usar adb con Wi-Fi. Para conectar un dispositivo con Android 10 (nivel de API 29) o versiones anteriores, sigue estos pasos iniciales a través de USB:
-
Conecta tu dispositivo Android y la computadora host
adba una red Wi-Fi común. - Conecta el dispositivo a la computadora host con un cable USB.
-
Configura el dispositivo de destino para que busque una conexión TCP/IP en el puerto 5555:
adb tcpip 5555
- Desconecta el cable USB del dispositivo de destino.
- Busca la dirección IP del dispositivo Android. Por ejemplo, en un dispositivo Nexus, puedes encontrar la dirección IP en Configuración > Acerca de la tablet (o Acerca del dispositivo) > Estado > Dirección IP.
-
Para conectarte al dispositivo, busca su dirección IP:
adb connect device_ip_address:5555
-
Confirma que tu computadora host esté conectada al dispositivo de destino:
$ adb devices List of devices attached device_ip_address:5555 device
Nota: Ten en cuenta que no todos los puntos de acceso son adecuados; quizá necesites usar un punto de acceso cuyo firewall esté configurado correctamente para admitir adb.
Tu dispositivo ahora está conectado a adb.
Si se pierde la conexión a tu dispositivo adb, haz lo siguiente:
- Asegúrate de que tu host aún esté conectado a la misma red Wi-Fi que el dispositivo Android.
-
Vuelve a ejecutar el paso
adb connectpara recuperar la conexión. -
Si eso no funciona, restablece tu host
adb:adb kill-server
Luego vuelve a comenzar desde el principio.
Cómo realizar consultas de dispositivos
Antes de emitir comandos adb, es útil saber qué instancias de dispositivos están conectadas al servidor adb. Genera una lista de dispositivos asociados usando el comando devices:
adb devices -l
En respuesta, adb imprime esta información de estado para cada instancia:
- Número de serie:
adbcrea una string para identificar el dispositivo de forma única por su número de puerto. A continuación, puedes ver un ejemplo de número de serie:emulator-5554. - Estado: El estado de conexión del dispositivo puede ser uno de los siguientes:
offline: El dispositivo no está conectado aadbo no responde.device: El dispositivo está conectado al servidor deadb. Ten en cuenta que este estado no implica que el sistema Android se haya iniciado y esté funcionando, ya que el dispositivo se conecta aadbmientras el sistema aún se inicia. Este es el estado operativo normal de un dispositivo después del inicio.no device: No hay ningún dispositivo conectado.
- Descripción: Si incluyes la opción
-l, el comandodevicesdice qué es el dispositivo. Esta información es útil cuando tienes que diferenciar los distintos dispositivos conectados.
En el siguiente ejemplo, se muestra el comando devices y su resultado. Hay tres dispositivos en ejecución. Las primeras dos líneas de la lista son emuladores y la tercera línea es un dispositivo de hardware que está asociado a la computadora.
$ adb devices List of devices attached emulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for_x86_64 device:generic_x86_64 emulator-5554 device product:sdk_google_phone_x86 model:Android_SDK_built_for_x86 device:generic_x86 0a388e93 device usb:1-1 product:razor model:Nexus_7 device:flo
El emulador no aparece en la lista
El comando adb devices tiene una secuencia de comandos de caso límite que hace que los emuladores en ejecución no se muestren en el resultado de adb devices, a pesar de que están visibles en el escritorio. Esto sucede cuando se cumplen todas las condiciones siguientes:
- El servidor de
adbno se está ejecutando. - Usas el comando
emulatorcon la opción-porto-portscon un valor de puerto de número impar entre 5554 y 5584. - El puerto de número impar que elegiste no está ocupado, por lo que la conexión del puerto se puede realizar en el número de puerto especificado o, si está ocupado, el emulador cambia a otro puerto que cumple con los requisitos de 2.
- Inicias el servidor de
adbdespués de iniciar el emulador.
Una forma de evitar esta situación es dejar que el emulador elija sus propios puertos y ejecutar no más de 16 emuladores a la vez. Otra forma consiste en iniciar siempre el servidor de adb antes de usar el comando emulator, como se explica en los siguientes ejemplos.
Ejemplo 1: En la siguiente secuencia de comandos, el comando adb devices inicia el servidor de adb, pero la lista de dispositivos no aparece.
Detén el servidor de adb y escribe los siguientes comandos en el orden que se muestra. Para el nombre de AVD, proporciona un nombre de AVD válido del sistema. Para obtener una lista de nombres de AVD, escribe emulator -list-avds. El comando emulator está en el directorio android_sdk/tools.
$ adb kill-server $ emulator -avd Nexus_6_API_25 -port 5555 $ adb devices List of devices attached * daemon not running. starting it now on port 5037 * * daemon started successfully *
Ejemplo 2: En la siguiente secuencia de comandos, adb devices muestra la lista de dispositivos porque se inició primero el servidor de adb.
Para ver el emulador en el resultado de adb devices, detén el servidor de adb y vuelve a iniciarlo después de usar el comando emulator y antes de utilizar adb devices, de la siguiente manera:
$ adb kill-server $ emulator -avd Nexus_6_API_25 -port 5557 $ adb start-server $ adb devices List of devices attached emulator-5557 device
Para obtener más información sobre las opciones de línea de comandos del emulador, consulta Opciones de inicio de la línea de comandos.
Cómo enviar comandos a un dispositivo específico
Si se ejecutan varios dispositivos, debes especificar el dispositivo de destino cuando emitas el comando adb.
Para especificar el destino, sigue estos pasos:
- Usa el comando
devicespara obtener el número de serie del destino. - Una vez que tengas el número de serie, usa la opción
-scon los comandosadbpara especificar el número de serie.- Si vas a emitir muchos comandos
adb, puedes configurar la variable de entorno de$ANDROID_SERIALpara que incluya el número de serie. - Si usas
-sy$ANDROID_SERIAL,-sanula$ANDROID_SERIAL.
- Si vas a emitir muchos comandos
En el siguiente ejemplo, se obtiene la lista de dispositivos asociados y se usa el número de serie de uno de ellos para instalar helloWorld.apk en él:
$ adb devices List of devices attached emulator-5554 device emulator-5555 device 0.0.0.0:6520 device # To install on emulator-5555 $ adb -s emulator-5555 install helloWorld.apk # To install on 0.0.0.0:6520 $ adb -s 0.0.0.0:6520 install helloWorld.apk
Nota: Si emites un comando sin especificar un dispositivo de destino cuando hay varios dispositivos disponibles, adb muestra el error "adb: more than one device/emulator".
Si tienes varios dispositivos disponibles, pero solo uno es un emulador, usa la opción -e para enviar comandos al emulador. Si hay varios dispositivos, pero solo un dispositivo de hardware asociado, usa la opción -d para enviar comandos al dispositivo de hardware.
Cómo instalar una app
Puedes usar adb para instalar un APK en un emulador o dispositivo conectado con el comando install:
adb install path_to_apk
Debes usar la opción -t con el comando install cuando instales un APK de prueba. Para obtener más información, consulta -t.
Para instalar varios APKs, usa install-multiple. Esto resulta útil si descargas todos los APKs de un dispositivo específico para tu app desde Play Console y quieres instalarlos en un emulador o dispositivo físico.
Para descubrir cómo crear un archivo APK que puedas instalar en una instancia del emulador o dispositivo, consulta Cómo compilar y ejecutar tu app.
Nota: Si usas Android Studio, no necesitas usar adb directamente para instalar tu app en el emulador o dispositivo. En su lugar, Android Studio se encarga del empaquetado y de la instalación de la app.
Cómo configurar la redirección de puertos
Usa el comando forward para configurar la redirección de puertos arbitraria, que reenvía las solicitudes en un puerto host específico a un puerto diferente en un dispositivo.
En el siguiente ejemplo, se configura la redirección del puerto de host 6100 al puerto de dispositivo 7100:
adb forward tcp:6100 tcp:7100
En el siguiente ejemplo, se configura la redirección del puerto de host 6100 a local:logd:
adb forward tcp:6100 local:logd
Esto podría ser útil si intentas identificar lo que se envía a un puerto determinado en el dispositivo. Todos los datos recibidos se escribirán en el daemon de registro del sistema y se mostrarán en los registros del dispositivo.
Cómo copiar archivos desde y hacia un dispositivo
Usa los comandos pull y push para copiar archivos desde un dispositivo y hacia este. A diferencia del comando install, que solo copia un archivo APK en una ubicación específica, los comandos pull y push te permiten copiar directorios y archivos arbitrarios a cualquier lugar de un dispositivo.
Para copiar un archivo o directorio y sus subdirectorios desde el dispositivo, haz lo siguiente:
adb pull remote local
Para copiar un archivo o directorio y sus subdirectorios al dispositivo, haz lo siguiente:
adb push local remote
Reemplaza local y remote con las rutas al directorio o archivos de destino en la máquina de desarrollo (local) y en el dispositivo (remoto). Por ejemplo:
adb push myfile.txt /sdcard/myfile.txt
Cómo detener el servidor de adb
En algunos casos, es posible que debas finalizar el proceso del servidor adb y, luego, reiniciarlo para resolver el problema. Por ejemplo, este podría ser el caso si adb no responde a un comando.
Para detener el servidor de adb, usa el comando adb kill-server.
Luego podrás reiniciar el servidor emitiendo cualquier otro comando adb.
Cómo emitir comandos de adb
Ejecuta los comandos adb desde una línea de comandos en tu máquina de desarrollo o desde una secuencia de comandos con lo siguiente:
adb [-d | -e | -s serial_number] command
Si hay un solo emulador en ejecución o un solo dispositivo conectado, de forma predeterminada, el comando adb se envía a ese dispositivo. Si se ejecutan varios emuladores y se conectan varios dispositivos, debes usar la opción -d, -e o -s para especificar el dispositivo de destino al que se debe dirigir el comando.
Para consultar la lista detallada de todos los comandos adb compatibles, usa el siguiente comando:
adb --help
Cómo emitir comandos del shell
Puedes usar el comando shell para emitir comandos de dispositivo mediante adb o para iniciar un shell interactivo. Para emitir un solo comando, usa el comando shell de la siguiente manera:
adb [-d |-e | -s serial_number] shell shell_command
Para iniciar un shell interactivo en un dispositivo, usa el comando shell de la siguiente manera:
adb [-d | -e | -s serial_number] shell
Para salir de un shell interactivo, presiona Control+D o escribe exit.
Android proporciona la mayoría de las herramientas habituales de línea de comandos de Unix. Para obtener una lista de las herramientas disponibles, usa el siguiente comando:
adb shell ls /system/bin
Hay ayuda disponible para la mayoría de los comandos mediante el argumento --help.
toybox proporciona muchos de los comandos del shell.
La ayuda general que se puede aplicar a todos los comandos de toybox está disponible mediante toybox --help.
Con la versión 23 de las herramientas de plataforma de Android y versiones posteriores, adb maneja los argumentos del mismo modo que el comando ssh(1). Este cambio solucionó muchos problemas relacionados con la inserción de comandos y permite ejecutar de forma segura comandos que contienen metacaracteres del shell, como adb install Let\'sGo.apk. Sin embargo, este cambio implica que también cambió la interpretación de los comandos que contienen metacaracteres del shell.
Por ejemplo, adb shell setprop key 'two words' ahora es un error porque el shell local incluye las comillas, y el dispositivo ve adb shell setprop key two words. Para que el comando funcione, usa comillas dos veces: una para el shell local y una para el shell remoto, como haces con ssh(1). Por ejemplo, adb shell setprop key "'two words'"
funciona porque el shell local toma el nivel externo de comillas y el dispositivo aún ve el nivel interno de comillas: setprop key 'two words'. El escape también es una opción, pero suele ser más fácil usar comillas dos veces.
Consulta también la herramienta de línea de comandos Logcat, que es útil para supervisar el registro del sistema.
Cómo llamar al administrador de actividades
En un shell de adb, puedes emitir comandos con la herramienta administrador de actividades (am) para realizar varias acciones del sistema, como iniciar una actividad, forzar o detener un proceso, transmitir un intent y modificar las propiedades de la pantalla del dispositivo, entre otras.
En un shell, la sintaxis de am es la siguiente:
am command
También puedes emitir un comando del administrador de actividades directamente desde adb sin ingresar a un shell remoto. Por ejemplo:
adb shell am start -a android.intent.action.VIEW
Tabla 1: Comandos disponibles del administrador de actividades
| Comando | Descripción |
|---|---|
start [options] intent
|
Inicia una Activity especificada por intent.Consulta Especificación para argumentos de intents. Las opciones son las siguientes:
|
startservice [options] intent
|
Inicia el Service especificado por intent.Consulta Especificación para argumentos de intents. Las opciones son las siguientes:
|
force-stop package
|
Fuerza la detención de todo lo que esté asociado con package.
|
kill [options] package
|
Cierra todos los procesos asociados con package. Este comando solo cierra los procesos que es seguro cerrar y que no afectarán la experiencia del usuario.
Las opciones son las siguientes:
|
kill-all
|
Cierra todos los procesos que se ejecutan en segundo plano. |
broadcast [options] intent
|
Emite un intent de transmisión. Consulta Especificación para argumentos de intents. Las opciones son las siguientes:
|
instrument [options] component
|
Comienza la supervisión con una instancia Instrumentation.
Por lo general, el objetivo component es el formulario test_package/runner_class. Las opciones son las siguientes:
|
profile start process file
|
Inicia el generador de perfiles en process, escribe los resultados en file.
|
profile stop process
|
Detiene el generador de perfiles en process.
|
dumpheap [options] process file
|
Vuelca el montón de process, escribe en file.Las opciones son las siguientes:
|
dumpbitmaps [options] [-p process]
|
Volca información de mapa de bits desde process (nivel de API 36 y versiones posteriores).
Las opciones son las siguientes:
process, se volcarán los mapas de bits de todos los procesos.
|
set-debug-app [options] package
|
Configura la app package para depurar. Las opciones son las siguientes:
|
clear-debug-app
|
Borra el conjunto anterior del paquete para depurar con set-debug-app.
|
monitor [options]
|
Comienza a controlar la presencia de bloqueos o ANR. Las opciones son las siguientes:
|
screen-compat {on | off} package
|
Controla el modo de compatibilidad de pantalla de package.
|
display-size [reset | widthxheight]
|
Anula el tamaño de visualización del dispositivo.
Este comando es útil para probar tu app en diferentes tamaños de pantalla imitando la resolución de una pantalla pequeña en un dispositivo con pantalla grande, y viceversa.
Ejemplo: |
display-density dpi
|
Anula la densidad de la pantalla del dispositivo.
Este comando es útil para probar tu app en diferentes densidades de pantalla, ya que imita un entorno de pantalla de alta densidad usando una pantalla de baja densidad, y viceversa.
Ejemplo: |
to-uri intent
|
Imprime la especificación del intent en cuestión como un URI. |
to-intent-uri intent
|
Imprime la especificación del intent determinado como URI de intent:. |
Especificación para argumentos de intents
Para los comandos del administrador de actividades que tienen un argumento intent, puedes especificar el intent con las siguientes opciones:
Cómo llamar al administrador de paquetes (pm)
En un shell de adb, puedes emitir comandos con la herramienta administrador de paquetes (pm) para realizar acciones y consultas en paquetes de aplicaciones instalados en el dispositivo.
En un shell, la sintaxis de pm es la siguiente:
pm command
También puedes emitir un comando del administrador de paquetes directamente desde adb sin ingresar a un shell remoto. Por ejemplo:
adb shell pm uninstall com.example.MyApp
Tabla 2: Comandos disponibles del administrador de paquetes
| Comando | Descripción |
|---|---|
list packages [options] filter
|
Imprime todos los paquetes u, opcionalmente, solo aquellos cuyos nombres de paquete contengan el texto en filter. Opciones:
|
list permission-groups
|
Imprime todos los grupos de permisos conocidos. |
list permissions [options] group
|
Imprime todos los permisos conocidos y, opcionalmente, solo aquellos en group. Opciones:
|
list instrumentation [options]
|
Indica todos los paquetes de prueba. Opciones:
|
list features
|
Imprime todas las funciones del sistema. |
list libraries
|
Imprime todas las bibliotecas admitidas por el dispositivo actual. |
list users
|
Imprime todos los usuarios del sistema. |
path package
|
Imprime la ruta de acceso al APK de un package determinado.
|
install [options] path
|
Instala un paquete, especificado por path, en el sistema.Opciones:
|
uninstall [options] package
|
Quita un paquete del sistema. Opciones:
|
clear package
|
Elimina todos los datos asociados con un paquete. |
enable package_or_component
|
Habilita un paquete o componente determinado (escrito como “paquete/clase”). |
disable package_or_component
|
Inhabilita un paquete o componente determinado (escrito como “paquete/clase”). |
disable-user [options] package_or_component
|
Opciones:
|
grant package_name permission
|
Otorga permiso a una app. En los dispositivos que ejecutan Android 6.0 (nivel de API 23) y versiones posteriores, el permiso puede ser cualquier permiso declarado en el manifiesto de la app. En dispositivos con Android 5.1 (nivel de API 22) y versiones anteriores, debe ser un permiso opcional definido por la app. |
revoke package_name permission
|
Revocar un permiso de una app. En los dispositivos que ejecutan Android 6.0 (nivel de API 23) y versiones posteriores, el permiso puede ser cualquiera declarado en el manifiesto de la app. En dispositivos con Android 5.1 (nivel de API 22) y versiones anteriores, debe ser un permiso opcional definido por la app. |
set-install-location location
|
Cambia la ubicación de instalación predeterminada. Valores de ubicación:
Nota: Esto es solo para depurar; usarlo puede provocar que las apps fallen y otros comportamientos no deseados. |
get-install-location
|
Muestra la ubicación de instalación actual. Valores que se muestran:
|
set-permission-enforced permission [true | false]
|
Especifica si se debe aplicar el permiso otorgado. |
trim-caches desired_free_space
|
Recorta los archivos de caché para adaptarlos a un espacio libre determinado. |
create-user user_name
|
Crea un usuario nuevo con el user_name proporcionado e imprime el identificador de usuario nuevo. |
remove-user user_id
|
Quita el usuario con un user_id determinado y borra todos los datos asociados con ese usuario.
|
get-max-users
|
Imprime la cantidad máxima de usuarios que admite el dispositivo. |
get-app-links [options] [package]
|
Imprime el estado de verificación del dominio para el package determinado o para todos los paquetes en caso de que no se especifique ninguno. Los códigos de estado se definen de la siguiente manera:
Las opciones son las siguientes:
|
reset-app-links [options] [package]
|
Restablece el estado de verificación del dominio para un paquete determinado o para todos los paquetes en caso de que no se especifique ninguno.
Las opciones son las siguientes:
|
verify-app-links [--re-verify] [package]
|
Transmite una solicitud de verificación para el package determinado o para todos los paquetes si en caso de que no se especifique ninguno. Solo se envía si el paquete no registró una respuesta.
|
set-app-links [--package package] state domains
|
Configura de forma manual el estado de un dominio para un paquete. Para que esto funcione, el paquete debe declarar el dominio como autoVerify. Este comando no informará un error en los dominios que no se pudieron aplicar.
|
set-app-links-user-selection --user user_id [--package package]
enabled domains
|
Configura de forma manual el estado de la selección de un usuario del host para un paquete. Para que funcione, el paquete debe declarar el dominio. Este comando no informará un error en los dominios que no se pudieron aplicar.
|
set-app-links-allowed --user user_id [--package package] allowed
|
Activa o desactiva la configuración de control de vínculos verificados automáticamente para un paquete.
|
get-app-link-owners --user user_id [--package package] domains
|
Imprime los propietarios de un dominio específico para un usuario determinado en orden de prioridad bajo a alto.
|
Cómo llamar al administrador de políticas del dispositivo (dpm)
Para ayudarte a desarrollar y probar tus apps de administración de dispositivos, envía comandos a la herramienta del administrador de políticas del dispositivo (dpm). Usa la herramienta para controlar la app de administración activa o cambia los datos de estado de una política en el dispositivo.
En un shell, la sintaxis de dpm es la siguiente:
dpm command
También puedes emitir un comando del administrador de políticas del dispositivo directamente desde adb, sin ingresar a un shell remoto.
adb shell dpm command
Tabla 3: Comandos disponibles del administrador de políticas del dispositivo
| Comando | Descripción |
|---|---|
set-active-admin [options] component
|
Establece component como administrador activo.
Las opciones son las siguientes:
|
set-profile-owner [options] component
|
Establece el component como administrador activo y su paquete como propietario del perfil para un usuario existente.
Las opciones son las siguientes:
|
set-device-owner [options] component
|
Establece el component como administrador activo y su paquete como propietario del dispositivo. Las opciones son las siguientes:
|
remove-active-admin [options] component
|
Inhabilita un administrador activo. La app debe declarar android:testOnly en el manifiesto. Este comando también quita los propietarios de dispositivos y perfiles.
Las opciones son las siguientes:
|
clear-freeze-period-record
|
Borra el registro del dispositivo de los períodos de suspensión establecidos previamente para las actualizaciones de OTA del sistema. Esto es útil para evitar las restricciones de programación del dispositivo cuando se desarrollan apps que administran períodos de suspensión. Consulta Cómo administrar actualizaciones del sistema.
Compatible con dispositivos con Android 9.0 (nivel de API 28) y versiones posteriores. |
force-network-logs
|
Hace que el sistema prepare cualquier registro de red existente para que pueda ser recuperado por un DPC. Si hay conexiones o registros de DNS disponibles, el DPC recibe la devolución de llamada onNetworkLogsAvailable(). Consulta Cómo registrar la actividad de red.
Este comando tiene un límite de índice. Compatible con dispositivos con Android 9.0 (nivel de API 28) y versiones posteriores. |
force-security-logs
|
Hace que el sistema ponga cualquier registro de seguridad existente a disposición del DPC. Si hay registros disponibles, el DPC recibe la devolución de llamada onSecurityLogsAvailable(). Consulta Cómo registrar la actividad de dispositivos empresariales.
Este comando tiene un límite de índice. Compatible con dispositivos con Android 9.0 (nivel de API 28) y versiones posteriores. |
Cómo tomar una captura de pantalla
El comando screencap es una utilidad del shell para tomar una captura de la pantalla de un dispositivo.
En un shell, la sintaxis de screencap es la siguiente:
screencap filename
Para usar screencap desde la línea de comandos, escribe lo siguiente:
adb shell screencap /sdcard/screen.png
Aquí te mostramos un ejemplo de una sesión de captura de pantalla en la que se usa el shell de adb para realizar la captura de pantalla y el comando pull para descargar el archivo desde el dispositivo:
$ adb shell shell@ $ screencap /sdcard/screen.png shell@ $ exit $ adb pull /sdcard/screen.png
Como alternativa, si omites el nombre de archivo, screencap escribe la imagen en la salida estándar. Cuando se combina con la opción -p para especificar el formato PNG, puedes transmitir la captura de pantalla del dispositivo directamente a un archivo en tu máquina local.
A continuación, se muestra un ejemplo de cómo capturar una captura de pantalla y guardarla de forma local en un solo comando:
# use 'exec-out' instead of 'shell' to get raw data $ adb exec-out screencap -p > screen.png
Cómo grabar un video
El comando screenrecord es una utilidad del shell que permite grabar la pantalla de dispositivos con Android 4.4 (nivel de API 19) y versiones posteriores. La utilidad graba la actividad en pantalla en un archivo MPEG-4. Puedes usar este archivo para crear videos promocionales o de capacitación, o para depurar y realizar pruebas.
En un shell, usa la siguiente sintaxis:
screenrecord [options] filename
Para usar screenrecord desde la línea de comandos, escribe lo siguiente:
adb shell screenrecord /sdcard/demo.mp4
Detén la grabación de la pantalla presionando Control + C; de lo contrario, la grabación se detiene automáticamente a los tres minutos o cuando se alcanza el tiempo límite establecido por --time-limit.
Para comenzar a grabar la pantalla de tu dispositivo, ejecuta el comando screenrecord para grabar el video. Luego, ejecuta el comando pull para descargar el video del dispositivo en una computadora host. Aquí te mostramos un ejemplo de una sesión de grabación:
$ adb shell shell@ $ screenrecord --verbose /sdcard/demo.mp4 (press Control + C to stop) shell@ $ exit $ adb pull /sdcard/demo.mp4
La utilidad screenrecord puede grabar en cualquier resolución admitida y tasa de bits que solicites y, al mismo tiempo, conservar la relación de aspecto de la pantalla del dispositivo. De forma predeterminada, la utilidad graba en la resolución y la orientación nativas de la pantalla, con un tiempo de grabación máximo de tres minutos.
Limitaciones de la utilidad screenrecord:
- No se graba audio con el archivo de video.
- La grabación de video no está disponible para dispositivos que ejecutan Wear OS.
- Es posible que algunos dispositivos no puedan grabar en su resolución de pantalla nativa. Si tienes problemas con la grabación de la pantalla, intenta usar una resolución de pantalla más baja.
- No se admite la rotación de la pantalla durante la grabación. Si la pantalla gira durante la grabación, parte de la pantalla aparecerá cortada en el video.
Tabla 4: Opciones screenrecord
| Opciones | Descripción |
|---|---|
--help
|
Mostrar sintaxis y opciones del comando |
--size widthxheight
|
Establecer el tamaño del video: 1280x720. El valor predeterminado es la resolución nativa de la pantalla del dispositivo (si se admite); si no se admite, es 1280 x 720. Para obtener mejores resultados, usa un tamaño admitido por el codificador de código de video avanzado (AVC) de tu dispositivo. |
--bit-rate rate |
Fija la tasa de bits de video para el video en megabits por segundo. El valor predeterminado es 20 Mbps.
Puedes aumentar la tasa de bits para mejorar la calidad del video, pero si lo haces, los archivos de video serán más grandes. En el siguiente ejemplo, se fija la tasa de bits de grabación en 6 Mbps:
screenrecord --bit-rate 6000000 /sdcard/demo.mp4 |
--time-limit time |
Fija el tiempo de grabación máximo en segundos. El valor máximo predeterminado es 180 (3 minutos). |
--rotate |
Rota el resultado 90 grados. Esta función es experimental. |
--verbose |
Muestra información de registro en la pantalla de la línea de comandos. Si no configuras esta opción, la utilidad no muestra información mientras se ejecuta. |
Cómo leer perfiles de ART para apps
A partir de Android 7.0 (nivel de API 24), el tiempo de ejecución de Android (ART) recopila perfiles de ejecución para las apps instaladas, los cuales se usan para optimizar el rendimiento de las apps. Examina los perfiles recopilados para comprender qué métodos se ejecutan con frecuencia y qué clases se usan durante el inicio de una app.
Nota: Solo es posible recuperar el nombre de archivo del perfil de ejecución si tienes acceso raíz al sistema de archivos, por ejemplo, en un emulador.
Para producir un texto a partir de información del perfil, usa el siguiente comando:
adb shell cmd package dump-profiles package
Para recuperar el archivo creado, usa lo siguiente:
adb pull /data/misc/profman/package.prof.txt
Cómo restablecer dispositivos de prueba
Si pruebas tu app en varios dispositivos, quizás te convenga restablecer el dispositivo entre las pruebas, por ejemplo, para quitar datos de los usuarios y restablecer el entorno de pruebas. Puedes realizar un restablecimiento de fábrica de un dispositivo con Android 10 (nivel de API 29) o versiones posteriores mediante el comando shell testharness adb como se muestra a continuación.
adb shell cmd testharness enable
Cuando restableces el dispositivo con testharness, el dispositivo crea automáticamente una copia de seguridad de la clave RSA que permite depurar a través de la estación de trabajo actual en una ubicación persistente. Por lo tanto, una vez que se restablece el dispositivo, la estación de trabajo puede continuar depurando y emitiendo comandos adb al dispositivo sin tener que registrar de forma manual una clave nueva.
Además, para que puedas seguir probando tu app de forma más fácil y segura, cuando usas testharness para restaurar un dispositivo, también se cambian las siguientes opciones de configuración del dispositivo:
- El dispositivo configura algunos parámetros del sistema a fin de que no aparezcan los asistentes de configuración iniciales del dispositivo. El decir, el dispositivo ingresa a un estado desde el que puedes instalar, depurar y probar tu app.
- Configuración:
- Inhabilita la pantalla de bloqueo.
- Inhabilita las alertas de emergencia.
- Inhabilita la sincronización automática para las cuentas.
- Inhabilita las actualizaciones del sistema automáticas.
- Otro:
- Inhabilita las apps de seguridad preinstaladas.
Si tu app necesita detectar las opciones de configuración predeterminadas del comando testharness y adaptarse a ellas, usa
ActivityManager.isRunningInUserTestHarness().
sqlite
sqlite3 inicia el programa de la línea de comandos sqlite para examinar las bases de datos SQLite.
Incluye comandos como .dump para imprimir el contenido de una tabla y .schema con el objetivo de imprimir la declaración SQL CREATE de una tabla existente.
También puedes ejecutar comandos SQLite desde la línea de comandos, como se muestra a continuación:
$ adb -s emulator-5554 shell $ sqlite3 /data/data/com.example.app/databases/rssitems.db SQLite version 3.3.12 Enter ".help" for instructions
Nota: Solo es posible acceder a una base de datos SQLite si tienes acceso raíz al sistema de archivos, por ejemplo, en un emulador.
Para obtener más información, consulta la documentación de la línea de comandos de sqlite3.
Back-ends de adb USB
El servidor de adb puede interactuar con la pila de USB a través de dos backends. Puede usar el backend nativo del SO (Windows, Linux o macOS) o el backend de libusb.
Algunas funciones, como attach, detach y la detección de velocidad de USB, solo están disponibles cuando se usa el backend de libusb.
Puedes elegir un backend con la variable de entorno ADB_LIBUSB.
Si no se configura, adb usa su backend predeterminado. El comportamiento predeterminado varía según el SO. A partir de la versión 34 de ADB, el backend de liubusb se usa de forma predeterminada en todos los SO, excepto en Windows, en el que se usa el backend nativo de forma predeterminada. Si se configura ADB_LIBUSB, se determina si se usa el backend nativo o libusb. Consulta la página del manual de adb para obtener más información sobre las variables de entorno de adb.
Backends de mDNS de adb
ADB usa el protocolo mDNS (DNS de multidifusión) para conectar automáticamente el servidor y los dispositivos para la depuración inalámbrica. A partir de la versión 37 de ADB, el servidor de ADB se distribuye con dos backends de mDNS, libadbmdns y openscreen.
El backend predeterminado y recomendado es libadbmdns. Este comportamiento se puede cambiar con la variable de entorno ADB_MDNS_OPENSCREEN (configurada en 1 o 0). La compatibilidad con el backend de Openscreen en macOS comienza en ADB v35. Windows y Linux son compatibles a partir de la versión 34 de ADB.
Modo de ráfaga de adb (a partir de adb 36.0.0)
El modo de ráfaga es una función experimental que permite que ADB siga enviando paquetes a un dispositivo incluso antes de que este responda al paquete anterior. Esto aumenta considerablemente la capacidad de procesamiento de ADB cuando se transfieren archivos grandes y también reduce la latencia durante la depuración.
El modo ráfaga está inhabilitado de forma predeterminada. Para habilitar la función, realiza una de las siguientes acciones:
- Establece la variable de entorno
ADB_BURST_MODEcomo1. - En Android Studio, ve a la configuración del depurador en File (o Android Studio en macOS) > Settings > Build, Execution, Deployment > Debugger y establece ADB Server Burst Mode en Enabled.