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, eladb-serverdebe 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 Name | Description |
|---|---|
| check-adb-speed | Comprueba la velocidad de conexión USB de un dispositivo Android para el serial proporcionado. |
| clear-installed-package | Borra los datos del paquete para los nombres de paquete proporcionados en un dispositivo Android. |
| set-immersive-full-for-package | Establece la bandera 'immersive-full' para los nombres de paquete proporcionados en un dispositivo Android. |
| force-stop-process | Fuerza la detención de los nombres de paquete proporcionados en un dispositivo Android. |
| uninstall-package | Desinstala los nombres de paquete proporcionados en un dispositivo Android. |
| get-connected-devices | Recupera información sobre todos los dispositivos Android conectados, incluidos serial, modelo y estado. |
| get-installed-packages | Recupera información sobre todos los paquetes instalados en un dispositivo Android. Admite filtrado solo para aplicaciones de terceros. |
| list_allowed_directories | Lista los directorios a los que se permite acceder mediante las herramientas del sistema de archivos. |
| list-files | Lista archivos y directorios en un dispositivo Android. Admite listado recursivo con la opción 'recursive'. |
| read-file | Lee el contenido de un archivo en un dispositivo Android. |
| read_multiple_files | Lee el contenido de múltiples archivos en un dispositivo Android a la vez (reduce las llamadas LLM). |
| write-file | Escribe contenido en un archivo en un dispositivo Android. |
| create-directory | Crea un directorio en un dispositivo Android. |
| delete | Elimina un archivo o directorio en un dispositivo Android. |
| search-files | Busca archivos que coincidan con un patrón glob sin distinción de mayúsculas dentro de los directorios permitidos. |
| move_file | Mueve un archivo desde la ruta de origen a la ruta de destino en un dispositivo Android. |
| copy-file-to-host | Copia un archivo binario desde el dispositivo Android al sistema host. |
| capture-screenshot | Captura una captura de pantalla de un dispositivo Android y la guarda en el sistema host. |
| install-apk | Instala 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
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.

