Android Debug Bridge (Adb) - Desarrolladores de Android
Android Debug Bridge (Adb) - Desarrolladores de Android
Android Debug Bridge (Adb) - Desarrolladores de Android
(https://google.com/racialequity?hl=es)
A fin de descubrir 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 (https://developer.android.com/studio/run/device?hl=es)
.
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:
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).
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.
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 por USB y otros comandos adb no puedan ejecutarse a menos que puedas desbloquear el
dispositivo y aceptar el contenido del diálogo.
A fin de obtener más información para conectar un dispositivo mediante conexiones USB, lee
Cómo ejecutar apps en un dispositivo de hardware
(https://developer.android.com/studio/run/device?hl=es).
5. Selecciona Vincular dispositivo con código de sincronización. Toma nota del código de
vinculación, la dirección IP y el número de puerto que se muestran en el dispositivo
(consulta la imagen).
7. Ejecuta adb pair ipaddr:port. Usa la dirección IP y el número de puerto del paso 5.
none
Enter pairing code: 482924
Successfully paired to 192.168.1.130:37099 [guid=adb-235XY]
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 a fin de depurar una app para Wear OS
(https://developer.android.com/training/wearables/apps/debugging?hl=es), que incluye instrucciones
especiales con el objetivo de 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.
4. Configura el dispositivo de destino para que busque una conexión TCP/IP en el puerto
5555.
$ adb devices
List of devices attached
device_ip_address:5555 device
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.
adb kill-server
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
Número de serie: es una string creada por adb para identificar de forma exclusiva un
dispositivo 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:
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.
$ adb devices
List of devices attached
emulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for
emulator-5554 device product:sdk_google_phone_x86 model:Android_SDK_built_for_x8
0a388e93 device usb:1-1 product:razor model:Nexus_7 device:flo
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:
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.
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 consiste en iniciar siempre el servidor de
adb antes de usar el comando emulator, como se explica en los siguientes ejemplos.
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
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
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
(https://developer.android.com/studio/run/emulator-commandline?hl=es#startup-options).
$ adb devices
List of devices attached
emulator-5554 device
emulator-5555 device
Nota: Si emites un comando sin especificar un dispositivo de destino cuando hay varios dispositivos
disponibles, adb genera un error.
Si tienes 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.
Puedes usar adb para instalar un APK en un emulador o dispositivo conectado con el
comando install:
Debes usar la opción -t con el comando install cuando instales un APK de prueba. Para
obtener más información, consulta -t (#-t-option).
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
(https://developer.android.com/studio/run?hl=es).
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.
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:
En algunos casos, podría ser necesario que finalices el proceso del servidor de adb y 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.
Cómo emitir 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:
Para consultar la lista detallada de todos los comandos adb compatibles, usa el siguiente
comando:
adb --help
Puedes usar el comando shell para emitir comandos de dispositivo mediante adb o iniciar un
shell interactivo. Para emitir un solo comando, usa el comando shell de la siguiente manera:
Hay ayuda disponible para la mayoría de los comandos mediante el argumento --help. toybox
(http://landley.net/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.
am command
También puedes emitir un comando del administrador de actividades directamente desde adb
sin ingresar a un shell remoto. Por ejemplo:
Comando Descripción
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 e
seguro eliminar y que no afectarán la experiencia del usuario.
profile start process file Inicia el generador de perfiles en process, escribe los resultados e
file.
clear-debug-app Borra el conjunto anterior del paquete para depurar con set-debu
app.
to-intent-uri intent Imprime la especificación del intent determinado como URI de int
Para los comandos del administrador de actividades que tienen un argumento intent, puedes
especificar el intent con las siguientes opciones:
Mostrar todo
-a action
-d data_uri
-t mime_type
Especifica el tipo de MIME del intent, como image/png. Puedes declarar esto una sola
vez.
-c category
-n component
Especifica el nombre del componente con el prefijo del nombre del paquete para crear un
intent explícito, como com.example.app/.ExampleActivity.
-f flags
--esn extra_key
Agrega una clave extra nula. Esta opción no se admite para intents de URI.
--grant-read-uri-permission
Incluye la marca FLAG_GRANT_READ_URI_PERMISSION
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_GRANT_READ_URI_PERMISSION)
.
--grant-write-uri-permission
Incluye la marca FLAG_GRANT_WRITE_URI_PERMISSION
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_GRANT_WRITE_URI_PERMISSION)
.
--debug-log-resolution
Incluye la marca FLAG_DEBUG_LOG_RESOLUTION
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_DEBUG_LOG_RESOLUTION)
.
--exclude-stopped-packages
Incluye la marca FLAG_EXCLUDE_STOPPED_PACKAGES
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_EXCLUDE_STOPPED_PACKAGES)
.
--include-stopped-packages
Incluye la marca FLAG_INCLUDE_STOPPED_PACKAGES
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_INCLUDE_STOPPED_PACKAGES)
.
--activity-brought-to-front
Incluye la marca FLAG_ACTIVITY_BROUGHT_TO_FRONT
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_ACTIVITY_BROUGHT_TO_FRONT)
.
--activity-clear-top
Incluye la marca FLAG_ACTIVITY_CLEAR_TOP
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_ACTIVITY_CLEAR_TOP)
.
--activity-clear-when-task-reset
Incluye la marca FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET)
.
--activity-exclude-from-recents
Incluye la marca FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
.
--activity-launched-from-history
Incluye la marca FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY)
.
--activity-multiple-task
Incluye la marca FLAG_ACTIVITY_MULTIPLE_TASK
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_ACTIVITY_MULTIPLE_TASK)
.
--activity-no-animation
Incluye la marca FLAG_ACTIVITY_NO_ANIMATION
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_ACTIVITY_NO_ANIMATION)
.
--activity-no-history
Incluye la marca FLAG_ACTIVITY_NO_HISTORY
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_ACTIVITY_NO_HISTORY)
.
--activity-no-user-action
Incluye la marca FLAG_ACTIVITY_NO_USER_ACTION
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_ACTIVITY_NO_USER_ACTION)
.
--activity-previous-is-top
Incluye la marca FLAG_ACTIVITY_PREVIOUS_IS_TOP
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_ACTIVITY_PREVIOUS_IS_TOP)
.
--activity-reorder-to-front
Incluye la marca FLAG_ACTIVITY_REORDER_TO_FRONT
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_ACTIVITY_REORDER_TO_FRONT)
.
--activity-reset-task-if-needed
Incluye la marca FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_ACTIVITY_RESET_TASK_IF_NEEDED)
.
--activity-single-top
Incluye la marca FLAG_ACTIVITY_SINGLE_TOP
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_ACTIVITY_SINGLE_TOP)
.
--activity-clear-task
Incluye la marca FLAG_ACTIVITY_CLEAR_TASK
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_ACTIVITY_CLEAR_TASK)
.
--activity-task-on-home
Incluye la marca FLAG_ACTIVITY_TASK_ON_HOME
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_ACTIVITY_TASK_ON_HOME)
.
--receiver-registered-only
Incluye la marca FLAG_RECEIVER_REGISTERED_ONLY
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_RECEIVER_REGISTERED_ONLY)
.
--receiver-replace-pending
Incluye la marca FLAG_RECEIVER_REPLACE_PENDING
(https://developer.android.com/reference/android/content/Intent?
hl=es#FLAG_RECEIVER_REPLACE_PENDING)
.
--selector
Requiere el uso de las opciones -d y -t para configurar los datos del intent y el tipo de
este.
pm command
También puedes emitir un comando del administrador de paquetes directamente desde adb
sin ingresar a un shell remoto. Por ejemplo:
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:
Opciones:
Opciones:
-r: Reinstala una app existente y conserva sus
datos.
-i installer_package_name: Especifica e
nombre de paquete del instalador.
1: Realiza la instalación en el
almacenamiento interno del dispositivo.
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 permis
declarado en el manifiesto de la app. En dispositiv
con Android 5.1 (nivel de API 22) y versiones
anteriores, debe ser un permiso opcional definido
la app.
dpm command
Comando Descripción
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
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 a fin de descargar el archivo
desde el dispositivo:
$ adb shell
shell@ $ screencap /sdcard/screen.png
shell@ $ exit
$ adb pull /sdcard/screen.png
$ adb shell
shell@ $ screenrecord --verbose /sdcard/demo.mp4
(press Control + C to stop)
shell@ $ exit
$ adb pull /sdcard/demo.mp4
Limitaciones de la utilidad screenrecord:
Opciones Descripción
Para producir un texto a partir de información del perfil, usa el siguiente comando:
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 prueba.
Puedes realizar un restablecimiento de fábrica de un dispositivo con Android 10 (nivel de
API 29) o versiones posteriores mediante el comando shell adb testharness como se
muestra a continuación.
Además, a fin de que puedas continuar 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:
Configuración:
Otro:
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 para
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.
Content and code samples on this page are subject to the licenses described in the Content License
(https://developer.android.com/license?hl=es). Java is a registered trademark of Oracle and/or its affiliates.