Referencia de comandos
goopdl COMANDO --help muestra esta misma información en la terminal.
| Comando | Qué hace |
|---|---|
download |
Descarga los APKs de una app |
fast-download |
Descarga la última versión con un solo token |
latest |
Encuentra la versión más reciente que Google está desplegando |
inspect-delivery |
Muestra qué entregaría una versión, sin descargar |
info |
Muestra los detalles de una app |
search |
Busca en Google Play |
list-splits |
Lista los split APKs de una app |
profiles |
Lista los perfiles de dispositivo incluidos |
auth login |
Inicia sesión con una cuenta de Google y la guarda |
auth logout |
Borra la cuenta guardada y todos los tokens en caché |
auth clear-cache |
Borra los tokens en caché y los registros de dispositivo, conserva la cuenta guardada |
auth status |
Muestra qué credenciales usa goopdl |
auth token |
Consigue y guarda un token anónimo |
#Opciones comunes
Casi todos los comandos que hablan con Google Play aceptan estas:
| Opción | Corta | Descripción |
|---|---|---|
--arch |
Tipo de dispositivo: arm64 (por defecto), armv7, x86, x86_64 o tv. Ver arquitecturas |
|
--country |
-c |
Código de país de 2 letras, como US o IN |
--proxy |
-p |
URL del proxy, como socks5://host:1080 o http://host:8080 |
--profile |
Clave o parte del nombre de un perfil de dispositivo, como D2 o Samsung. Ver profiles |
|
--dispenser |
-d |
URL de un dispensador de tokens propio. Ver dispensador propio |
--country solo cambia las cabeceras de región. Para obtener la variante real
del APK de una región, enruta además el tráfico por un proxy de esa región con
--proxy.
#download
Descarga el APK base. Añade --splits para los split APKs y --extras para
los archivos OBB y los paquetes de Play Asset Delivery.
goopdl download com.whatsapp # APK base, última versión
goopdl download com.whatsapp --splits # + split APKs
goopdl download com.whatsapp --splits --extras # + archivos OBB y asset packs
goopdl download com.whatsapp -o ./apks # carpeta de salida propia
goopdl download com.whatsapp -a arm64,armv7 # una descarga por arquitectura
goopdl download com.google.android.katniss -a tv # build de Android TV
goopdl download com.whatsapp -v 231205015 # código de versión exacto
goopdl download com.instagram.android -v 434.0.0.44.74 # nombre de versión exacto
goopdl download com.whatsapp --splits -l de,fr,zh-CN # splits de idioma extra
goopdl download com.whatsapp --dm # metadatos DEX para un primer arranque más rápido
goopdl download com.whatsapp -c IN -p socks5://host:1080 # variante regional| Opción | Corta | Por defecto | Descripción |
|---|---|---|---|
--output |
-o |
. |
Carpeta de salida |
--arch |
-a |
arm64 |
Tipo de dispositivo. Separa varios por comas para descargarlos uno tras otro; goopdl para en el primero que falle |
--version |
-v |
la última | Código de versión (384009971) o nombre de versión (434.0.0.44.74). Con un nombre de versión, goopdl sondea GSF IDs nuevos hasta que uno ve esa versión |
--splits / --no-splits |
--no-splits |
Incluye los split APKs | |
--extras / --no-extras |
--no-extras |
Incluye los archivos OBB y los asset packs | |
--locale |
-l |
inglés | Splits de idioma extra, separados por comas. Requiere --splits |
--dm |
no | Descarga los metadatos DEX verificados (.dm) |
|
--integrity-manifest |
— | Escribe un manifiesto JSON verificado. Ver manifiesto de integridad |
También acepta las opciones comunes.
#Archivos generados
| Tipo | Nombre | Ejemplo |
|---|---|---|
| APK base | {package}-{vc}.apk |
com.whatsapp-231205015.apk |
| Split APK | {package}-{vc}-{split}.apk |
com.whatsapp-231205015-config.arm64_v8a.apk |
| OBB (main/patch) | {type}.{vc}.{package}.obb |
main.20925.com.tencent.ig.obb |
| Asset pack | {package}-{vc}-asset.apk |
com.tencent.ig-20925-asset.apk |
{vc} es el código de versión. Tras descargar una app con splits, goopdl
muestra un comando adb install-multiple con exactamente los APK y archivos
.dm descargados, entrecomillados para tu shell (PowerShell en Windows):
adb install-multiple com.whatsapp-231205015.apk com.whatsapp-231205015-config.arm64_v8a.apk#Manifiesto de integridad
--integrity-manifest RUTA hace que la descarga falle si Google no envía el
tamaño y el hash de cada APK base y split pedido. goopdl:
- Verifica cada archivo contra esos metadatos antes de moverlo a su sitio. Usa SHA-256 y solo recurre a SHA-1 si falta SHA-256.
- Escribe el manifiesto de forma atómica: nombre relativo, tamaño, algoritmo y hash en Base64url de cada archivo.
Con varias arquitecturas, un solo manifiesto recoge los archivos de todas.
Google no envía hashes de los archivos OBB ni de los asset packs, así que los
archivos de --extras se descargan sin verificar y no aparecen en el
manifiesto. El manifiesto nunca contiene URLs de descarga, cookies, cabeceras
ni tokens.
Si una comprobación falla, goopdl muestra el motivo y termina con el código 1.
#Límites de peticiones
Google Play a veces responde a las peticiones de entrega con HTTP 429. goopdl
reintenta la petición de entrega hasta dos veces, esperando entre intentos. No
reintenta las descargas de archivos. Si el bloqueo continúa, termina con el
código 5. Espera un rato, o cambia de cuenta, de red o de dispensador.
#fast-download
Descarga la última versión con un solo token: uno válido del pool para ese
--country si existe, o uno nuevo si no. A diferencia de download, no llena
el pool de 5 tokens ni prueba varios perfiles de dispositivo. Úsalo en
crawlers y otros usos de alto volumen, donde llamar al dispensador en cada
petición acaba bloqueando tu IP.
goopdl fast-download com.whatsapp -o ./apks --splits| Opción | Corta | Por defecto | Descripción |
|---|---|---|---|
--output |
-o |
. |
Carpeta de salida |
--arch |
-a |
arm64 |
Tipo de dispositivo (solo uno) |
--splits / --no-splits |
--no-splits |
Incluye los split APKs | |
--extras / --no-extras |
--no-extras |
Incluye los archivos OBB y los asset packs | |
--profile |
aleatorio | Perfil de dispositivo. Por defecto, uno al azar entre los dos más recientes |
También acepta --country, --proxy y --dispenser. --proxy solo se usa
en las llamadas a Google Play; las peticiones al dispensador rotan de región
por su cuenta.
#latest
Encuentra la versión más reciente disponible preguntando a Google Play con varios GSF IDs y quedándose con el código de versión más alto. En encontrar la última versión se explica por qué no basta con un solo dispositivo.
goopdl latest com.instagram.android
goopdl latest com.instagram.android --stable 5
goopdl latest com.instagram.android -s 4 -c US -p socks5://host:1080| Opción | Corta | Por defecto | Descripción |
|---|---|---|---|
--stable |
-s |
3 |
Para cuando el código de versión más alto no cambia durante este número de sondeos seguidos |
--profile |
el mejor clasificado | Perfil de dispositivo para todos los sondeos. Por defecto, el de SDK y versión de Play Store más altos |
También acepta las opciones comunes. --proxy se usa
tanto en las llamadas al dispensador como en las de Google Play.
La salida es una tabla con el prefijo del GSF ID, el nombre y el código de versión de cada sondeo. La versión más alta aparece resaltada y se imprime al final.
#inspect-delivery
Pregunta a Google Play qué entregaría para un código de versión exacto, sin descargar ningún APK. Úsalo para comprobar que un perfil de dispositivo recibe la ABI que quieres antes de empezar una descarga grande.
goopdl inspect-delivery com.whatsapp --arch armv7 --version 231205015 --json
goopdl inspect-delivery com.whatsapp --version 231205015 -o delivery.json{
"architecture": "armv7",
"package": "com.whatsapp",
"splits": ["base", "config.armeabi_v7a", "config.en"],
"version": {"code": 231205015, "name": "2.23.26.15"}
}| Opción | Corta | Por defecto | Descripción |
|---|---|---|---|
--version |
-v |
obligatorio | Código de versión exacto |
--json |
no | Imprime JSON | |
--output |
-o |
— | Escribe el JSON en un archivo en lugar de la salida estándar |
También acepta las opciones comunes. El comando se autentica y "compra" la versión (ver cómo funciona), pero no descarga nada.
#info
Muestra el nombre, la versión, el desarrollador, la valoración, el número de descargas y la URL de Play Store de una app.
goopdl info com.whatsapp
goopdl info com.whatsapp -c IN -p socks5://host:1080
goopdl info com.whatsapp --raw # respuesta protobuf completa decodificada, en JSON| Opción | Corta | Por defecto | Descripción |
|---|---|---|---|
--raw |
-r |
no | Imprime la respuesta completa decodificada en JSON |
También acepta las opciones comunes.
#search
goopdl search "whatsapp"
goopdl search "file manager" --limit 5
goopdl search "whatsapp" --country IN| Opción | Corta | Por defecto | Descripción |
|---|---|---|---|
--limit |
-l |
10 |
Número máximo de resultados |
También acepta las opciones comunes.
#list-splits
Lista los split APKs de una app (configuraciones de ABI, densidad e idioma) sin descargar nada.
goopdl list-splits com.whatsappAcepta --arch y --dispenser.
#profiles
Lista los perfiles de dispositivo incluidos. Pasa un valor de la columna
Key a --profile en cualquier comando.
goopdl profiles # todos los perfiles
goopdl profiles --arch arm64 # una arquitectura--arch acepta arm64, armv7, x86, x86_64, tv o all (por defecto).
#auth
Gestiona las credenciales. goopdl auth sin más muestra la lista de
subcomandos. Los dos modos de autenticación se explican en
autenticación.
#auth login
Inicia sesión en una cuenta de Google desde un navegador y la guarda para el
modo cuenta de Google. Los comandos
siguientes la usan hasta que ejecutes auth logout. GOOPDL_ACCOUNT_EMAIL y
GOOPDL_AAS_TOKEN tienen prioridad sobre ella. El token AAS va al
almacén de claves del sistema,
o a account.json si no hay. La última línea dice dónde.
goopdl auth login # ventana de navegador aislada, recomendado
goopdl auth login --manual # tu navegador habitual, pegas el oauth_token
goopdl auth login --insecure-storage # deja el token en account.json
TOKEN=$(goopdl auth login --print) # imprime el token AAS, no guarda nada| Opción | Por defecto | Descripción |
|---|---|---|
--print |
no | Imprime solo el token AAS por stdout en lugar de guardar la cuenta. Los mensajes van a stderr |
--manual |
no | Abre Google EmbeddedSetup en tu navegador habitual y pide el email y la cookie oauth_token |
--insecure-storage |
no | Guarda el token en account.json sin probar el almacén de claves del sistema |
En conseguir un token AAS se
explican los dos modos paso a paso. goopdl aastoken sigue funcionando como
alias oculto y obsoleto de auth login --print; solo acepta --browser y
--oauth (igual que --manual).
#auth logout
Borra la cuenta guardada, su token en el almacén de claves del sistema, todos
los tokens en caché y los
registros de dispositivo del modo cuenta.
Si no puede quitar la entrada del almacén, avisa y borra el resto igualmente.
Si GOOPDL_ACCOUNT_EMAIL o GOOPDL_AAS_TOKEN siguen definidas, avisa de que
goopdl las sigue usando. Para conservar la cuenta y borrar solo la caché, usa
auth clear-cache.
goopdl auth logout#auth clear-cache
Borra todos los tokens en caché y los
registros de dispositivo del modo cuenta.
La cuenta guardada se queda: no toca account.json ni el almacén de claves
del sistema. Úsalo cuando Google deje de aceptar un dispositivo registrado: el
siguiente comando registra uno nuevo sin volver a iniciar sesión. No tiene
opciones.
goopdl auth clear-cache#auth status
Muestra el modo activo (environment, saved account o anonymous), el
email de la cuenta, dónde está el token guardado (system keyring y su
backend, o file) y un resumen de la caché. Nunca imprime un token. Si el
token está en el almacén, comprueba que siga ahí; si no, el modo pasa a
saved account (unusable) y el motivo va a stderr. Con las variables de la
cuenta definidas no abre el almacén. Termina con 2 si solo está definida una
de las variables de la cuenta.
goopdl auth status#auth token
Consigue un token anónimo del dispensador y lo guarda en caché. Con una cuenta de Google inicia sesión en Google y solo guarda el registro del dispositivo.
goopdl auth token
goopdl auth token --arch armv7
goopdl auth token --country IN
goopdl auth token --profile "Galaxy S25 Ultra"| Opción | Corta | Por defecto | Descripción |
|---|---|---|---|
--country |
-c |
— | Registra el dispositivo con el MCC/MNC de ese país, para que las llamadas posteriores con el mismo --country vean su catálogo sin proxy |
También acepta las opciones comunes.
#Códigos de salida
| Código | Significado |
|---|---|
0 |
Éxito |
1 |
Otro error |
2 |
Entrada o configuración no válida, como definir solo una de las variables de la cuenta de Google o una cuenta guardada inutilizable |
3 |
Falló la autenticación: el dispensador rechazó todos los perfiles de dispositivo, está caído o no responde, o falló el inicio de sesión con la cuenta de Google. download también termina con 3 cuando el pool de tokens está ocupado |
4 |
Versión no disponible (HTTP 404 o confirmada como no disponible) |
5 |
Límite de peticiones (HTTP 429): de Google Play tras los reintentos en download, fast-download, latest e inspect-delivery, o del dispensador de tokens cuando no queda ningún token válido en el pool (tras un 429 del dispensador, las siguientes peticiones de tokens del mismo comando fallan al momento, sin volver a preguntarle), o del inicio de sesión con la cuenta de Google |
Si el dispensador responde pero rechaza todos los perfiles, goopdl muestra
Authentication failed — all profiles rejected (last dispenser response: …)
con el último estado HTTP, o no authToken. Si el dispensador está caído,
muestra en su lugar … It may be down; retry later.
Si otro proceso de goopdl mantiene el bloqueo del pool de tokens más de 180
segundos, goopdl muestra
Token pool is busy (another goopdl process holds the lock); retry later.
y termina con 3 en download, o con 1 en latest y fast-download.
Vuelve a intentarlo cuando acabe el otro proceso.