gplaydl
The pool needs accounts. gplaydl still borrows its anonymous tokens from Aurora Store, and it will keep doing that until enough people have shared a spare Google account with our own dispenser. If you have a throwaway account going unused, here is how to add it. This banner comes down when we make the switch.
Download APKs from Google Play right from your terminal. One command gets you the base APK, split APKs (App Bundles), OBB expansion files and Play Asset Delivery packs, and you never need a Google account.
- Anonymous authentication through a token dispenser
- Base APK, splits, OBB files and asset packs downloaded together by default
- 23 device profiles, rotated automatically so authentication keeps working
- Pure-Python protobuf decoding, no
gpapidependency - Live progress bars, plus
search,infoandlist-splitsfor browsing
Help build the community pool
gplaydl has always borrowed anonymous tokens from Aurora Store's dispenser. That works, but it is not fair to lean on someone else's service forever, so gplaydl now runs its own dispenser (source). It is stocked entirely with accounts that people have shared.
If you have a throwaway Google account to spare, you can help. It takes about two minutes:
- Install the gplaydl Authenticator app on any Android device (source).
- Sign in with a spare Google account. Please do not use your personal one.
- Choose "Share with community".
Your password and 2FA codes never leave your phone. The app uploads only the resulting Play token and the account's email address. If you change your mind, you can make an account private again or delete it from the app at any time.
Once the pool is big enough to depend on, gplaydl will use it by default and stop calling Aurora's. Until then Aurora stays the default and ours is opt-in:
gplaydl auth -d https://dispenser.gplaydl.com/api/auth
gplaydl download com.whatsapp -d https://dispenser.gplaydl.com/api/auth
Pass -d on whichever command you run, so token refreshes keep using the pool too. Any dispenser that speaks the same API works, including one you host yourself. Every account shared brings the switch closer.
gplaydl mentions this once a week after a download. If you would rather it did not, set GPLAYDL_NO_BANNER=1.
Installation
Requires Python 3.9 or newer.
pip install gplaydl
Or from source:
git clone https://github.com/rehmatworks/gplaydl.git && cd gplaydl
pip install . # or skip this and run it in place:
python -m gplaydl download com.whatsapp
Quick start
gplaydl auth # get an anonymous token
gplaydl download com.whatsapp # base APK + splits + OBB/asset packs
Commands
Every command takes -d/--dispenser to pick a dispenser and --arch for the device architecture.
auth
Gets an anonymous token and caches it.
gplaydl auth # default (arm64)
gplaydl auth --arch armv7 # older 32-bit devices
gplaydl auth --clear # forget all cached tokens
Tokens live in ~/.config/gplaydl/auth-{arch}.json. The other commands reuse them and refresh them automatically before they expire.
download
Fetches the base APK, every split APK, and any extra files unless you opt out.
gplaydl download com.whatsapp # everything
gplaydl download com.whatsapp -o ./apks # custom output directory
gplaydl download com.whatsapp -a armv7 # ARMv7 build
gplaydl download com.whatsapp -v 231205015 # specific version code
gplaydl download com.whatsapp --no-splits # skip split APKs
gplaydl download com.whatsapp --no-extras # skip OBB / asset packs
| Type | Naming | Example |
|---|---|---|
| Base APK | {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 |
Install a split build on a device with adb install-multiple *.apk.
info, search and list-splits
gplaydl info com.whatsapp # version, developer, rating, downloads
gplaydl search "file manager" --limit 5 # find apps by name
gplaydl list-splits com.whatsapp # see splits without downloading
Architecture support
| Flag | ABI | Devices |
|---|---|---|
arm64 (default) |
arm64-v8a | Modern phones (2017+) |
armv7 |
armeabi-v7a | Older 32-bit phones |
How it works
- Authenticate. The dispenser hands back an anonymous Play token, trying device profiles in turn until one is accepted.
- Look up. App metadata (version, size, split list) comes from Google Play's protobuf API.
- Purchase. Free apps are "purchased" to authorise the download.
- Download. Base APK, splits, OBB files and asset packs stream in parallel from Google's CDN.
License
MIT. See LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gplaydl-2.1.7.tar.gz.
File metadata
- Download URL: gplaydl-2.1.7.tar.gz
- Upload date:
- Size: 56.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b09e2649aaed5860a7de9c047d3a9ac9e5e50cd4bb09fc3e39de7deafb96dc0
|
|
| MD5 |
053dec58cc754873aa3d9ec03262c88c
|
|
| BLAKE2b-256 |
34872e5a358d2416379d749073e1c34a858e4f8859fb27db6bc3b62af86f7593
|
Provenance
The following attestation bundles were made for gplaydl-2.1.7.tar.gz:
Publisher:
publish.yml on rehmatworks/gplaydl
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gplaydl-2.1.7.tar.gz -
Subject digest:
3b09e2649aaed5860a7de9c047d3a9ac9e5e50cd4bb09fc3e39de7deafb96dc0 - Sigstore transparency entry: 2272987695
- Sigstore integration time:
-
Permalink:
rehmatworks/gplaydl@cb0d4a8dfb4ef3346ef1a6ec66e0b86298dff4a2 -
Branch / Tag:
refs/tags/v2.1.7 - Owner: https://github.com/rehmatworks
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@cb0d4a8dfb4ef3346ef1a6ec66e0b86298dff4a2 -
Trigger Event:
push
-
Statement type:
File details
Details for the file gplaydl-2.1.7-py3-none-any.whl.
File metadata
- Download URL: gplaydl-2.1.7-py3-none-any.whl
- Upload date:
- Size: 111.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec3868f48c484e206025ef6aaefee3012e240710c07b8100ec06f84572a9acbb
|
|
| MD5 |
d43fdcfc20af342b518a3405c0a988d8
|
|
| BLAKE2b-256 |
07b66cd6888f82d81c99c1efaf9cfe85cbef8d21400caae33dac494367d138b5
|
Provenance
The following attestation bundles were made for gplaydl-2.1.7-py3-none-any.whl:
Publisher:
publish.yml on rehmatworks/gplaydl
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gplaydl-2.1.7-py3-none-any.whl -
Subject digest:
ec3868f48c484e206025ef6aaefee3012e240710c07b8100ec06f84572a9acbb - Sigstore transparency entry: 2272987752
- Sigstore integration time:
-
Permalink:
rehmatworks/gplaydl@cb0d4a8dfb4ef3346ef1a6ec66e0b86298dff4a2 -
Branch / Tag:
refs/tags/v2.1.7 - Owner: https://github.com/rehmatworks
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@cb0d4a8dfb4ef3346ef1a6ec66e0b86298dff4a2 -
Trigger Event:
push
-
Statement type: