The Android Developer Challenge is back! Submit your idea before December 2.

Android Debug Bridge (adb)

Android Debug Bridge (ADB) es una herramienta de línea de comandos versátil que te permite comunicarte con un dispositivo. El comando adb permite realizar una variedad de acciones en el dispositivo, como instalar y depurar apps, y proporciona acceso a un shell de Unix que puedes usar para ejecutar distintos 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 como un proceso en segundo plano en tu máquina de desarrollo.

adb está incluido en el paquete de herramientas Android SDK Platform-Tools. Puedes descargar este paquete con el Administrador de SDK, que lo instala en android_sdk/platform-tools/. O, si quieres el paquete independiente de herramientas Android SDK Platform-Tools, puedes descargarlo 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 para solucionar problemas comunes, consulta Cómo ejecutar apps en un dispositivo de hardware.

Cómo funciona ADB

Cuando inicias un cliente 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 con el puerto TCP local 5037 y busca comandos enviados por los clientes de ADB; 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, establece una conexión con ese puerto. Ten en cuenta que 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 de 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 al 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 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

Para 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 y versiones posteriores, la pantalla "Opciones para desarrolladores" se encuentra oculta de forma predeterminada. Para poder visualizarla, dirígete a Configuración > Acerca del teléfono y presiona Número de compilación siete veces. Cuando regreses a la pantalla anterior, verás Opciones para desarrolladores en la parte inferior.

En algunos dispositivos, la pantalla "Opciones para desarrolladores" puede encontrarse en otro lugar o tener un nombre diferente.

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 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 Ejecutar apps en un dispositivo de hardware.

Cómo conectarse a un dispositivo a través de Wi-Fi

En general, ADB se comunica con el dispositivo a través de USB, pero también puedes usar ADB a través de una red Wi-Fi después de realizar la configuración inicial a través de USB, como se describe a continuación. Sin embargo, si estás desarrollando una app para Wear OS, deberías consultar la guía para depurar una app para Wear OS, que incluye instrucciones especiales para usar ADB con Wi-Fi y Bluetooth.

  1. Conecta tu dispositivo Android y la computadora host ADB a una red Wi-Fi común a la que ambos puedan acceder. 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.
  2. Si te conectas a un dispositivo Wear OS, desactiva Bluetooth en el teléfono que esté sincronizado con el dispositivo.
  3. Conecta el dispositivo a la computadora host con un cable USB.
  4. Configura el dispositivo de destino para que busque una conexión TCP/IP en el puerto 5555.
        adb tcpip 5555
        
  5. Desconecta el cable USB del dispositivo de destino.
  6. 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 teléfono ) > Estado > Dirección IP. O bien, en un dispositivo Wear OS, puedes buscar la dirección IP en Settings > Wi-Fi Settings > Advanced > IP address (Configuración > Configuración de Wi-Fi > Configuración avanzada > Dirección IP).
  7. Para conectarte al dispositivo, busca su dirección IP.
        adb connect device_ip_address
        
  8. Confirma que tu computadora host esté conectada al dispositivo de destino:
        $ adb devices
        List of devices attached
        device_ip_address:5555 device
        

¡Ya estás listo para empezar!

Si se pierde la conexión de ADB:

  1. Asegúrate de que tu host aún esté conectado a la misma red Wi-Fi a la que esté conectado el dispositivo Android.
  2. Vuelve a conectarte ejecutando el paso adb connect nuevamente.
  3. Como alternativa, 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, resultará útil conocer las instancias del emulador o dispositivo conectadas al servidor de ADB. Puedes generar 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: es una string creada por ADB para identificar de forma exclusiva un dispositivo por su número de puerto, por ejemplo: emulator-5554.
  • Estado: El estado de conexión del dispositivo puede ser uno de los siguientes:
    • offline: El dispositivo no está conectado a ADB o no responde.
    • device: El dispositivo ahora está conectado al servidor de ADB. Ten en cuenta que este estado no implica que el sistema Android se haya iniciado y esté funcionando, ya que el dispositivo se conecta a ADB mientras el sistema aún se inicia. No obstante, después del inicio, este es el estado operativo normal de un dispositivo.
    • no device: No hay un dispositivo conectado.
  • Descripción: Si incluyes la opción -l, el comando devices dice 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 los emuladores están visibles en el escritorio. Esto sucede cuando se cumplen todas las condiciones siguientes:

  1. El servidor de ADB no se está ejecutando.
  2. Utilizas el comando emulator con la opción -port o -ports con un valor de puerto de número impar entre 5554 y 5584.
  3. 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.
  4. Inicias el servidor de ADB después de iniciar el emulador.

Una forma de evitar esta situación es dejar que el emulador elija sus propios puertos y no ejecutar más de 16 emuladores a la vez. Otra forma es siempre iniciar 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 luego vuelve a iniciarlo después de usar el comando emulator y antes de usar el comando 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 Cómo usar parámetros 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, usa el comando devices para obtener el número de serie del destino. Una vez que tengas el número de serie, usa la opción -s con los comandos ADB para especificar el número de serie. Si vas a emitir muchos comandos ADB, puedes configurar la variable del entorno $ANDROID_SERIAL para que incluya el número de serie. Si usas -s y $ANDROID_SERIAL, -s anula $ANDROID_SERIAL.

En el siguiente ejemplo, se obtiene la lista de dispositivos asociados y luego se usa el número de serie de uno de los dispositivos para instalar helloWorld.apk en él.

    $ adb devices
    List of devices attached
    emulator-5554 device
    emulator-5555 device

    $ adb -s emulator-5555 install helloWorld.apk
    

Nota: Si emites un comando sin especificar un dispositivo de destino cuando hay varios dispositivos disponibles, ADB genera un error.

Si tiene varios dispositivos disponibles, pero solo uno es un emulador, usa la opción -e para enviar comandos al emulador. Asimismo, 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 obtener más información sobre cómo crear un archivo APK que puedas instalar en una instancia del emulador o dispositivo, consulta Cómo compilar y ejecutar tu app.

Ten en cuenta que, 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

Puedes usar el comando forward para configurar la redirección de puertos arbitraria, que redirecciona las solicitudes de un puerto específico del host a otro puerto 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
    

Cómo copiar archivos a un dispositivo o desde este

Usa los comandos pull y push para copiar archivos a un dispositivo y desde 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 foo.txt /sdcard/foo.txt
    

Cómo detener el servidor de ADB

En algunos casos, podría ser necesario que finalices el proceso del servidor de ADB y luego lo reinicies para resolver el problema (p. ej., 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.

Referencia de comandos ADB

Puedes emitir comandos ADB desde una línea de comandos en tu máquina de desarrollo o desde una secuencia de comandos. El uso es el 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 hay varios emuladores ejecutándose o diferentes dispositivos conectados, debes usar la opción -d, -e o -s para especificar el dispositivo de destino al que debe dirigirse el comando.

En la tabla siguiente se incluyen todos los comandos ADB admitidos y se explican su significado y uso.

Tabla 1: Opciones y comandos ADB disponibles

Opciones globales Descripción
-a Busca en todas las interfaces de red en lugar de solo en localhost.
-d Dirige un comando ADB al único dispositivo USB conectado. Muestra un error cuando hay más de un dispositivo USB conectado.
-e Dirige un comando ADB al único emulador que esté en ejecución. Devuelve un error cuando se ejecuta más de un emulador.
-s serial_number Dirige un comando ADB a un dispositivo específico, al que se hace referencia por su número de serie asignado por ADB (como “emulator-5556”). Anula el valor del número de serie almacenado en la variable de entorno $ANDROID_SERIAL. Consulta Cómo enviar comandos a un dispositivo específico.
-H server El nombre del host del servidor de ADB. El valor predeterminado es localhost.
-P port El número de puerto del servidor de ADB. El valor predeterminado es 5037.
-L socket Busca en el socket del servidor de ADB proporcionado. El valor predeterminado es tcp:localhost:5037.
Comandos generales Descripción
devices [-l] Imprime una lista de todos los dispositivos. Usa la opción -l para incluir las descripciones del dispositivo. Para obtener más información, consulta Cómo realizar consultas de dispositivos.
help Imprime una lista de comandos ADB compatibles y sus descripciones.
version Imprime el número de versión de ADB.
run-as package_name Ejecuta los comandos en un dispositivo como en una app (especificada usando package_name). Esto te permite ejecutar comandos en ADB como si la app que especificas estuviera ejecutando el comando (es decir, tienes el mismo acceso de dispositivo que la app), sin requerir acceso con permisos de administrador. Esto puede ser necesario cuando se usa ADB en un dispositivo sin derechos de administrador o en un emulador con una imagen de Play Store. La app debe poder depurarse.
Comandos de red Descripción
connect host[:port] Se conecta a un dispositivo a través de TCP/IP. Si no especificas un puerto, se usa el puerto predeterminado, 5555.
disconnect [host | host:port] Se desconecta del dispositivo TCP/IP especificado que se ejecuta en el puerto establecido. Si no especificas un host o un puerto, se desconectan todos los dispositivos de todos los puertos TCP/IP. Si especificas un host, pero no un puerto, se utiliza el puerto predeterminado, 5555.
forward --list Detalla todas las conexiones de socket redireccionadas.
forward [--no-rebind] local remote Redirige las conexiones de socket del puerto local establecido al puerto remoto especificado en el dispositivo. Puedes especificar puertos locales y remotos de las siguientes maneras:
  • tcp:port. Para elegir cualquier puerto abierto, establece el valor local en tcp:0.
  • localabstract:unix_domain_socket_name.
  • localreserved:unix_domain_socket_name.
  • localfilesystem:unix_domain_socket_name.
  • dev:character_device_name.
  • jdwp:pid.
forward --remove local Quita la conexión de sockets redireccionada que se especificó.
reverse --list Detalla todas las conexiones de sockets inversas del dispositivo.
reverse [--no-rebind] remote local Revierte una conexión de sockets. La opción --no-rebind significa que la reversión falla si el socket especificado ya está vinculado mediante un comando reverse anterior. Puedes especificar el puerto para los argumentos locales y remotos de las siguientes maneras:
  • tcp:port. Para elegir cualquier puerto abierto, establece el valor remoto en tcp:0.
  • localabstract:unix_domain_socket_name.
  • localreserved:unix_domain_socket_name.
  • localfilesystem:unix_domain_socket_name.
reverse --remove remote Quita la conexión de sockets inversa especificada del dispositivo.
reverse --remove-all Quita todas las conexiones de sockets inversas del dispositivo.
Comandos de transferencia de archivos Descripción
push local remote Copia los archivos y directorios desde el dispositivo local (computadora) a una ubicación remota en el dispositivo.
pull [-a] remote local Copia archivos y directorios remotos a un dispositivo. Usa la opción -a para conservar la marca de tiempo y el modo del archivo.
sync  [system|vendor|oem|data|all] Sincroniza una compilación local desde la ubicación especificada en $ANDROID_PRODUCT_OUT al dispositivo. Se copian todos los archivos modificados de la partición especificada. La opción predeterminada es sincronizar todas las particiones. Este comando solo se usa cuando compilas el origen de la plataforma de Android. Los desarrolladores de apps no necesitan usar este comando.

El sistema de compilación de Android establece de manera automática la variable de entorno $ANDROID_PRODUCT_OUT para que contenga la ubicación de las imágenes del sistema. En general, no necesitarás establecer $ANDROID_PRODUCT_OUT cuando hagas la adb sync, aunque puede ser útil si no estás en un árbol de compilación (pero tienes uno) o si estás realizando sincronizaciones entre árboles de compilación sin pasar de uno al otro.


    $ANDROID_PRODUCT_OUT=/out/target/product/generic
    adb sync
    
Comandos de instalación de la app Descripción
install [options] package Envía paquetes al dispositivo y los instala. Las opciones posibles son las siguientes:
  • --abi abi-identifier: Instala de manera automática una app para una ABI específica.
  • -l: Reenvía la app de bloqueo.
  • -r: Reemplaza la app existente.
  • -t: Permite los paquetes de prueba. Si el APK se compila con un SDK de vista previa del desarrollador (si targetSdkVersion es una letra en lugar de un número), debes incluir la opción -t con el comando de instalación en caso de que instales un APK de prueba. Para obtener más información, consulta la opción -t.
  • -s: Instala la app en la tarjeta SD.
  • -d: Permite regresar a una versión anterior del código (solo paquetes de depuración).
  • -g: Otorga todos los permisos de tiempo de ejecución.
install-multiple [options] packages

Es igual a la opción install más lo siguiente:

-p: Instalación parcial de la app.

uninstall [-k] package Quita este paquete de apps del dispositivo. Agrega la opción -k para mantener los directorios de datos y de la memoria caché.
Comandos de copia de seguridad y restauración Descripción
backup [-f file] [-apk | -noapk] [-obb | -noobb] [-shared | -noshared] [-all] [-system | [-nosystem] package_names Escribe un archivo de los datos del dispositivo para el archivo. Si no especificas un nombre de archivo, el archivo predeterminado es backup.adb. La lista de paquetes es opcional cuando especificas las opciones -all y -shared. A continuación, se describen los usos para las demás opciones:
  • -apk | -noapk: Crea o no crea una copia de seguridad de los archivos .apk. El valor predeterminado es -noapk.
  • -obb | -noobb: Crea o no crea una copia de seguridad de los archivos .obb. El valor predeterminado es -noobb.
  • -shared | -noshared: Crea o no crea una copia de seguridad del almacenamiento compartido. El valor predeterminado es -noshared.
  • -all: Crea una copia de seguridad de todas las apps instaladas.
  • -system | -nosystem: Incluye o no incluye apps del sistema al realizar copias de seguridad de todas las apps instaladas (-all). El valor predeterminado es -system.
restore file Restaura los contenidos del dispositivo desde el archivo.
Comandos de depuración Descripción
bugreport path Imprime un bugreport de la ruta especificada. Si la ruta es un directorio, el informe de errores se guarda en ese directorio utilizando el nombre de archivo predeterminado, bugreport.zip. Los dispositivos que no admiten informes de errores comprimidos se imprimen en stdout.
jdwp Imprime una lista de los procesos JDWP disponibles en un dispositivo determinado. Usa forward jdwp:pid para conectarse a un proceso JDWP específico. Por ejemplo:
adb forward tcp:8000 jdwp:472
jdb -attach localhost:8000
logcat [-help] [option] [filter-spec] Imprime datos de registro en la pantalla. Para obtener información sobre el comando logcat y la variable de entorno $ANDROID_LOG_TAGS, consulta Cómo filtrar el resultado del registro en la página logcat.

La variable de entorno $ADB_TRACE contiene una lista separada por comas de la información de depuración para registrar. Los valores pueden ser cualquier combinación de los siguientes: all, adb, sockets, packets, rwx, usb, sync, sysdeps, transport y jdwp.

Consulta también la herramienta de línea de comandos Logcat.

Comandos de seguridad Descripción
disable-verity Inhabilita la comprobación de dm-verity en compilaciones de userdebug. La opción dm-verity garantiza que, cuando un usuario inicia un dispositivo, este se encuentre en el mismo estado en que se encontraba cuando se usó por última vez. Para obtener más información, consulta Inicio verificado.
enable-verity Vuelve a habilitar la comprobación de dm-verity en compilaciones de userdebug. La opción dm-verity garantiza que, cuando un usuario inicia un dispositivo, este se encuentre en el mismo estado en que se encontraba cuando se usó por última vez. Para obtener más información, consulta Inicio verificado.
keygen file Genera claves encriptadas RSA públicas y privadas de ADB. La clave privada se almacena en el archivo. La clave pública se almacena en file.pub. Cuando usas ADB para conectarte por USB por primera vez, se necesita un par de claves RSA. Debes aceptar la clave RSA de la computadora host para otorgar de manera explícita acceso de ADB al dispositivo.

Usa la variable de entorno $ANDROID_VENDOR_KEYS para apuntar a un archivo o directorio que contiene pares de claves de autenticación RSA de 2048 bits que generaste con el comando keygen. Esos pares de claves se agregan a los pares de claves RSA generados por el servidor de ADB.

Cuando el servidor de ADB necesita una clave, primero busca en el directorio del almacén de claves del servidor de ADB. Si no encuentra ninguna, verifica la variable de entorno $ANDROID_VENDOR_KEYS para encontrar una ubicación. Si de todas formas no encuentra ninguna clave, el servidor de ADB local genera y guarda un nuevo par de claves en el directorio del almacén de claves del servidor de ADB. Por esta razón, solo un OEM que crea un dispositivo Android nuevo debería tener que ejecutar 'adb keygen' por su cuenta.

De forma predeterminada, los pares de claves generados por el servidor de ADB se almacenan en los siguientes directorios de almacén de claves como adbkey (clave privada) y adbkey.pub (clave pública):

  • Linux y Mac: $HOME/.android
  • Windows: %USERPOFILE%\.android
Comandos de secuencias de comandos Descripción
wait-for [-transport] -state Espera a que el dispositivo esté en el estado especificado.
  • state: Los valores pueden ser device, recovery, sideload o bootloader.
  • transport: Los valores pueden ser usb, local o any.
get-state Imprime el estado en ADB de un dispositivo. El estado en ADB puede ser print offline, bootloader o device. Para obtener más información, consulta Cómo realizar consultas de dispositivos.
get-serialno Imprime el string del número de serie del dispositivo de ADB. Para obtener más información, consulta Cómo realizar consultas de dispositivos.
get-devpath Imprime la ruta del dispositivo de ADB.
remount Vuelve a activar las particiones /system, /vendor y /oem en modo de lectura/escritura.
reboot [bootloader | recovery | sideload | sideload-auto-reboot ] Reinicia el dispositivo. Este comando tiene como valor predeterminado iniciar la imagen del sistema, pero también admite bootloader y recovery.
  • La opción bootloader se reinicia en el cargador de inicio.
  • La opción recovery se reinicia en la recuperación.
  • La opción sideload se reinicia en la recuperación e inicia el modo sideload.
  • La opción sideload-auto-reboot es igual que sideload, pero se reinicia después de que se completa la transferencia.
sideload otapackage Transfiere (instala en formato APK) el paquete inalámbrico completo especificado en el dispositivo.
root Reinicia adbd con permisos de administrador.
unroot Reinicia adbd sin permisos de administrador.
usb Reinicia el servidor de ADB que escucha en USB.
tcpip port-number Reinicia el servidor de ADB que escucha en TCP en el puerto especificado.
Comandos de depuración interna Descripción
start-server Verifica si se está ejecutando el proceso del servidor de ADB.
kill-server Finaliza el proceso del servidor de ADB.
reconnect Fuerza una reconexión desde el host.
reconnect device Fuerza una reconexión desde el dispositivo para forzar una reconexión.
Comandos del shell Descripción
shell Inicia un shell interactivo remoto en el dispositivo de destino. Para obtener más información, consulta Cómo emitir comandos del shell.
shell -e escape_char [-n] [-T] [-t] [-x] [command] Emite un comando del shell en el dispositivo de destino y luego sale del shell remoto. Usa cualquier combinación de las siguientes opciones:
  • -e: Especifica un carácter de escape o el valor none si no deseas utilizar un carácter de escape. Si no proporcionas un valor, se utiliza el carácter de escape predeterminado, que es un guion (-).
  • -n: No leer de stdin.
  • -T: Inhabilita la asignación de la utilidad seudoterminal (PTY).
  • -t: Fuerza la asignación de PTY.
  • -x: Inhabilita los códigos de salida remotos y la separación stdout/stderr.

Para obtener más información, consulta Cómo emitir comandos del shell.

emu command Ejecuta un comando de la consola del emulador. Para obtener más información, consulta Cómo controlar el emulador desde la línea de comandos.

Cómo emitir comandos del shell

Puedes usar el comando shell para emitir comandos de dispositivo a través de ADB, con o sin ingresar al shell remoto de ADB en el dispositivo. Para emitir un solo comando sin ingresar a un shell remoto, usa el comando shell de esta manera:

    adb [-d |-e | -s serial_number] shell shell_command
    

O ingresa un shell remoto en un dispositivo como este:

    adb [-d | -e | -s serial_number] shell
    

Cuando estés listo para salir del shell remoto, presiona Control + D o escribe exit.

Los objetos binarios del comando del shell se almacenan en el sistema de archivos del dispositivo en /system/bin/.

Nota: Con Android Platform-Tools 23 y versiones posteriores, ADB maneja los argumentos de la misma manera que lo hace el comando ssh(1). Este cambio solucionó muchos problemas relacionados con la inyecció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, el comando adb shell setprop foo 'a b' ahora es un error porque las comillas simples (') se incluyen en el shell local, y el dispositivo ve adb shell setprop foo a b. Para hacer 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 foo "'a b'".

Cómo llamar al administrador de actividades (am)

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 una intent y modificar las propiedades de la pantalla del dispositivo, entre otras. En un shell, la sintaxis 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 2: Comandos disponibles del administrador de actividades

Comando Descripción
start [options] intent Inicia una Activity especificada por una intent.

Consulta Especificación para argumentos de intents.

Las opciones son las siguientes:

  • -D: Habilita la depuración.
  • -W: Espera a que se complete el lanzamiento.
  • --start-profiler file: Inicia el generador de perfiles y envía los resultados al file.
  • -P file: Es igual que --start-profiler, pero se detiene la generación de perfiles cuando la app queda inactiva.
  • -R count: Repite el inicio de la actividad count veces. Antes de cada repetición, se finalizará la actividad principal.
  • -S: Fuerza la detención de la app de destino antes de iniciar la actividad.
  • --opengl-trace: Habilita el seguimiento de las funciones OpenGL.
  • --user user_id | current: Especifica el usuario que deberá ejecutarse; si no se especifica, se ejecutará como el usuario actual.
startservice [options] intent Inicia el Service especificado por intent.

Consulta Especificación para argumentos de intents.

Las opciones son las siguientes:

  • --user user_id | current: Especifica el usuario que deberá ejecutarse; si no se especifica, se ejecutará como el usuario actual.
force-stop package Fuerza la detención de todo lo que esté asociado con package (el nombre de paquete de la app).
kill [options] package Elimina todos los procesos asociados con package (el nombre de paquete de la app). Este comando solo elimina los procesos que es seguro eliminar y que no afectarán la experiencia del usuario.

Las opciones son las siguientes:

  • --user user_id | all | current: Especifica el usuario cuyos procesos se eliminarán; si no se especifica, se seleccionarán todos los usuarios.
kill-all Elimina todos los procesos que se ejecutan en segundo plano.
broadcast [options] intent Emite una intent de transmisión.

Consulta Especificación para argumentos de intents.

Las opciones son las siguientes:

  • [--user user_id | all | current]: Especifica a qué usuario realizar el envío; si no se especifica, el envío se realiza a todos los usuarios.
instrument [options] component Comienza a controlar con una instancia Instrumentation. Generalmente, el component de destino tiene la forma test_package/runner_class.

Las opciones son las siguientes:

  • -r: Imprime resultados sin procesar (de lo contrario, decodifica report_key_streamresult). Se usa con [-e perf true] a fin de generar resultados sin procesar para las mediciones de rendimiento.
  • -e name value: Establece el argumento name en value. Para los ejecutores de pruebas, una forma común es -e testrunner_flag value[,value...].
  • -p file: Escribe los datos de generación de perfiles en file.
  • -w: Espera a que la instrumentación finalice antes de regresar. Es obligatorio para los ejecutores de pruebas.
  • --no-window-animation: Desactiva las animaciones de ventanas durante la ejecución.
  • --user user_id | current: Especifica en qué instrumentación de usuario se debe ejecutar; si no se especifica, se seleccionará el usuario actual.
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:

  • --user [user_id | current]: Cuando se proporciona un nombre de proceso, se debe especificar el usuario del proceso que se volcará; si no se especifica, se usará el usuario actual.
  • -n: Vuelca el montón nativo en lugar del montón administrado.
set-debug-app [options] package Establece el package de app en depuración.

Las opciones son las siguientes:

  • -w: Espera al depurador cuando se inicia la app.
  • --persistent: Conserva este valor.
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:

  • --gdb: Inicia gdbserv en el puerto especificado en el bloqueo/ANR.
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:
am display-size 1280x800

display-density dpi Anula la densidad de la pantalla del dispositivo. Este comando es útil para probar tu app en diferentes densidades de pantalla en un entorno de pantalla de alta densidad usando una pantalla de baja densidad, y viceversa.

Ejemplo:
am display-density 480

to-uri intent Imprime la especificación de la intent en cuestión como un URI.

Consulta Especificación para argumentos de intents.

to-intent-uri intent Imprime la especificación de intent determinada como URI de intent:.

Consulta Especificación para argumentos de intents.

Especificación para argumentos de intents

Para los comandos del administrador de actividades que tienen un argumento intent, puedes especificar la 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 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 3. 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:

  • -f: Consulta su archivo asociado.
  • -d: Filtra para mostrar únicamente los paquetes inhabilitados.
  • -e: Filtra para mostrar únicamente los paquetes habilitados.
  • -s: Filtra para mostrar únicamente los paquetes del sistema.
  • -3: Filtra para mostrar únicamente los paquetes de terceros.
  • -i: Consulta los paquetes en el instalador.
  • -u: Incluye también paquetes desinstalados.
  • --user user_id: Es el espacio de usuario para realizar consultas.
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:

  • -g: Organiza por grupo.
  • -f: Imprime toda la información.
  • -s: Resumen breve.
  • -d: Solo detalla los permisos peligrosos.
  • -u: Solo indica los permisos que verán los usuarios.
list instrumentation [options] Indica todos los paquetes de prueba.

Opciones:

  • -f: Detalla el archivo APK para el paquete de prueba.
  • target_package: Detalla paquetes de prueba solo para esta app.
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:

  • -l: Instala el paquete con bloqueo de reenvío.
  • -r: Reinstala una app existente y conserva sus datos.
  • -t: Permite la instalación de APK de prueba. Gradle genera un APK de prueba cuando solo ejecutaste o depuraste tu app, o usaste el comando Build> Build APK de Android Studio. Si el APK se compila con un SDK de vista previa del desarrollador (si targetSdkVersion es una letra en lugar de un número), debes incluir la opción -t con el comando install si instalas un APK de prueba.
  • -i installer_package_name: Especifica el nombre del paquete del instalador.
  • -s: Instala el paquete en el almacenamiento masivo compartido (como una tarjeta sd).
  • -f: Instala el paquete en la memoria interna del sistema.
  • -d: Permite la degradación del código de versión.
  • -g: Otorga todos los permisos que se indican en el manifiesto de la app.
uninstall [options] package Quita un paquete del sistema.

Opciones:

  • -k: Mantiene los directorios de datos y caché después de la eliminación del paquete.
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:

  • --user user_id: Es el usuario que debe desactivarse.
grant package_name permission Otorga un permiso a una app. En dispositivos con Android 6.0 (nivel de API 23) y versiones posteriores, 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 Revoca un permiso de una app. En dispositivos con Android 6.0 (nivel de API 23) y versiones posteriores, 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
set-install-location location Cambia la ubicación de instalación predeterminada. Valores de ubicación:
  • 0: Auto; permite que el sistema decida la mejor ubicación
  • 1: Interno; instala en una ubicación de almacenamiento interna del dispositivo
  • 2: Externo; en medios externos

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 de retorno:
  • 0 [auto]: Permite que el sistema decida la mejor ubicación.
  • 1 [internal]: Instala en una ubicación de almacenamiento interna del dispositivo.
  • 2 [external]: Instala en medios externos.
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 para el usuario.
remove-user user_id Quita el usuario con un user_id determinado y elimina todos los datos asociados con ese usuario.
get-max-users Imprime la cantidad máxima de usuarios que admite el dispositivo.

Cómo llamar al administrador de políticas del dispositivo (dpm)

Para ayudarte a desarrollar y probar tus apps de administración de dispositivos (o de empresas), puedes emitir 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 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 4. Comandos disponibles del administrador de políticas del dispositivo

Comando Descripción
set-active-admin [options] component Establece el componente como administrador activo.

Las opciones son las siguientes:

  • --user user_id: Especifica el usuario de destino. También puedes pasar --user current para seleccionar el usuario actual.
set-profile-owner [options] component Establece el componente como administrador activo y su paquete como propietario del perfil para un usuario existente.

Las opciones son las siguientes:

  • --user user_id: Especifica el usuario de destino. También puedes pasar --user current para seleccionar el usuario actual.
  • --name name: Especifica el nombre de la organización en lenguaje natural.
set-device-owner [options] component Establece el componente como administrador activo y su paquete como propietario del dispositivo.

Las opciones son las siguientes:

  • --user user_id: Especifica el usuario de destino. También puedes pasar --user current para seleccionar el usuario actual.
  • --name name: Especifica el nombre de la organización en lenguaje natural.
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:

  • --user user_id: Especifica el usuario de destino. También puedes pasar --user current para seleccionar el usuario actual.
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 realizar una captura de pantalla de la pantalla de un dispositivo. En un shell, la sintaxis es la siguiente:

    screencap filename
    

Para usar el 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
    

Graba 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 el 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 (Command + C en Mac); 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 a fin de 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, mientras conserva 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 5. Opciones de screenrecord

Opciones Descripción
--help Muestra la sintaxis y las opciones del comando.
--size widthxheight Establece 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 4 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 video resultante 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. Te recomendamos examinar los perfiles recopilados para comprender los métodos que se ejecutan con frecuencia y las clases que se usan durante el inicio de una app.

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:

    adb pull /data/misc/profman/package.txt
    

Otros comandos del shell

Para obtener una lista de los programas del shell disponibles, usa el siguiente comando:

adb shell ls /system/bin

Hay ayuda disponible para la mayoría de los comandos.

En la tabla 6 se mencionan algunos de los comandos del shell de ADB más comunes.

Tabla 6. Otros comandos del shell de ADB

Comando del shell Descripción
dumpsys Vuelca datos del sistema en la pantalla. Para obtener más información sobre esta herramienta de línea de comandos, consulta dumpsys
dumpstate Vuelca el estado en un archivo.
logcat [option]...  [filter-spec]... Habilita el registro del sistema y de apps, e imprime los resultados en la pantalla.

Consulta también la herramienta de línea de comandos Logcat.

dmesg Imprime los mensajes de depuración del kernel en la pantalla.
start Inicia (reinicia) un dispositivo.
stop Detiene la ejecución de un dispositivo.
sqlite3 Inicia el programa de línea de comandos sqlite3.

La herramienta sqlite3 incluye comandos como .dump para imprimir el contenido de una tabla y .schema para imprimir la instrucción SQL CREATE para una tabla existente. También puedes ejecutar comandos SQLite en el momento.

Las bases de datos SQLite3 se almacenan en la carpeta /data/data/package_name/databases/.

Por ejemplo:


    $ adb -s emulator-5554 shell
    $ sqlite3 /data/data/com.example.app/databases/rssitems.db
    SQLite version 3.3.12
    Enter ".help" for instructions
    

Para obtener más información, consulta la documentación de la línea de comandos de sqlite3.