← Volver al listado de tecnologías

Capítulo 3: Comandos Esenciales de ADB

Por: Artiko
adbcomandosshellandroidpushpullinstalldevices

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

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:

🚀 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'