ADB Friend

Una herramienta de línea de comandos para desarrolladores para gestionar dispositivos Android a través de ADB.

Documentación

ADB Friend

ADB Friend es una pequeña herramienta CLI que te ayuda a gestionar tu dispositivo Android a través de ADB. Sus funciones fueron diseñadas principalmente para desarrolladores, pero pueden ser útiles para todos.

Características

  • Sincroniza archivos desde tu computadora a tu teléfono
    • Diseñado para datos de prueba, omitiendo archivos existentes en el dispositivo
  • Configura el dispositivo para pruebas
    • Desactivar animaciones, habilitar toques,...
  • Desinstalar aplicaciones por patrón
  • Comando de paquetes
    • Aplicar la bandera immersive a todos los paquetes que coincidan con glob, forzar detención, borrar datos y caché de la aplicación
  • Herramientas adicionales
    • adb-speed (Ayuda a identificar cables de baja calidad)
  • Servidor de Model Context Protocol MCP

Instalación

La instalación se puede realizar usando Homebrew. Primero necesitarás el tap personalizado:

brew tap mikepenz/tap

A continuación, instala la CLI de AdbFriend:

brew install mikepenz/tap/adbfriend

Alternativamente, puedes descargar binarios precompilados desde la página de lanzamientos.

Uso

ADB Friend es una herramienta de línea de comandos que se puede usar en una terminal.

# Get started with the \`--help\` command, to get information and an overview on the various features offered.
adbfriend --help

Servidor MCP

ADB Friend (desde la versión 1.4.0) también proporciona un Model Context Protocol (MCP) Server, que se puede configurar en herramientas de IA populares como Claude Desktop, GitHub Copilot, RayCast,...

Configuración

La ubicación y los detalles del archivo de configuración dependerán de la herramienta utilizada. A continuación, un ejemplo para Claude Desktop.

{
  "mcpServers": {
    "adb-friend": {
      "command": "/opt/homebrew/bin/adbfriend",
      "args": [
        "mcp",
        "server"
      ],
      "env": {
        "ANDROID_HOME": "/Users/mikepenz/Development/android/sdk"
      }
    }
  }
}

[!important] Importante Si no se proporciona ANDROID_HOME, el adb-server debe iniciarse manualmente en tu máquina. De lo contrario, se lanza una excepción de conexión.

Servidor de depuración

Puedes usar el npx @modelcontextprotocol/inspector para depurar el servidor una vez iniciado.

# Install and run inspector in your terminal
npx @modelcontextprotocol/inspector

Luego lanza el sitio web (con la URL proporcionada en la terminal). Lanza el mcp server usando IntelliJ o el comando real.

# Default port is \`3001\`
adbfriend mcp server --sse true

Herramientas compatibles

Tool NameDescription
check-adb-speedComprueba la velocidad de conexión USB de un dispositivo Android para el serial proporcionado.
clear-installed-packageBorra los datos del paquete para los nombres de paquete proporcionados en un dispositivo Android.
set-immersive-full-for-packageEstablece la bandera 'immersive-full' para los nombres de paquete proporcionados en un dispositivo Android.
force-stop-processFuerza la detención de los nombres de paquete proporcionados en un dispositivo Android.
uninstall-packageDesinstala los nombres de paquete proporcionados en un dispositivo Android.
get-connected-devicesRecupera información sobre todos los dispositivos Android conectados, incluidos serial, modelo y estado.
get-installed-packagesRecupera información sobre todos los paquetes instalados en un dispositivo Android. Admite filtrado solo para aplicaciones de terceros.
list_allowed_directoriesLista los directorios a los que se permite acceder mediante las herramientas del sistema de archivos.
list-filesLista archivos y directorios en un dispositivo Android. Admite listado recursivo con la opción 'recursive'.
read-fileLee el contenido de un archivo en un dispositivo Android.
read_multiple_filesLee el contenido de múltiples archivos en un dispositivo Android a la vez (reduce las llamadas LLM).
write-fileEscribe contenido en un archivo en un dispositivo Android.
create-directoryCrea un directorio en un dispositivo Android.
deleteElimina un archivo o directorio en un dispositivo Android.
search-filesBusca archivos que coincidan con un patrón glob sin distinción de mayúsculas dentro de los directorios permitidos.
move_fileMueve un archivo desde la ruta de origen a la ruta de destino en un dispositivo Android.
copy-file-to-hostCopia un archivo binario desde el dispositivo Android al sistema host.
capture-screenshotCaptura una captura de pantalla de un dispositivo Android y la guarda en el sistema host.
install-apkInstala un APK en el dispositivo Android desde un archivo en el sistema host dentro de las rutas host permitidas.

Con muchas más herramientas planificadas para el futuro.

Ejemplos de prompts

uninstall the 'sample' app, but keep its data
force stop the 'sample' app
Do I have a browser installed on the connected emulator?
Organize all files in the Download folder of the connected Android device
Pull all KotlinConf related files from the Android device to the host

Lanzamiento

El proyecto utiliza shadow para empaquetar la herramienta en un fat-jar, y también realiza una minimización mínima.

./gradlew adbfriend-cli:shadowDistZip

Otros

AboutLibraries

Generar aboutlibraries.json para adbfriend

./gradlew adbfriend:exportLibraryDefinitions

Generar aboutlibraries.json para adbfriend-cli

./gradlew adbfriend-cli:exportLibraryDefinitions

Capturas de pantalla de ejemplos de prompts

Claude Desktop claude-desktop-sample-prompt

Visual Code visual-code-sample-prompt.png

Créditos

Este proyecto utiliza la increíble biblioteca adam de Malinskiy para interactuar con adb. La CLI está configurada usando la impresionante biblioteca clikt de ajalt.

Licencia

Copyright 2025 Mike Penz

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.