← Volver al listado de tecnologías
Capítulo 3: Comandos Esenciales de ADB
Capítulo 3: Comandos Esenciales de ADB
Este capítulo cubre los comandos más importantes y utilizados de ADB. Estos comandos forman la base para cualquier tarea de desarrollo, debugging o administración de dispositivos Android.
🎯 Objetivos del Capítulo
Al finalizar este capítulo dominarás:
- ✅ Gestión de dispositivos conectados
- ✅ Transferencia de archivos entre PC y dispositivo
- ✅ Instalación y gestión de aplicaciones
- ✅ Acceso y navegación del shell Android
- ✅ Comandos de información del sistema
📱 Gestión de Dispositivos
adb devices - Listar Dispositivos
# Listar dispositivos conectados
adb devices
# Output típico:
# List of devices attached
# emulator-5554 device
# ABC123DEF456 device
# Listar con más detalles
adb devices -l
# Output detallado:
# List of devices attached
# ABC123DEF456 device product:ginkgo model:Redmi_Note_8 device:ginkgo transport_id:1
# Estados posibles:
# device - Conectado y listo
# offline - Dispositivo no responde
# unauthorized - Pendiente autorización
# no device - No hay dispositivos
Selección de Dispositivo Específico
# Cuando hay múltiples dispositivos
adb -s SERIAL_NUMBER comando
# Ejemplos:
adb -s ABC123DEF456 shell
adb -s emulator-5554 install app.apk
# Atajos útiles:
adb -d comando # Dispositivo físico (device)
adb -e comando # Emulador (emulator)
# Variable de entorno para dispositivo por defecto
export ANDROID_SERIAL=ABC123DEF456
# Ahora todos los comandos usarán ese dispositivo
adb connect/disconnect - Conexión WiFi
# Preparar dispositivo para WiFi ADB
# 1. Conectar por USB primero
adb tcpip 5555
# 2. Obtener IP del dispositivo
adb shell ip addr show wlan0 | grep "inet "
# O desde el dispositivo: Ajustes → Acerca del teléfono → Estado
# 3. Conectar por WiFi
adb connect 192.168.1.100:5555
# Output: connected to 192.168.1.100:5555
# 4. Verificar conexión
adb devices
# Ahora puedes desconectar el USB
# Desconectar
adb disconnect 192.168.1.100:5555
# Volver a modo USB
adb usb
Gestión del Servidor ADB
# Iniciar servidor
adb start-server
# * daemon not running; starting now at tcp:5037
# * daemon started successfully
# Detener servidor
adb kill-server
# Reiniciar servidor (útil para problemas)
adb kill-server && adb start-server
# Verificar versión del servidor
adb version
# Puerto personalizado
adb -P 5038 start-server
# Verificar puerto en uso
netstat -an | grep 5037 # Linux/macOS
netstat -an | findstr 5037 # Windows
📂 Transferencia de Archivos
adb push - Enviar Archivos al Dispositivo
# Sintaxis básica
adb push archivo_local ruta_dispositivo
# Enviar archivo a sdcard
adb push foto.jpg /sdcard/
adb push documento.pdf /sdcard/Download/
# Enviar con ruta completa
adb push C:\Users\usuario\archivo.txt /sdcard/Documents/
# Enviar carpeta completa
adb push carpeta_local/ /sdcard/carpeta_destino/
# Enviar múltiples archivos
for file in *.jpg; do
adb push "$file" /sdcard/Pictures/
done
# Verificar transferencia
adb shell ls -la /sdcard/Pictures/
# Push con progreso (no nativo, pero útil)
file="video.mp4"
size=$(stat -f%z "$file" 2>/dev/null || stat -c%s "$file")
adb push "$file" /sdcard/ | while read line; do
echo "Transfiriendo: $line"
done
adb pull - Descargar Archivos del Dispositivo
# Sintaxis básica
adb pull ruta_dispositivo archivo_local
# Descargar archivo
adb pull /sdcard/DCIM/Camera/IMG_001.jpg ./
adb pull /sdcard/Download/documento.pdf ~/Desktop/
# Descargar carpeta completa
adb pull /sdcard/DCIM/ ./fotos_backup/
# Descargar con preservación de timestamps
adb pull -a /sdcard/WhatsApp/ ./whatsapp_backup/
# Descargar múltiples archivos con patrón
# Listar primero
adb shell ls /sdcard/*.log
# Luego descargar
adb shell ls /sdcard/*.log | tr -d '\r' | while read f; do
adb pull "$f" ./logs/
done
# Backup de base de datos de app
adb pull /data/data/com.example.app/databases/app.db ./
# Pull de archivos del sistema (requiere root)
adb root
adb pull /system/build.prop ./
Sincronización de Archivos
# Sincronizar carpeta (solo copia archivos nuevos/modificados)
adb sync [ system | vendor | oem | data | all ]
# Ejemplo: sincronizar data
adb sync data
# Verificar espacio antes de transferir
adb shell df -h /sdcard
# Filesystem Size Used Avail Use% Mounted on
# /dev/fuse 54G 35G 19G 65% /storage/emulated
# Script para backup selectivo
#!/bin/bash
DIRS=("DCIM" "Download" "Documents" "WhatsApp")
for dir in "${DIRS[@]}"; do
echo "Backing up $dir..."
adb pull "/sdcard/$dir" "./backup/$dir"
done
📦 Instalación de Aplicaciones
adb install - Instalar APKs
# Instalación básica
adb install app.apk
# Instalación con opciones
adb install -r app.apk # Reinstalar (mantiene datos)
adb install -g app.apk # Conceder todos los permisos
adb install -d app.apk # Permitir downgrade
adb install -t app.apk # Permitir test APKs
adb install -s app.apk # Instalar en SD card
# Instalación múltiple (split APKs)
adb install-multiple base.apk split1.apk split2.apk
# Instalación para usuario específico
adb install --user 0 app.apk
# Reemplazar app existente manteniendo datos
adb install -r -g app.apk
# Instalación desde Play Store (requiere package name)
adb shell am start -a android.intent.action.VIEW \
-d 'market://details?id=com.example.app'
# Verificar instalación
adb shell pm list packages | grep com.example
adb shell pm path com.example.app
adb uninstall - Desinstalar Aplicaciones
# Desinstalación básica
adb uninstall com.example.app
# Mantener datos (solo elimina APK)
adb uninstall -k com.example.app
# Desinstalar para usuario específico
adb uninstall --user 0 com.example.app
# Script para desinstalar múltiples apps
apps=("com.app1" "com.app2" "com.app3")
for app in "${apps[@]}"; do
echo "Desinstalando $app..."
adb uninstall "$app"
done
# Desinstalar todas las apps de un desarrollador
adb shell pm list packages | grep "com.facebook" | cut -d: -f2 | while read pkg; do
adb uninstall "$pkg"
done
Gestión de Paquetes Instalados
# Listar todos los paquetes
adb shell pm list packages
# Filtrar paquetes
adb shell pm list packages | grep google
adb shell pm list packages -f # Con archivo APK
adb shell pm list packages -d # Solo deshabilitados
adb shell pm list packages -e # Solo habilitados
adb shell pm list packages -s # Solo del sistema
adb shell pm list packages -3 # Solo terceros
adb shell pm list packages -i # Con installer
# Información de paquete
adb shell pm dump com.example.app
adb shell dumpsys package com.example.app
# Path del APK instalado
adb shell pm path com.example.app
# package:/data/app/com.example.app-1/base.apk
# Extraer APK instalado
adb shell pm path com.example.app | cut -d: -f2 | while read apk; do
adb pull "$apk" "./extracted_app.apk"
done
🐚 Shell de Android
adb shell - Acceso al Terminal
# Abrir shell interactivo
adb shell
# Ejecutar comando único
adb shell ls -la /sdcard/
adb shell ps
adb shell top
# Ejecutar como root (si disponible)
adb root
adb shell
# Ejecutar comando como usuario específico
adb shell "su -c 'comando'"
# Shell con usuario específico
adb shell -t "su"
# Salir del shell
exit
# O Ctrl+D
Comandos Básicos del Shell
# Navegación
adb shell pwd # Directorio actual
adb shell ls -la # Listar archivos
adb shell cd /sdcard && ls # Cambiar directorio
# Archivos y directorios
adb shell mkdir /sdcard/nueva_carpeta
adb shell touch /sdcard/archivo.txt
adb shell rm /sdcard/archivo.txt
adb shell rm -rf /sdcard/carpeta
adb shell cp origen destino
adb shell mv origen destino
# Permisos
adb shell chmod 755 /sdcard/script.sh
adb shell chown user:group archivo
# Ver contenido de archivos
adb shell cat /sdcard/archivo.txt
adb shell head -n 10 /sdcard/log.txt
adb shell tail -f /sdcard/app.log
# Buscar archivos
adb shell find /sdcard -name "*.jpg"
adb shell find /sdcard -type f -size +10M
# Información del sistema
adb shell uname -a
adb shell getprop ro.build.version.release
adb shell cat /proc/cpuinfo
adb shell cat /proc/meminfo
Variables de Entorno y Propiedades
# Ver todas las propiedades
adb shell getprop
# Propiedades específicas
adb shell getprop ro.product.model
adb shell getprop ro.build.version.sdk
adb shell getprop ro.product.manufacturer
adb shell getprop persist.sys.timezone
# Establecer propiedad (requiere root)
adb shell setprop debug.layout true
# Variables de entorno
adb shell printenv
adb shell echo $PATH
adb shell export MY_VAR="valor"
# Ejecutar con variables
adb shell "export ANDROID_DATA=/data && ls $ANDROID_DATA"
📊 Información del Sistema
Comandos de Estado
# Estado del dispositivo
adb get-state # device, offline, bootloader
adb get-serialno # Número de serie
adb get-devpath # Device path
# Información de batería
adb shell dumpsys battery
# Valores importantes:
# level: 85 # Porcentaje
# scale: 100
# temperature: 280 # En décimas de grado
# voltage: 4123 # En milivoltios
# Memoria
adb shell dumpsys meminfo
adb shell cat /proc/meminfo
adb shell free -h
# Almacenamiento
adb shell df -h
adb shell du -sh /sdcard/*
# CPU
adb shell dumpsys cpuinfo
adb shell top -n 1
Logs del Sistema
# Logcat básico
adb logcat
# Limpiar buffer de logs
adb logcat -c
# Guardar logs en archivo
adb logcat -d > logs.txt # Dump actual
adb logcat > logs.txt # Continuo (Ctrl+C para parar)
# Filtrar por prioridad
adb logcat *:E # Solo errores
adb logcat *:W # Warnings y superiores
# Filtrar por tag
adb logcat ActivityManager:I *:S
# Formato de tiempo
adb logcat -v time
adb logcat -v threadtime
# Logs de aplicación específica
adb logcat --pid=$(adb shell pidof com.example.app)
🛠️ Comandos de Utilidad
Screenshots y Grabación
# Captura de pantalla
adb shell screencap /sdcard/screenshot.png
adb pull /sdcard/screenshot.png ./
# One-liner para screenshot
adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' > screenshot.png
# Grabación de pantalla (Android 4.4+)
adb shell screenrecord /sdcard/video.mp4
# Presionar Ctrl+C para detener
# Con opciones
adb shell screenrecord --size 1280x720 --bit-rate 6000000 --time-limit 30 /sdcard/demo.mp4
# Descargar video
adb pull /sdcard/demo.mp4 ./
Reinicio y Modos Especiales
# Reiniciar dispositivo
adb reboot
# Reiniciar en recovery
adb reboot recovery
# Reiniciar en bootloader/fastboot
adb reboot bootloader
adb reboot fastboot
# Reiniciar en modo seguro
adb shell "setprop persist.sys.safemode 1 && reboot"
# Apagar dispositivo
adb shell reboot -p
# Reinicio suave (solo Android)
adb shell "stop && start"
🎯 Ejemplos Prácticos
Script: Backup Completo
#!/bin/bash
# backup_device.sh
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="backup_$DATE"
echo "📱 Iniciando backup del dispositivo..."
mkdir -p "$BACKUP_DIR"
# Información del dispositivo
echo "📊 Guardando información del dispositivo..."
adb shell getprop > "$BACKUP_DIR/device_info.txt"
# Screenshots
echo "📸 Capturando pantalla..."
adb shell screencap /sdcard/screenshot.png
adb pull /sdcard/screenshot.png "$BACKUP_DIR/"
# Archivos importantes
DIRS=("DCIM" "Download" "Documents" "Pictures" "WhatsApp")
for dir in "${DIRS[@]}"; do
if adb shell "[ -d /sdcard/$dir ]"; then
echo "📂 Respaldando $dir..."
adb pull "/sdcard/$dir" "$BACKUP_DIR/$dir"
fi
done
# Lista de aplicaciones
echo "📦 Guardando lista de aplicaciones..."
adb shell pm list packages -f > "$BACKUP_DIR/installed_apps.txt"
echo "✅ Backup completado en $BACKUP_DIR"
Script: Instalador Masivo
#!/bin/bash
# mass_install.sh
APK_DIR="./apks"
LOG_FILE="install_log.txt"
echo "📦 Instalando APKs desde $APK_DIR" | tee "$LOG_FILE"
for apk in "$APK_DIR"/*.apk; do
if [ -f "$apk" ]; then
echo "Installing: $(basename "$apk")" | tee -a "$LOG_FILE"
if adb install -r -g "$apk" 2>&1 | tee -a "$LOG_FILE" | grep -q "Success"; then
echo "✅ Success: $(basename "$apk")" | tee -a "$LOG_FILE"
else
echo "❌ Failed: $(basename "$apk")" | tee -a "$LOG_FILE"
fi
fi
done
echo "📊 Instalación completada. Ver $LOG_FILE para detalles."
Script: Monitor de Sistema
#!/bin/bash
# system_monitor.sh
while true; do
clear
echo "📱 MONITOR DE SISTEMA - $(date)"
echo "================================"
# Batería
battery=$(adb shell dumpsys battery | grep level | cut -d: -f2)
echo "🔋 Batería: $battery%"
# Memoria
mem_free=$(adb shell cat /proc/meminfo | grep MemFree | awk '{print $2}')
mem_total=$(adb shell cat /proc/meminfo | grep MemTotal | awk '{print $2}')
mem_used=$((mem_total - mem_free))
mem_percent=$((mem_used * 100 / mem_total))
echo "💾 Memoria: $mem_percent% usado"
# Almacenamiento
storage=$(adb shell df /sdcard | tail -1 | awk '{print $5}')
echo "💿 Almacenamiento: $storage usado"
# CPU Top 5
echo -e "\n🔥 Top 5 Procesos (CPU):"
adb shell top -n 1 | head -12 | tail -5
sleep 5
done
🔧 Troubleshooting Común
Error: “device not found”
# Verificar conexión
adb devices
# Reiniciar servidor
adb kill-server
adb start-server
# Verificar cable y puerto USB
# Probar otro cable o puerto
Error: “device offline”
# Reiniciar ADB en el dispositivo
adb shell "stop adbd && start adbd"
# O reiniciar dispositivo
adb reboot
Error: “insufficient permissions”
# Linux: ejecutar con sudo
sudo adb devices
# Mejor: configurar udev rules
sudo usermod -aG plugdev $USER
Error: “no space left on device”
# Verificar espacio
adb shell df -h
# Limpiar cache
adb shell pm clear com.example.app
# Eliminar archivos temporales
adb shell rm -rf /sdcard/Android/data/*/cache/*
📋 Referencia Rápida
# DISPOSITIVOS
adb devices # Listar dispositivos
adb connect IP:PORT # Conectar por WiFi
adb disconnect # Desconectar
# ARCHIVOS
adb push local remote # Enviar archivo
adb pull remote local # Descargar archivo
# APLICACIONES
adb install app.apk # Instalar app
adb uninstall package # Desinstalar app
adb shell pm list packages # Listar apps
# SHELL
adb shell # Shell interactivo
adb shell comando # Ejecutar comando
# SISTEMA
adb reboot # Reiniciar
adb logcat # Ver logs
adb shell screencap # Screenshot
adb shell screenrecord # Grabar pantalla
📚 Resumen
Has aprendido los comandos esenciales de ADB:
- ✅ Gestión completa de dispositivos
- ✅ Transferencia bidireccional de archivos
- ✅ Instalación y gestión de aplicaciones
- ✅ Navegación y uso del shell Android
- ✅ Obtención de información del sistema
- ✅ Captura de pantalla y grabación
🚀 Próximo Paso
Con estos comandos esenciales dominados, profundizaremos en el shell de Android y sus comandos específicos.
👉 Continuar con Capítulo 4: Shell Commands Fundamentales
Tip Pro: Crea aliases para los comandos que uses frecuentemente. Por ejemplo: alias adb-screenshot='adb shell screencap -p | perl -pe "s/\x0D\x0A/\x0A/g" > screenshot.png'